Hoe kan ik de genoemde parameters van een URL halen met Flask?

Als de gebruiker toegang krijgt tot deze URL die in mijn flask-app wordt uitgevoerd, wil ik dat de webservice de parameters kan verwerken die achter het vraagteken staan:

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)

Antwoord 1, autoriteit 100%

Gebruik request.argsom de inhoud van de queryreeks te ontleden:

from flask import request
@app.route(...)
def login():
    username = request.args.get('username')
    password = request.args.get('password')

Antwoord 2, autoriteit 27%

De URL-parameters zijn beschikbaar in request.args, een ImmutableMultiDictmet een getmethode, met optionele parameters voor standaardwaarde (default) en type (type) – wat een aanroepbare is die de invoerwaarde converteert naar het gewenste formaat. (Zie de documentatie van de methodevoor meer details.)

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)

Voorbeelden met de hierboven 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: '*'

Antwoord 3, Autoriteit 20%

U kunt ook beugels en lt; & GT gebruiken; Op de URL van de weergave-definitie en deze ingang gaat u naar uw weergave Functie-argumenten

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

Antwoord 4, Autoriteit 7%

Als u een enkel argument hebt ingevoerd in de URL, kunt u het als volgt doen

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)

Als u meerdere parameters hebt:

#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)

Wat u probeerde te doen, werkt in het geval van postverzoeken waarbij parameters worden doorgegeven als formulierparameters en niet in de URL voorkomen. In het geval dat u een inlog-API daadwerkelijk ontwikkelt, is het raadzaam om u postverzoek te gebruiken in plaats van de gegevens aan de gebruiker te krijgen en bloot te leggen.

In geval van postverzoek, zou het als volgt werken:

#url
http://10.1.1.1:5000/login

HTML-snippet:

<form action="http://10.1.1.1:5000/login" method="POST">
  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)

Antwoord 5, Autoriteit 4%

URL:

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

Code:

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

(Bewerken: verwijderde ruimtes in de indelingsnoer)


Antwoord 6

Gebruik request.args.get(param), bijvoorbeeld:

http://10.1.1.1:5000/login?username=alex&password=pw1
@app.route('/login', methods=['GET', 'POST'])
def login():
    username = request.args.get('username')
    print(username)
    password = request.args.get('password')
    print(password)

Hier is de link naar de code.


Antwoord 7

Dit zou moeten werken

@app.route('/login$username=<username>$password=<password>', methods=['GET', 'POST'])
def login(username, password):
    # you can add stuff
    return f"Username: {username}\nPassword: {password}"

Antwoord 8

Het is heel eenvoudig. Laat me dit proces verdelen in twee eenvoudige stappen.

  1. Op de HTML-sjabloon, verklaart u de naam Attribuut voor gebruikersnaam en wachtwoord zoals deze:
<form method="POST">
<input type="text" name="user_name"></input>
<input type="text" name="password"></input>
</form>
  1. Wijzig vervolgens uw code als volgt:
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

Other episodes