day*_*mer 11 python flask flask-login flask-extensions
我的login
终点看起来像
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
print request.form # debug line, see data printed below
user = User.get(request.form['uuid'])
if user and hash_password(request.form['password']) == user._password:
login_user(user, remember=True) # change remember as preference
return redirect('/home/')
else:
return 'GET on login not supported'
Run Code Online (Sandbox Code Playgroud)
当我使用测试时curl
,GET
调用看起来像
? ~PYTHONPATH ? ? 43± ? curl http://127.0.0.1:5000/login/
GET on login not supported
Run Code Online (Sandbox Code Playgroud)
但是POST
,我无法访问表单数据并获取HTTP 400
? ~PYTHONPATH ? ? 43± ? curl -d "{'uuid': 'admin', 'password': 'admin'}" http://127.0.0.1:5000/login/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>
Run Code Online (Sandbox Code Playgroud)
但是在服务器上,我的调试信息打印出以下内容
ImmutableMultiDict([("{'uuid': 'admin', 'password': 'admin'}", u'')])
Run Code Online (Sandbox Code Playgroud)
我在哪里print request.form
.我无法理解我做错了什么
你没有curl
正确使用.试试这样:
curl -d 'uuid=admin&password=admin'
Run Code Online (Sandbox Code Playgroud)
400 Bad Request
当您尝试从中获取不存在的键时,错误是通常的行为request.form
.
或者,使用request.json
而不是像这样request.form
调用curl
:
curl -d '{"uuid":"admin","password":"admin"}' -H "Content-Type: application/json"
Run Code Online (Sandbox Code Playgroud)
您仍然需要返回响应:
from flask import abort
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
user = User.get(request.form['uuid'])
if user and hash_password(request.form['password']) == user._password:
login_user(user, remember=True)
return redirect('/home/')
else:
return abort(401) # 401 Unauthorized
else:
return abort(405) # 405 Method Not Allowed
Run Code Online (Sandbox Code Playgroud)
这是自定义Flask错误页面的文档.
另外,请查看Flask-Bcrypt进行密码散列.
您的CURL命令行无效.JSON对象需要在键和值周围加上双引号:
$ curl -d '{"uuid": "admin", "password": "admin"}' http://127.0.0.1:5000/login/
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用以下方式访问密钥request.json
.
归档时间: |
|
查看次数: |
40096 次 |
最近记录: |