【问题标题】:403 with django's class based view403 与 django 的基于类的视图
【发布时间】: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 不在定义的方法列表中。但在我看来,我已经将其定义为如上。 这里可能有什么问题?我一无所知

【问题讨论】:

    标签: python django post django-class-based-views http-status-code-405


    【解决方案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 表单。
    猜你喜欢
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2014-02-16
    • 2018-05-14
    • 2014-02-21
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多