2013-05-29 36 views
5

首先,我希望兩個視圖都使用完全相同的URL,因爲我不想讓URLConf更加複雜。我希望單獨的GET和POST視圖使我的代碼更清晰。代碼是這樣的:如何爲GET和POST編寫單獨的視圖

def view2 (request): 
    # handle POST request, possibly a ajax one 
    return HTTPRESPONSE(json_data, mimetype="Application/JSON") 

def view1 (request): 
    if method == POST: 
     view2(request) 
     # What should I return here??? 

    else: 
     # handle GET 
     return render(request, template, context) 

我的問題是關於# What should I return here???線。如果我不把返回那裏,出現錯誤:

沒有返回HTTP響應

但我已經返回view2的HTTP響應。我該如何做這項工作?

+0

你應該回報'常見的情況一大堆視圖2(請求)'。 View2將結果返回給調用者(即'view1'),但調用者也需要返回它。 – J0HN

回答

4

您需要返回視圖2的結果:,可能有點更清潔的方式將使用class-based views

from django.views.generic import TemplateView 

class View1(TemplateView): 
    def get(self, request, *args, **kwargs): 
     """handle get request here""" 

    def post(self, request, *args, **kwargs): 
     """handle post request here""" 

    def head(self, request, *args, **kwargs): 
     """handle head request here. Yes, you can handle any kind of requests, not just get and post""" 

當然你也可以添加常用的方法,__init__(這是

def view1 (request): 
    if request.method == 'POST': 
     return view2(request) 
    else: 
     # handle GET 
     return render(request, template, context) 
+0

啊哈,謝謝! – Philip007

6

另一個沒用,除非你確定你在做什麼),應用login_required(見this SO question)以及幾乎所有你可以用django視圖做的事情(例如,應用中間件,權限等) python類(例如繼承,元類/裝飾等)

此外,還有通用的基於類視圖使用Django來解決諸如列表頁,詳細信息頁面,編輯頁面等

+1

我真的很喜歡這個答案。它使代碼非常清晰,易於維護。 – Dunatotatos

相關問題