avo*_*rum 0 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 />
<input type="submit" value="Login" />
</form>
Run Code Online (Sandbox Code Playgroud)
接下来,将其传递给我的登录视图,该视图在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
Run Code Online (Sandbox Code Playgroud)
在我尝试分配给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
Run Code Online (Sandbox Code Playgroud)
奇怪的是,在页面的“请求信息”部分中,它说没有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
)
Run Code Online (Sandbox Code Playgroud)
您正在被重定向。
您的表单操作(即目的地)为login。但是Django的默认配置是在所有URL末尾加一个斜杠,如果URL不能这样做,则将其重定向:因此,浏览器将从重定向/login到/login/。重定向始终是GET,因此POST数据会丢失。
使用action="/login/"一切都会好起来的。
| 归档时间: |
|
| 查看次数: |
9048 次 |
| 最近记录: |