webentwicklung-frage-antwort-db.com.de

Wie kann ich die benannten Parameter mithilfe von Flask von einer URL abrufen?

Wenn der Benutzer auf diese URL zugreift, die in meiner flask App ausgeführt wird, soll der Webdienst die nach dem Fragezeichen angegebenen Parameter verarbeiten können:

http://10.1.1.1:5000/login?username=alex&password=pw1

#I just want to be able to manipulate the parameters
@app.route('/login', methods=['GET', 'POST'])
def login():
    username = request.form['username']
    print(username)
    password = request.form['password']
    print(password)
273
Alex Stone

Verwenden Sie request.args , um den Inhalt der Abfragezeichenfolge zu analysieren:

_from flask import request

@app.route(...)
def login():
    username = request.args.get('username')
    password = request.args.get('password')
_
460
falsetru

Die URL-Parameter sind in request.args verfügbar. Hierbei handelt es sich um MultiDict mit einer get-Methode mit optionalen Parametern für den Standardwert (default) und den Typ (type). - Dies ist eine aufrufbare Funktion, die den Eingabewert in das gewünschte Format konvertiert.

_from flask import request

@app.route('/my-route')
def my_route():
  page = request.args.get('page', default = 1, type = int)
  filter = request.args.get('filter', default = '*', type = str)
_

Beispiele mit dem obigen Code:

_/my-route?page=34               -> page: 34  filter: '*'
/my-route                       -> page:  1  filter: '*'
/my-route?page=10&filter=test   -> page: 10  filter: 'test'
/my-route?page=10&filter=10     -> page: 10  filter: '10'
/my-route?page=*&filter=*       -> page:  1  filter: '*'
_
90
qqbenq

Sie können auch eckige Klammern <> in der URL der Ansichtsdefinition verwenden. Diese Eingabe wird in die Argumente Ihrer Ansichtsfunktion übernommen

@app.route('/<name>')
def my_view_func(name):
    return name
43
Inbar Cheffer

Wenn Sie ein einzelnes Argument in der URL übergeben haben, können Sie dies wie folgt tun

from flask import request
#url
http://10.1.1.1:5000/login/alex

from flask import request
@app.route('/login/<username>', methods=['GET'])
def login(username):
    print(username)

Falls Sie mehrere Parameter haben:

#url
http://10.1.1.1:5000/login?username=alex&password=pw1

from flask import request
@app.route('/login', methods=['GET'])
    def login():
        username = request.args.get('username')
        print(username)
        password= request.args.get('password')
        print(password)

Was Sie versucht haben, funktioniert bei POST Anfragen, bei denen Parameter als Formularparameter übergeben werden und nicht in der URL erscheinen. Wenn Sie tatsächlich eine Login-API entwickeln, ist es ratsam, POST request anstelle von GET zu verwenden und die Daten dem Benutzer zur Verfügung zu stellen.

Im Falle einer Post-Anfrage würde das folgendermaßen funktionieren:

#url
http://10.1.1.1:5000/login

HTML-Snippet:

<form action="http://10.1.1.1:5000/login">
  Username : <input type="text" name="username"><br>
  Password : <input type="password" name="password"><br>
  <input type="submit" value="submit">
</form>

Route:

from flask import request
@app.route('/login', methods=['POST'])
    def login():
        username = request.form.get('username')
        print(username)
        password= request.form.get('password')
        print(password)
23

uRL:

http://0.0.0.0:5000/user/name/

code:

@app.route('/user/< string:name >/', methods=['GET', 'POST'])
def user_view(name):
    print(name)
4
Manish Sharma

Es ist ganz einfach. Lassen Sie mich diesen Vorgang in zwei einfache Schritte unterteilen.

  1. In der HTML-Vorlage deklarieren Sie das Namensschild für Benutzername und Passwort als

    <form method="POST">
    <input type="text" name="user_name"></input>
    <input type="text" name="password"></input>
    </form>
    
  2. Ändern Sie dann Ihren Code wie folgt:

    from flask import request
    
    @app.route('/my-route', methods=['POST']) #you should always parse username and 
    # password in a POST method not GET
    def my_route():
      username = request.form.get("user_name")
      print(username)
      password = request.form.get("password")
      print(password)
    #now manipulate the username and password variables as you wish
    #Tip: define another method instead of methods=['GET','POST'], if you want to  
    # render the same template with a GET request too
    
0
Mr.bunty