2017-11-24 3 views
0

Ich übe das Schreiben eines Rest API in Flask, und ich möchte einen Benutzernamen als Sitzungsvariable speichern, und es in jeder Route zugänglich haben. Ich möchte nur mit diesem Programm über die Befehlszeile über curl interagieren.Flask Routing Probleme

from flask import Flask, Response, session, request, url_for, redirect 
import json 

app = Flask(__name__) 
app.secret_key = 'blabla' 

@app.route('/') 
def index(): 
    print 'Inside index route' 
    if 'username' in session: 
    username = session['username'] 
    print 'Logged in as {}'.format(username) 
    return Response(response='Logged In\n', status=200, mimetype='text') 
    else: 
    print 'Not logged in' 
    return Response(response='Not Logged In\n', status=200, mimetype='text') 

@app.route('/login', methods=['GET', 'POST']) 
def login(): 
    print 'Inside login route' 
    if request.method == 'POST': 
    session['username'] = json.loads(request.data)['username'] 
    print session['username'] 
    return redirect(url_for('index')) 

@app.route('/logout') 
def logout(): 
    session.pop('username', None) 
    return redirect(url_for('index')) 

if __name__ == '__main__': 
    app.run(debug=True) 

Wenn ich die Website locken mit:

curl -X POST -H 'Content-Type: application/json' http://127.0.0.1:5000/login -d '{"username": "mdito"}' 

bekomme ich die Ausgabe:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>Redirecting...</title> 
<h1>Redirecting...</h1> 
<p>You should be redirected automatically to target URL: <a href="/">/</a>. If not click the link. 

Auf der Serverseite Ich bin Mit:

Inside login route 
mdito 

Wenn ich bin auf die Index-URL umleiten, warum "Inside Index Route" n ot erscheinen auf der Serverseite? Und warum wird "Angemeldet" nicht an den Benutzer zurückgegeben?

+2

'curl' wird standardmäßig nicht Weiterleitung folgen. Sie sollten 'curl-L' verwenden – Sraw

Antwort

0

Da Flasche 302 umleitet von /url zu /url/. Um zu vermeiden, Umleitungen / am Ende hinzufügen:

@app.route('/login/', methods=['GET', 'POST']) 

Docs (siehe Unique URLs/Redirection Behavior Teil). Das ist es.