如何为GET和POST编写单独的视图

时间:2013-05-29 18:57:28

标签: django

首先,我希望两个视图使用完全相同的URL,因为我不想让我的URLConf更复杂。我想要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响应。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:6)

另一种可能更简洁的方法是使用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__(除非您确定自己在做什么,否则无用),应用login_required(请参阅this SO question)以及几乎所有内容使用django视图(例如应用中间件,权限等) python类(例如继承,元类/装饰器等)

此外,Django还有一大堆基于通用类的视图,用于解决列表页面,详细信息页面,编辑页面等常见情况。

答案 1 :(得分:4)

您需要返回view2的结果:

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