web-dev-qa-db-ja.com

Flaskを使用してURLから名前付きパラメータを取得する方法

ユーザーが自分のフラスコアプリで実行されているこのURLにアクセスすると、疑問符の後に指定されたパラメータをWebサービスで処理できるようになります。

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)
248
Alex Stone

request.args を使用して、クエリ文字列の内容を解析します。

from flask import request

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

URLパラメータは request.args で利用できます。これは MultiDict で、getメソッドを持ちます。デフォルト値(default)と型(type)のオプションパラメータは入力値を変換するcallableです。希望のフォーマットに。

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)

上記のコードの例:

/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: '*'
74
qqbenq

ビュー定義のURLに角括弧<>を使用することもでき、この入力はビュー関数の引数に入ります。

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

URLに単一の引数を渡す場合は、次のようにしてそれを実行できます。

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)

複数のパラメータがある場合

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

あなたがやろうとしていたのは、パラメータがフォームパラメータとして渡されURLに現れないというPOSTリクエストの場合にうまくいきます。実際にログインAPIを開発している場合は、GETではなくPOST requestを使用してデータをユーザーに公開することをお勧めします。

投稿リクエストの場合、以下のように動作します。

#url
http://10.1.1.1:5000/login

HTMLスニペット:

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

ルート:

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

uRL:

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

コード:

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

とても簡単です。このプロセスを2つの簡単なステップに分けてみましょう。

  1. HTMLテンプレートでは、ユーザー名とパスワードの名前タグを次のように宣言します。

    <form method="POST">
    <input type="text" name="user_name"></input>
    <input type="text" name="password"></input>
    </form>
    
  2. 次に、コードを次のように修正します。

    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