【问题标题】:Django GET and POST handling methodsDjango GET 和 POST 处理方法
【发布时间】:2023-04-20 15:30:02
【问题描述】:

我想要一种以集中方式自动将 GET 和 POST 请求路由到后续方法的方法。 我想通过以下方式创建我的处理程序。

class MyHandler(BaseHandler):
    def get(self):
        #handle get requests

    def post(self):
        #handle post requests

这就是 webapp2 所做的,我非常喜欢这种风格,在 Django 中可以做到吗? 我也想要类方法风格的视图。我应该写什么样的BaseHandler和路由器。

提示:使用 django 通用视图。

【问题讨论】:

  • 我假设你的第二个 def get(self): 应该是 def post(self): ?
  • 公平地说,你描述了你想要什么,但你没有描述你尝试了什么。您似乎希望我们为您编写所有内容...
  • 请不要对此评论投反对票 :D djangosnippets.org/snippets/1912 这绝对不是在 Django 中开发(好的)东西的方式。请阅读该页面中的其他 cmets!
  • 我希望这是一种经常使用的模式,所以会有某种可以使用的 BaseHandler。
  • @specialscope Django 有不同的方法来做到这一点。不是更难,而是不同。 :) 学习吧!

标签: python django


【解决方案1】:

这在 Django 中被支持为 class based views。您可以扩展泛型类View 并添加get()post()put() 等方法。 -

from django.http import HttpResponse
from django.views.generic import View

class MyView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('This is GET request')

    def post(self, request, *args, **kwargs):
        return HttpResponse('This is POST request')

来自View 类的dispatch() 方法处理这个-

调度(请求,*args,**kwargs)

视图的视图部分—— 接受请求参数和参数的方法,并返回一个 HTTP 响应。

默认实现将检查 HTTP 方法并尝试 委托给与 HTTP 方法匹配的方法;一个 GET 将是 委托给 get(),一个 POST 给 post(),等等。

默认情况下,HEAD 请求将委托给 get()。如果你需要 以不同于 GET 的方式处理 HEAD 请求,您可以覆盖 头()方法。有关示例,请参阅支持其他 HTTP 方法。

默认实现还将 request、args 和 kwargs 设置为 实例变量,因此视图上的任何方法都可以知道完整的 为调用视图而发出的请求的详细信息。

那你就可以在urls.py使用了——

from django.conf.urls import patterns, url

from myapp.views import MyView

urlpatterns = patterns('',
    url(r'^mine/$', MyView.as_view(), name='my-view'),
)

【讨论】: