example python flask flask-extensions flask-login

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"