Python Django视图、逻辑和精简控制器

Python Django视图、逻辑和精简控制器,python,django,django-models,django-views,Python,Django,Django Models,Django Views,因此,我有一个Django视图,它基于Django.views.generic.view,它只接受POST请求。它以应用程序/x-www-form-urlencoded格式接受基本调用,解析它们,然后根据需要进行响应。我意识到这在瘦控制器、胖模型的想法上是失败的,但我不确定放置以下逻辑的最佳位置,因为它与视图相关,而不是与底层模型相关 目前,视图处理一些创建新订阅的逻辑: class ExampleView(View): def post(self, request, *args, **

因此,我有一个Django视图,它基于
Django.views.generic.view
,它只接受
POST
请求。它以
应用程序/x-www-form-urlencoded
格式接受基本调用,解析它们,然后根据需要进行响应。我意识到这在瘦控制器、胖模型的想法上是失败的,但我不确定放置以下逻辑的最佳位置,因为它与视图相关,而不是与底层模型相关

目前,视图处理一些创建新订阅的逻辑:

class ExampleView(View):

   def post(self, request, *args, **kwargs):
        mode = request.POST.get('mode')

        if not mode:
            return HttpResponse('mode required', status=400)

        if mode == 'subscribe':
            if not request.POST.get('topic'):
                return HttpResponse('topic required', status=400)

            if not [ another required argument ]:
                and so on ...

            [ If we're ready to roll, create a Subscription object ]

            return HttpResponse('Subscribed', status=200)
因此,在我看来,这似乎是把逻辑放错了层次。何处是处理传递给视图的内容以及生成/无法生成订阅对象(视情况而定)的最佳位置

是否应该在Subscription对象上处理提供的数据,然后Subscription对象将HttpResponse返回给视图?或者它应该只返回状态和消息,然后通过创建正确的HttpResponse对象的视图将其转发给用户?

处理传递给视图和 根据需要生成/未能生成订阅对象

是视图,我想。所以,在我看来,您提供的代码片段是绝对正确的

数据验证逻辑的某些部分可以封装为以下形式:

    if form.is_valid():
        [ we're ready to roll, create a Subscription object ]
    else:
        return HttpResponse('%...' % form.errors, status=400)

听起来您可能可以使用
ModelForm
来进行验证,但这可能有些过分。关于放置这种代码的最佳位置还有争议,因此任何答案都可能与其他答案一样有效。