我正在尝试将一些登录数据传递给 Django 应用程序中的视图,但我没有收到视图的 POST 数据。首先是带有登录界面的模板。
<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>
接下来,我将其传递给我的登录视图,该视图在我的views.py 中定义如下,这就是问题发生的地方。
from django.contrib.auth import authenticate, login
def login(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
#logic with directing user to the login page again or to the access they need
在我尝试分配给用户名变量的那一行,我得到了错误:
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 信息或 GET 信息。我不确定 A.为什么它说请求方法是 GET,因为我在模板中指定了 POST 和 B.为什么没有 POST 或 GET 数据。如果有人知道我可能会在 Django/Python 中使用 POST 数据时遗漏一些信息,或者需要另一条很棒的信息。提前感谢您的帮助。
编辑:一些进展。通过放入完整路径,我设法通过第一个建议的反向错误加载页面。在这一点上,我的问题的症结在于弄清楚如何使表单数据以 POST 而不是 GET 的形式到达视图函数。
编辑:这是我在应用程序目录中的 urls.py 文件
from django.conf.urls import patterns, include, url
urlpatterns = patterns('Minion.views',
url(r'^$', 'home'),
url(r'^login/$', 'login'),
#some other unrelated pages are here, I haven't done anything with them yet though
)