为什么在这种情况下,为什么要在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!')
基本视图与功能视图的优点是什么?
种种原因。
您想使用专门的视图,例如TemplateView
@pythonista提到的那样,它使编写视图变得更加容易。例如,
class MyTemplateView(TemplateView):
template_name = 'template.html'
当您有类似的行为时,您希望有所隔离。例如,您希望基于类的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)
您拥有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({})
您只喜欢使用类而不是函数,例如,这样您就可以创建自己的有趣的基本视图并通过继承重用代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句