为什么要在Django中使用基本视图?

PythonAnywhere

为什么在这种情况下,为什么要在Django中使用基本视图

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

class MyView(View):

    def get(self, request, *args, **kwargs):
        return HttpResponse('Hello, World!')

可以写成

def get(request):
    return HttpResponse('Hello, World!')

基本视图与功能视图的优点是什么?

2ps

种种原因。

  1. 您想使用专门的视图,例如TemplateView@pythonista提到的那样,它使编写视图变得更加容易。例如,

    class MyTemplateView(TemplateView):
        template_name = 'template.html'
    
  2. 当您有类似的行为时,您希望有所隔离。例如,您希望基于类的View同时处理表单呈现和表单发布:

    class MyFormView(TemplateView):
        template_name = 'form.html'
    
        def get(self, request, *args, **kwargs):
            return super(MyFormView, self).get(request, *args, **kwargs)
    
        def post(self, request, *args, **kwargs:
            value1 = request.POST.get('value1')
            value2 = request.POST.get('value2')
            # handle the post values
            return super(MyFormView, self).get(request, *args, **kwargs)
    
  3. 您拥有REST端点,并且希望在一个基于类的视图中隔离GET / POST / PUT / DELETE的所有代码。

        class RestEndpoint(View):
            def __init__(self):
                super(RestEndpoint, self).__init__()
                self.model = MyModel
    
            def get(request, n_id, *args, **kwargs):
                x = self.model.objects.get(id=n_id)
                return JsonResponse(x.to_json())
    
            def put(self, request, *args, **kwargs):
                data = json.loads(request.body)
                x = self.model(**data)
                x.save()
                return JsonResponse(x.to_json())
    
            def post(self, request, n_id, *args, **kwargs):
                data = json.loads(request.body)
                x = self.model.objects.get(id=n_id)
                for key, value in data.items():
                    setattr(x, key, value)
                x.save()
                return JsonResponse(x.to_json())
    
            def delete(self, request, n_id, *args, **kwargs):
                self.model.objects.filter(id=n_id).delete()
                return JsonResponse({})
    
  4. 您只喜欢使用类而不是函数,例如,这样您就可以创建自己的有趣的基本视图并通过继承重用代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章