不允许使用 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)的主要内容,如果未能解决你的问题,请参考以下文章
django:通用类视图 + POST = HTTP 405(不允许的方法)
django-rest-framework - POST 请求返回“方法 \"GET\" 不允许。”
将表单添加到 Django DetailView 错误消息:不允许的方法(POST)