403 与 django 的基于类的视图

Posted

技术标签:

【中文标题】403 与 django 的基于类的视图【英文标题】:403 with django's class based view 【发布时间】:2013-09-29 07:32:12 【问题描述】:

所以这是我写的一个简单的视图。

class PostTestView(View):
    def post(self, request, *args, **kwargs):
        print request.POST
        return HttpResponse("Hello there")

我的urls.py 在上面的视图中有这一行:

url(r'^test/create$',PostTestView.as_view(), name='app.views.create_test')

但是当我尝试点击 http://127.0.0.1:8000/app/test/create 时,我得到一个 405 Http error

这显然意味着我的方法post 不在定义的方法列表中。但在我看来,我已经将其定义为如上。 这里可能有什么问题?我一无所知

【问题讨论】:

【参考方案1】:

尝试定义 get 方法。

“post”方法在表单中很常用,但是当您将浏览器指向一个 url 时,使用的方法是“get”

【讨论】:

实际上,尽量避免直接覆盖postget,除非您确切知道自己在做什么。相反,请使用通用 CBV 作为起点,根据您尝试对视图执行的操作来选择一个。 这是一个基于类的视图 (CBV)。如果您查看 django 文档docs.djangoproject.com/en/dev/topics/class-based-views/intro,则覆盖 get 和 post 方法是记录在案的做事方式。我猜你指的是基于类的通用视图,这是一个很好的观点,如果可以的话,请使用基于类的通用视图。 你是对的,我说的是通用 CBV。但是,与基于函数的视图不同,强烈建议在深入挖掘之前尝试找到合适的通用 CBV,因为您几乎肯定会找到一个。这就是为什么我对您的答案发表评论(这不是错误的)而不是写另一个答案。 尝试 FormView 或 LoginView(从 django.contrib.auth.views 导入 LoginView)。您将获得可以通过 GET 请求看到的模板,然后尝试使用提交按钮 POST 表单。

以上是关于403 与 django 的基于类的视图的主要内容,如果未能解决你的问题,请参考以下文章

将基于缓存 Django 类的视图响应与请求中的参数绑定

Django入门与实践-第22章:基于类的视图

Django:在基于类的视图中包含媒体(css/js)

使用 UserPassesTestMixin(基于类的视图)和重定向

Django 之 Views视图理解

基于 Django 类的视图和通用视图详细信息使用