gpt4 book ai didi

基于 Django 类的 View - 线程安全

转载 作者:行者123 更新时间:2023-12-02 05:40:42 26 4
gpt4 key购买 nike

我对 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com