我对 Java Web 应用程序有一些经验。在 servlet 中,您必须将基于类的属性声明为 Final,因为它不是线程安全的。
当我尝试与基于 Django 类的 View 进行比较时。假设下面的代码是线程安全的吗?我相信它是线程安全的,但有人让我知道了 Django 中的多线程应用程序需要注意的事项列表。
class MyFormView(View):
form_class = MyForm
initial = {'key': 'value'}
template_name = 'form_template.html'
def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
person = Person()
if form.is_valid():
# <process form cleaned data>
return HttpResponseRedirect('/success/')
return render(request, self.template_name, {'form': form})
编辑-1
创建一个新类并在 POST 方法中启动
类人(对象): 名称 = '样本'
最佳答案
基于类的 View 上的类属性在所有线程之间共享,并且通常不是线程安全的。您应该将类属性视为只读属性,这也是 Django 所做的。这意味着您可以将 initial
设置为字典,但永远不应该修改该字典。对于传递给 View.as_view() 的参数也是如此。
实例属性是线程安全的。每次调用 View 时,都会创建 View 类的新实例,该实例永远不会在线程之间共享。这意味着您可以设置和修改实例属性,例如 self.object,而不必担心并发线程。
关于基于 Django 类的 View - 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34384604/