Bagaimana Anda mendapatkan string kueri di Flask?

409

Tidak jelas dari dokumentasi labu tentang cara mendapatkan string kueri. Saya baru, melihat dokumen, tidak dapat menemukan!

Begitu

@app.route('/')
@app.route('/data')
def data():
    query_string=??????
    return render_template("data.html")
Tampa
sumber
11
Ada dalam dokumentasi di bawah quickstart: flask.pocoo.org/docs/quickstart/#the-request-object
Jarus
Tapi, itu tidak menggunakan istilah 'string kueri.' Itu hanya memanggil mereka parameter. > Untuk mengakses parameter yang dikirimkan dalam URL (? Key = value) Anda dapat menggunakan atribut args:>> searchword = request.args.get ('key', '')
Ion Freeman

Jawaban:

779
from flask import request

@app.route('/data')
def data():
    # here we want to get the value of user (i.e. ?user=some-value)
    user = request.args.get('user')
Kracekumar
sumber
70
Contoh ini mengembalikan nilai parameter "pengguna" yang diteruskan dalam string kueri, bukan string kueri itu sendiri. "Tali kueri" berarti segalanya setelah tanda tanya dan sebelum tanda pon, jika ada.
Lyndsy Simon
45
masih merupakan jawaban yang berguna mengingat itu terkait dengan pertanyaan. Sangat valid dan +1
Necronet
8
Tidak - seperti dengan dict dan .get, Anda hanya akan mendapatkan Tidak ada.
JPEG_
5
@ LyndsySimon: Terlihat dengan baik. Tetapi karena jawaban ini menjawab dengan benar pertanyaan yang istilah pencarian Google saya singgung ('flask get parameter permintaan'), bagaimanapun saya memilihnya. Saya seorang pedant juga, tapi saya menghubungkannya dengan mistisisme web. 😉
Michael Scheper
5
Tidak ada argumen dari saya! Komentar saya tentang pertanyaan ini telah menjadi sumber poin SO dan karma keseluruhan yang berkelanjutan. :) Selamat retas!
Lyndsy Simon
237

URL lengkap tersedia sebagai request.url, dan string kueri tersedia sebagai request.query_string.

Ini sebuah contoh:

from flask import request

@app.route('/adhoc_test/')
def adhoc_test():

    return request.query_string

Untuk mengakses param yang dikenal secara individual yang dilewatkan dalam string kueri, Anda dapat menggunakan request.args.get('param'). Ini adalah cara yang "benar" untuk melakukannya, sejauh yang saya tahu.

ETA: Sebelum melangkah lebih jauh, Anda harus bertanya pada diri sendiri mengapa Anda menginginkan string kueri. Saya tidak pernah harus menarik string mentah - Flask memiliki mekanisme untuk mengaksesnya secara abstrak. Anda harus menggunakannya kecuali Anda memiliki alasan kuat untuk tidak melakukannya.

Lyndsy Simon
sumber
11
+1 untuk jawaban benar yang sebenarnya. Aliran OAuth seperti Dropbox akan secara teratur meminta URL pengalihan untuk meneruskan token. Sangat masuk akal bahwa Anda ingin mengurai string kueri sendiri.
Richard Løvehjerte
A -1 virtual untuk jawaban yang salah 😉. Meskipun secara harfiah benar, itu tidak memberikan apa yang dicari OP, yang jawaban yang diterima tidak. DWIM FTW. Dimainkan dengan baik sebagai magnet poin SO.
Dave
15

Werkzeug / Labu karena sudah diuraikan segalanya untuk Anda. Tidak perlu melakukan pekerjaan yang sama lagi dengan urlparse:

from flask import request

@app.route('/')
@app.route('/data')
def data():
    query_string = request.query_string  ## There is it
    return render_template("data.html")

Dokumentasi lengkap untuk objek permintaan dan respons ada di Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/

Simon Sapin
sumber
14

Kita dapat melakukan ini dengan menggunakan request.query_string.

Contoh:

Mari kita pertimbangkan view.py

from my_script import get_url_params

@app.route('/web_url/', methods=('get', 'post'))
def get_url_params_index():
    return Response(get_url_params())

Anda juga membuatnya lebih modular dengan menggunakan Flask Blueprints - http://flask.pocoo.org/docs/0.10/blueprints/

Mari kita pertimbangkan nama depan diteruskan sebagai bagian dari string kueri / web_url /? First_name = john

## here is my_script.py

## import required flask packages
from flask import request
def get_url_params():
    ## you might further need to format the URL params through escape.    
    firstName = request.args.get('first_name') 
    return firstName

Seperti yang Anda lihat, ini hanyalah contoh kecil - Anda dapat mengambil beberapa nilai + memformatnya dan menggunakannya atau meneruskannya ke file templat.

Pralhad Narsinh Sonar
sumber
11

Saya datang ke sini mencari string kueri, bukan cara mendapatkan nilai dari string kueri.

request.query_string mengembalikan parameter URL sebagai string byte mentah (Ref 1).

Contoh menggunakan request.query_string:

from flask import Flask, request

app = Flask(__name__)

@app.route('/data', methods=['GET'])
def get_query_string():
    return request.query_string

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

Keluaran:

parameter kueri dalam rute Flask

Referensi:

  1. Dokumentasi API resmi tentang query_string
Pita Michael
sumber
1
Ini harus menjadi jawaban yang diterima karena memberikan solusi tepat yang dicari OP.
constt
Sulit untuk bertarung dengan +600 pada jawaban yang agak tidak akurat.
Marvin
4

Coba seperti ini untuk string kueri:

from flask import Flask, request

app = Flask(__name__)

@app.route('/parameters', methods=['GET'])
def query_strings():

    args1 = request.args['args1']
    args2 = request.args['args2']
    args3 = request.args['args3']

    return '''<h1>The Query String are...{}:{}:{}</h1>''' .format(args1,args2,args3)


if __name__ == '__main__':

    app.run(debug=True)

Keluaran: masukkan deskripsi gambar di sini

Sankar guru
sumber
request.args ['args1'] lebih baik ditulis sebagai request.args.get ('args1')
imbatman
1

Setiap bentuk string kueri yang diambil dari objek permintaan labu seperti yang dijelaskan dalam O'Reilly Flask Web Devleopment :

Dari O'Reilly Flask Web Development , dan seperti yang dinyatakan oleh Manan Gouhari sebelumnya, pertama-tama Anda harus mengimpor permintaan:

from flask import request

requestadalah objek yang diekspos oleh Flask sebagai variabel konteks bernama (Anda dapat menebaknya) request. Seperti namanya, ini berisi semua informasi yang dimasukkan klien dalam permintaan HTTP. Objek ini memiliki banyak atribut dan metode yang masing-masing dapat Anda ambil dan panggil.

Anda memiliki beberapa requestatribut yang berisi string kueri untuk dipilih. Di sini saya akan membuat daftar setiap atribut yang berisi string kueri apa pun, serta deskripsi dari buku O'Reilly atribut itu.

Pertama ada argsyang merupakan "kamus dengan semua argumen yang diteruskan dalam string kueri URL." Jadi jika Anda ingin string kueri diuraikan ke dalam kamus, Anda akan melakukan sesuatu seperti ini:

from flask import request

@app.route('/'):
    queryStringDict = request.args

(Seperti yang ditunjukkan orang lain, Anda juga dapat menggunakan .get('<arg_name>')untuk mendapatkan nilai tertentu dari kamus)

Kemudian, ada formatribut, yang tidak tidak mengandung string, tetapi yang termasuk dalam bagian dari atribut lain yang tidak termasuk string yang saya akan daftar sejenak. Namun, yang pertama formadalah "Kamus dengan semua bidang formulir yang dikirimkan bersama permintaan." Saya mengatakan itu untuk mengatakan ini: ada atribut kamus lain yang tersedia di objek permintaan termos disebut values. valuesadalah "Kamus yang menggabungkan nilai dalam formdan args." Mengambil yang akan terlihat seperti ini:

from flask import request

@app.route('/'):
    formFieldsAndQueryStringDict = request.values

(Sekali lagi, gunakan .get('<arg_name>')untuk mengeluarkan item tertentu dari kamus)

Opsi lain query_stringadalah "Bagian string kueri URL, sebagai nilai biner mentah." Contohnya:

from flask import request

@app.route('/'):
    queryStringRaw = request.query_string

Kemudian sebagai bonus tambahan ada full_pathyang "Bagian dan string string bagian dari URL." Por ejemplo:

from flask import request

@app.route('/'):
    pathWithQueryString = request.full_path

Dan akhirnya,, url"URL lengkap yang diminta oleh klien" (yang termasuk string kueri):

from flask import request

@app.route('/'):
    pathWithQueryString = request.url

Selamat melakukan peretasan :)

23r0c001
sumber
0

Ini bisa dilakukan menggunakan request.args.get(). Misalnya jika string kueri Anda memiliki bidang date, itu dapat diakses menggunakan

date = request.args.get('date')

Jangan lupa menambahkan " request" ke daftar impor dari labu, mis

from flask import request
Manan Gouhari
sumber
Meskipun jawaban Anda secara teknis benar, sudah ada jawaban lain (lebih tua dan lebih lengkap) yang menyarankan untuk digunakan request.args.get(); jawaban baru untuk pertanyaan lama harus berisi sesuatu yang tidak disebutkan sebelumnya.
lfurini
0

Jika ada permintaan jika GET dan kami melewati beberapa parameter kueri,

fro`enter code here`m flask import request
@app.route('/')
@app.route('/data')
def data():
   if request.method == 'GET':
      # Get the parameters by key
      arg1 = request.args.get('arg1')
      arg2 = request.args.get('arg2')
      # Generate the query string
      query_string="?arg1={0}&arg2={1}".format(arg1, arg2)
      return render_template("data.html", query_string=query_string)
RAJAHMAD MULANI
sumber