Как получить доступ к данным формы, используя колбу?
Мой 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'
Когда я проверяю это с помощью curl
, GET
звонок выглядит
⮀ ~PYTHONPATH ⮀ ⭠ 43± ⮀ curl http://127.0.0.1:5000/login/
GET on login not supported
но на 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>
На сервере, однако, моя отладочная информация печатает следующее
ImmutableMultiDict([("{'uuid': 'admin', 'password': 'admin'}", u'')])
где я делаю print request.form
, Я не могу понять, где я делаю неправильно
2 ответа
Вы не используете curl
правильно. Попробуйте вот так:
curl -d 'uuid=admin&password=admin'
400 Bad Request
ошибка - это обычное поведение, когда вы пытаетесь получить несуществующие ключи от request.form
,
В качестве альтернативы используйте request.json
вместо request.form
и позвонить curl
как это:
curl -d '{"uuid":"admin","password":"admin"}' -H "Content-Type: application/json"
Вам все еще нужно вернуть ответ:
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
Вот документация для пользовательских страниц ошибок Flask.
Также взгляните на Flask-Bcrypt для хеширования паролей.
Ваша командная строка CURL недействительна. Объекты JSON должны иметь двойные кавычки вокруг ключей и значений:
$ curl -d '{"uuid": "admin", "password": "admin"}' http://127.0.0.1:5000/login/
Теперь вы можете получить доступ к ключам с request.json
,