不允许使用 Django 方法 (POST)

Posted

技术标签:

【中文标题】不允许使用 Django 方法 (POST)【英文标题】:Django Method Not Allowed (POST) 【发布时间】:2017-07-16 19:57:41 【问题描述】:

在视图中:

def article_add(request):
    print request.user, " is adding an article"
    if request.method == "POST":
        web_url = request.POST['web_url']
        Uploadarticle(web_url)
        return redirect('myapp:index')

html中:

<form class="navbar-form navbar-right" role="form" method="post" action="% url 'myapp:article_add' %" enctype="multipart/form-data">
% csrf_token %
    <div class="form-group">
        <div class="col-sm-10">
        <input id="article_url" name="web_url" type="text">
        </div>
   </div>
   <button type="submit" class="btn btn-default"> + </button>
</form>

在 url.py 中:

app_name = 'myapp'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^$', views.article_add, name='article_add'),
]

我在这里要做的是通过html传递url值来查看,调用函数上传数据库,将用户重定向到与刷新相同的主页,然后将显示新添加的项目。

不知何故,每次我提交时我都会得到一个空白页面,在终端我得到一个错误说:

Method Not Allowed (POST): /
"POST / HTTP/1.1" 405 0

【问题讨论】:

您可以访问article_add 视图吗?你在使用基于功能的视图吗?你能把你的主要 urls.py 放在这里吗 【参考方案1】:

您的 urls.py 有一个小错误,请按照以下方式更改您的 urls.py

app_name = 'myapp'

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^article-add/$', views.article_add, name='article_add'),
]

如果您在主项目 urls.py 中包含 'myapp' urls.py,那么在 html 中的表单中也可以这样输入 action="% url 'article_add' %"

【讨论】:

【参考方案2】:

正如我在代码中看到的,您对两个视图都使用相同的 URL,因此,每当您点击 URL / 时,请求都会转到可能没有任何发布方法的第一个视图(IndexView)。更改 article_add 视图的 URL。这样做:

app_name = 'myapp'
urlpatterns = [
    url(r'^article-add/$', views.article_add, name='article_add'),
    url(r'^$', views.IndexView.as_view(), name='index'),

]

您将能够从 URL host_address/article-add/ 访问视图

【讨论】:

我想,一旦我创建了一个不同的网址,它就可以工作了。谢谢

以上是关于不允许使用 Django 方法 (POST)的主要内容,如果未能解决你的问题,请参考以下文章

方法不允许 (POST) Django 405 错误

django:通用类视图 + POST = HTTP 405(不允许的方法)

django-rest-framework - POST 请求返回“方法 \"GET\" 不允许。”

将表单添加到 Django DetailView 错误消息:不允许的方法(POST)

不允许的方法 (POST):/profiles/flash/ 不允许的方法:/profiles/flash/

如何响应 Django 基于类的视图中不允许的方法