python - example - cómo acceder a los datos del formulario usando un matraz?
login html python (2)
Mi punto de login
parece
@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''
Cuando pruebo esto usando curl
, la llamada GET
ve como
⮀ ~PYTHONPATH ⮀ ⭠ 43± ⮀ curl http://127.0.0.1:5000/login/
GET on login not supported
pero en POST
, no puedo acceder a los datos del formulario y obtener 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>
Sin embargo, en el servidor, mi información de depuración imprime lo siguiente
ImmutableMultiDict([("{''uuid'': ''admin'', ''password'': ''admin''}", u'''')])
donde print request.form
. No puedo entender dónde estoy haciendo mal
Aún necesita devolver una respuesta:
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
Aquí está la documentación para las páginas de error personalizadas de Flask .
Además, eche un vistazo a Flask-Bcrypt para el hashing de contraseñas.
Su línea de comando CURL no es válida. Los objetos JSON deben tener comillas dobles alrededor de las claves y valores:
$ curl -d ''{"uuid": "admin", "password": "admin"}'' http://127.0.0.1:5000/login/
Ahora puede acceder a las claves con request.json
.
No estás usando curl
correctamente. Pruebe de esta manera:
curl -d ''uuid=admin&password=admin''
El error 400 Bad Request
es el comportamiento habitual cuando intenta obtener claves inexistentes de request.form
.
Alternativamente, use request.json
lugar de request.form
y llame curl
como este:
curl -d ''{"uuid":"admin","password":"admin"}'' -H "Content-Type: application/json"