Django视图,逻辑和瘦控制器

时间:2013-04-29 18:31:40

标签: python django django-models django-views

所以,我有一个Django视图,它基于django.views.generic.View,只接受POST个请求。它以application/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)

所以,在我看来,这就像将逻辑放在错误的层中一样。哪里是处理传递给View的内容的最佳位置,以及生成/无法生成适当的Subscription对象。

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

1 个答案:

答案 0 :(得分:0)

  

处理传递给View的内容的最佳位置   生成/不能生成适当的Subscription对象

我认为

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

数据验证逻辑的某些部分可以封装在表单中:

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