最新的差值(在语言蟒/ django的小白可以理解)在之间的视图render()
,render_to_response()
和direct_to_template()
?
def comment_edit(request, object_id, template_name='comments/edit.html'):
comment = get_object_or_404(Comment, pk=object_id, user=request.user)
# ...
return render(request, template_name, {
'form': form,
'comment': comment,
})
Run Code Online (Sandbox Code Playgroud)
但我也看到了
return render_to_response(template_name, my_data_dictionary,
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
和
return direct_to_template(request, template_name, my_data_dictionary)
Run Code Online (Sandbox Code Playgroud)
什么区别,在任何特定情况下使用什么?
我有一个单元测试(nUnit).调用堆栈中的许多层如果通过单元测试运行,则方法将失败.
理想情况下,你会使用像mocking这样的东西来设置这个方法所依赖的对象,但这是第三方代码,如果没有大量工作我就不能这样做.
我不想设置nUnit特定的方法 - 这里有太多的级别,并且它是一个很差的单元测试方法.
相反,我想要做的是在调用堆栈中添加类似这样的东西
#IF DEBUG // Unit tests only included in debug build
if (IsRunningInUnitTest)
{
// Do some setup to avoid error
}
#endif
Run Code Online (Sandbox Code Playgroud)
那么关于如何编写IsRunningInUnitTest的任何想法?
PS我完全清楚这不是很好的设计,但我认为它比替代品更好.
有类似的东西
对于很多表来说,这将是一种非常常见的模式.
1)您可以在model.py中自动设置创建日期(但不能设置其他日期)
created_date = models.DateTimeField(auto_now_add=True, editable=False)
Run Code Online (Sandbox Code Playgroud)
2)您可以在model.py中创建/修改日期(但不是/ user,因为没有请求上下文)
def save(self):
if self.id:
self.modified_date = datetime.now()
else:
self.created_date = datetime.now()
super(MyModel,self).save()
Run Code Online (Sandbox Code Playgroud)
3)您可以在admin.py中设置创建/修改日期 - 但这不涉及非管理员更新
def save_model(self, request, obj, form, change):
if change:
obj.modified_by = request.user
obj.modified_date = datetime.now()
else:
obj.created_by = request.user
obj.created_date = datetime.now()
obj.save()
Run Code Online (Sandbox Code Playgroud)
4)最后的位置将在view.py中,它可以完成所有4,但不包括管理员更新.
所以现实必须要有逻辑分散,至少在3和4中重复(或者从两者调用的模型上的方法,这将被遗漏)
什么是更好的方式?(我已经使用python/django工作了几天所以很容易丢失一些明显的东西)
使用Visual Studio 2012时,如何获得SignTool.exe的路径?
在Visual Studio 2010中,您可以使用
<Exec Command=""$(FrameworkSDKDir)bin\signtool.exe" sign /p ... />
Run Code Online (Sandbox Code Playgroud)
哪里$(FrameworkSDKDir)
是
"c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\"
Run Code Online (Sandbox Code Playgroud)
但在Visual Studio 2012中,$(FrameworkSDKDir)
是
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\"
Run Code Online (Sandbox Code Playgroud)
和SignTool在
"c:\Program Files (x86)\Windows Kits\8.0\bin\x64\"
Run Code Online (Sandbox Code Playgroud)
有越来越路径不是硬编码等这个目录的方式(我试过FrameworkSDKDir
和WindowsSDKDir
,但都指向v8.0A目录).
考虑一个包含大量需要处理的作业的队列.队列限制一次只能获得1个工作,无法知道有多少工作.这些作业需要10秒才能完成,并且需要大量等待来自Web服务的响应,因此不受CPU限制.
如果我使用这样的东西
while (true)
{
var job = Queue.PopJob();
if (job == null)
break;
Task.Factory.StartNew(job.Execute);
}
Run Code Online (Sandbox Code Playgroud)
然后,它会以比完成它们更快的速度从队列中快速弹出作业,耗尽内存并堕落.> <
我不能使用(我不认为)ParallelOptions.MaxDegreeOfParallelism因为我不能使用Parallel.Invoke或Parallel.ForEach
我找到了3个替代方案
用.替换Task.Factory.StartNew
Task task = new Task(job.Execute,TaskCreationOptions.LongRunning)
task.Start();
Run Code Online (Sandbox Code Playgroud)
这似乎在某种程度上解决了这个问题,但我不清楚这是做什么的,如果这是最好的方法.
创建一个限制并发度的自定义任务调度程序
使用类似BlockingCollection的东西在启动时将作业添加到集合中,并在完成时删除以限制可以运行的编号.
#1我必须相信自己做出正确的决定,#2 /#3我必须计算出自己可以运行的最大数量的任务.
我是否理解正确 - 这是更好的方式,还是有另一种方式?
编辑 - 这是我从下面的答案,生产者 - 消费者模式中得出的结果.
除了整体吞吐量目标不是要比可以处理的更快地使作业出列并且没有多个线程轮询队列(这里没有显示但是这是非阻塞的操作并且如果从多个地方以高频率轮询将导致巨大的交易成本) .
// BlockingCollection<>(1) will block if try to add more than 1 job to queue (no
// point in being greedy!), or is empty on take.
var BlockingCollection<Job> jobs = …
Run Code Online (Sandbox Code Playgroud) XPath(v1)无法编码表达式.
如果您只有单个OR双引号,那么您可以使用诸如的单词
//review[@name="Bob's Pizza"]
//review[@name='"Pizza" Pam']
Run Code Online (Sandbox Code Playgroud)
但是如果你有两个例如[弗雷德的"Fancy Pizza"]那么你必须在XPath(C++)中使用像Escaping Strings这样的东西来生成
//review[@name=Concat("Fred's ",'"Fancy Pizza"')]
Run Code Online (Sandbox Code Playgroud)
任何人都有c#函数来执行此操作?
一些链接很接近
编辑:一些答案建议转义'with '
和',"
但虽然这是有道理的,它不起作用;尝试使用XML片段:
<review name="Bob's Pizza"/>
Run Code Online (Sandbox Code Playgroud)
和xpath
//review[@name='Bob's Pizza']
Run Code Online (Sandbox Code Playgroud) 尝试在几个后端IIS服务器前使用AAR作为反向代理.
分配给运行IIS/AAR的服务器的一个公共IP地址
然后设置出站URL重写规则,以根据主机名重定向到多个后端服务器之一.
有点工作,但总是返回后端服务器默认站点(不是映射到主机名的站点),所以看起来主机名(HTTP_HOST)没有从代理服务器传递到后端服务器.
(我已通过编辑主机验证绕过反向代理,后端服务器返回绑定到主机头的正确站点)
这是规则的一个示例(192.168.0.99是内部服务器,site.myco.com是主机名)
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://192.168.1.99/{R:1}" />
</rule>
</rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)
已经尝试过设置服务器变量
<!-- Guessing server.myco.com is hard coded -->
<serverVariables>
<set name="HTTP_HOST" value="server.myco.com" />
</serverVariables>
<!-- Guessing picked up dynamically from incoming request host header -->
<serverVariables>
<set name="HTTP_HOST" value="{HTTP_HOST}" />
</serverVariables>
Run Code Online (Sandbox Code Playgroud)
但是唉总是返回默认绑定 - 任何想法?
有没有办法在List中的每个对象上调用一个方法 - 例如
代替
List<MyClass> items = setup();
foreach (MyClass item in items)
item.SomeMethod();
Run Code Online (Sandbox Code Playgroud)
你可以做点什么
foreach(items).SomeMethod();
Run Code Online (Sandbox Code Playgroud)
内置任何东西,扩展方法,还是我只是太懒了?