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”
【讨论】:
实际上,尽量避免直接覆盖post
和get
,除非您确切知道自己在做什么。相反,请使用通用 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 的基于类的视图的主要内容,如果未能解决你的问题,请参考以下文章