Django 如何为GET和POST编写单独的视图
首先,我希望两个视图使用完全相同的URL,因为我不想使我的URLConf更复杂。我希望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
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"""