Python Django视图中缺少POST数据
我试图将一些登录数据传递给Django应用程序中的一个视图,但没有将POST数据传递给该视图。首先是带有登录界面的模板Python Django视图中缺少POST数据,python,django,post,Python,Django,Post,我试图将一些登录数据传递给Django应用程序中的一个视图,但没有将POST数据传递给该视图。首先是带有登录界面的模板 <form method="post" action="login"> {% csrf_token %} Username<input type="text" name="username"><br /> Password<input type="password" name="password"><br /
<form method="post" action="login">
{% csrf_token %}
Username<input type="text" name="username"><br />
Password<input type="password" name="password"><br />
<input type="submit" value="Login" />
</form>
在我尝试分配给username变量的行中,我得到了错误:
MultiValueDictKeyError at /minion/login
"Key 'username' not found in <Querydict: {}>"
Request Method: GET
Request URL: http://127.0.0.1:8000/minion/login
Django Version: 1.5.1
似乎你得到的是请求,而不是POST或之后或之前
Request Method: GET
Request URL: http://127.0.0.1:8000/minion/login
我想你应该检查一下请求方法
from django.contrib.auth import authenticate, login
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
# otherwise create page with form or redirect
POST请求可能是意外的,并且是通过某种重定向完成的(例如,缺少尾随斜杠可能会导致重定向)。您应该注意这种情况。似乎您使用的是GET请求,而不是POST或之后或之前
Request Method: GET
Request URL: http://127.0.0.1:8000/minion/login
我想你应该检查一下请求方法
from django.contrib.auth import authenticate, login
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
# otherwise create page with form or redirect
POST请求可能是意外的,并且是通过某种重定向完成的(例如,缺少尾随斜杠可能会导致重定向)。您应该注意这种情况。您正在被重定向 您的表单操作(即目的地)只是
login
。但Django的默认配置是以最后一个斜杠结束所有URL,如果URL没有这样做,则重定向:因此浏览器正在从/login
重定向到/login/
。重定向总是GET,因此POST数据丢失
使用
action=“/login/”
一切都会好起来。你被重定向了
您的表单操作(即目的地)只是login
。但Django的默认配置是以最后一个斜杠结束所有URL,如果URL没有这样做,则重定向:因此浏览器正在从/login
重定向到/login/
。重定向总是GET,因此POST数据丢失
使用
action=“/login/”
一切都会好起来。将操作更改为“{%'Minion.views.authUser”%”,并将视图函数更改为authUser,因为它与从auth模块导入的登录函数冲突,并且一切都开始正常工作。将操作更改为“{%'Minion.views.authUser”%}并将view函数更改为authUser,因为它与从auth模块导入的登录函数冲突,并且一切都开始正常工作。尝试此操作,它将确保在您的views.py中正常工作
from django.contrib.auth import authenticate, login
def login(request):
if request.method == 'POST':
data = request.POST
username = data['username']
password = data['password']
user = authenticate(username=username, password=password)
试试这个,它一定能在你的views.py中工作
from django.contrib.auth import authenticate, login
def login(request):
if request.method == 'POST':
data = request.POST
username = data['username']
password = data['password']
user = authenticate(username=username, password=password)
将操作更改为
{%url login%}
,这会给我一个NoReverseMatch errorwell。。将其更新为适当的URL名称。我刚才给你看了一个例子,URL名是“login”,我就是这么用的。哦。。您需要将视图代码括在if request.POST:
中,这样,只有当{%url login%}
的submitchange操作给我一个NoReverseMatch errorwell时,它才会命中该代码。。将其更新为适当的URL名称。我刚才给你看了一个例子,URL名是“login”,我就是这么用的。哦。。您需要将视图代码括在if request.POST:中,这样,只有当有提交者时,它才会命中该代码。为了完整性-在HTML表单中-设置属性'method='POST'“然后您的请求将是post而不是GET,因为我可以看到他有这样一个字符串
,虽然这确实防止了错误,但它也阻止了我的视图执行我需要的任何操作。我需要应用程序使用post.ok,因为我知道你已经向{%url login%}发出post请求。你能提供url.py吗?Django重定向您(我认为是因为尾部斜杠),您发出了GET请求。在这种情况下,您应该使用正确的url来避免重定向,以确保完整性-在HTML表单中-设置属性'method='post'“然后您的请求将是post而不是GET,因为我可以看到他有这样一个字符串
,虽然这确实防止了错误,但它也阻止了我的视图执行我需要的任何操作。我需要应用程序使用post.ok,因为我知道你已经向{%url login%}发出post请求。你能提供url.py吗?Django重定向您(我认为是因为尾部斜杠),您发出了GET请求。在这种情况下,您应该使用正确的url来避免重定向我仍然有一个带有此建议的GET方法我仍然有一个带有此建议的GET方法