2013-04-29 34 views
1

所以,我有一個Django視圖,它基於django.views.generic.View,它只接受POST請求。它以application/x-www-form-urlencoded格式進行基本調用,解析它們,然後根據需要進行響應。我意識到這是失敗的瘦身控制器,脂肪模型的想法,但我不確定放置以下邏輯的最佳位置,因爲它與視圖有關,而不是專門針對底層模型。Django視圖,邏輯和瘦身控制器

目前,視圖處理一些邏輯來創造新的訂閱:

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對象上進行處理,然後將HttpResponses返回給視圖?還是應該返回狀態'和消息,然後通過創建正確的HttpResponse對象的視圖中繼給用戶?

+0

聽起來像是你可能能夠使用一個'ModelForm'做驗證,但它可能是矯枉過正。關於放置這種代碼的最佳位置是值得商榷的,所以任何答案都可能與任何其他答案一樣有效。 – Aya 2013-04-29 18:53:17

回答

0

處理被傳遞到View什麼,並 生成/不生成認購對象適當

最好的地方就是視圖,我想。所以,在我看來,你提供的代碼片斷是絕對正確的。

數據驗證邏輯的某些部分可以被封裝在形式:

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