在Django视图中使用静态变量是一种好的做法吗?

2024-10-02 04:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

假定在POST方法之前至少一次调用get方法(这不是我的实际代码,如果有任何愚蠢的错误,不要考虑它,我的问题是我可以实例化并使用下面的静态变量)

class McqView(View):
      course=None
      all_questions=None
      start_time=None
      def get(self,request,someid):
             if not McqView.course:
                 McqView.course = Course.objects.get(id=someid)
             if not McqView.all_questions:
                 McqView.all_questions = Question.objects.filter(course=McqExamView.course)
             if not McqView.start_time:
                 McqView.start_time = datetime.now()
             #using the static variables somewhere here

      def post(self,request):
              #using the same static variables somewhere here

我曾想过使用这两个变量作为成员变量,但这是不可能的。所以我想用这两个变量作为静态变量。使用此方法时会出现任何问题吗?喜欢 1.静态变量变为无 2.静态变量多次实例化。 如果发生第二种情况,则start_时间变量值将出错

请告诉我这是否是一种错误的方法,如果是错误的,请告诉我另一种方法


Tags: 实例方法nonegetiftimedef错误
1条回答
网友
1楼 · 发布于 2024-10-02 04:30:37

虽然基于最小类的视图不需要任何类属性来执行其工作,但类属性在许多基于类的设计中非常有用,有两种方法可以配置或设置类属性

第一种是标准的Python方法,用于对子类中的属性和方法进行子分类和重写。因此,如果父类具有如下属性greeting

from django.http import HttpResponse
from django.views import View

    class GreetingView(View):
        greeting = "Good Day"
    
        def get(self, request):
            return HttpResponse(self.greeting)

您可以在子类中重写它:

class MorningGreetingView(GreetingView):
    greeting = "Morning to ya"

另一个选项是将类属性配置为URLconf中的as_view()调用的关键字参数:

urlpatterns = [
    path('about/', GreetingView.as_view(greeting="G'day")),
]

注意-当为每个发送到它的请求实例化类时,通过as_view()入口点设置的类属性在导入URL时只配置一次

相关问题 更多 >

    热门问题