所以,我有一个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对象的视图转发给用户?
答案 0 :(得分:0)
在
我认为处理传递给View的内容的最佳位置 生成/不能生成适当的Subscription对象
是视图。因此,在我看来,您提供的代码片段是绝对正确的。
数据验证逻辑的某些部分可以封装在表单中:
if form.is_valid():
[ we're ready to roll, create a Subscription object ]
else:
return HttpResponse('%...' % form.errors, status=400)