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

Django 如何为GET和POST编写单独的视图,django,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 == POS

首先,我希望两个视图使用完全相同的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)
我的问题是关于
#我应该在这里返回什么??
行。如果我没有在那里放一个返回,则会发生错误:

不返回http响应


但是我已经在view2中返回了HTTP响应。我如何才能做到这一点?

您需要返回view2的结果:

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

另一种可能更干净的方法是使用

当然,您可以添加常用方法,
\uuuuu init\uuuuu
(除非您确定自己在做什么,否则这是没有用的)、应用
登录所需的
(请参阅)以及使用django视图(例如,应用中间件、权限等)和python类(例如继承、元类/装饰器等)可以做的几乎所有事情


此外,Django还提供了大量基于类的通用视图,用于解决列表页、详细信息页、编辑页等常见情况。

您应该
返回视图2(请求)
。View2将结果返回给调用者(即
view1
),但调用者也需要返回结果。我非常喜欢这个答案。它使代码非常清晰,易于维护。这绝对是处理视图的更好方法。当您可以调用单独的函数时,您不想在
if-else
中编写两个大型复杂逻辑。
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"""