Flask'ta bir sorgu dizesini nasıl alırsınız?


408

Flask belgesinden sorgu dizesini nasıl alacağınız açık değil. Ben yeniyim, belgelere baktım, bulamadım!

Yani

@app.route('/')
@app.route('/data')
def data():
    query_string=??????
    return render_template("data.html")

11
Hızlı başlatma
Jarus

Ancak, 'sorgu dizesi' terimini kullanmaz. Sadece parametrelere çağırır. > URL'de gönderilen parametrelere erişmek için (? Anahtar = değer) args niteliğini kullanabilirsiniz:>> searchword = request.args.get ('anahtar', '')
Ion Freeman

Yanıtlar:


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

70
Bu örnek, sorgu dizesinde geçirilen "kullanıcı" parametresinin değerini, sorgu dizesinde değil, döndürür. "Sorgu dizesi", soru işaretinden sonra ve varsa pound işaretinden önceki her şey anlamına gelir.
Lyndsy Simon

45
hala yararlı bir cevap sorusu ile ilgili olduğunu düşünün. Çok geçerli ve +1
Necronet

8
Hayır - bir dikte ve .get ile olduğu gibi, sadece Hiçbiri alırsınız.
JPEG_

5
@LyndsySimon: İyi yakaladın. Ancak bu yanıt, Google arama terimlerimin ('flask get request parametresi') ile ilgili olduğu soruyu doğru bir şekilde yanıtladığından, yine de oy kullanıyorum. Ben de bilgiçim ama bunu web mistisizmine meydan okuyorum. 😉
Michael Scheper

5
Benden tartışma yok! Bu soru hakkındaki yorumlarım devam eden bir SO puanı ve genel karma kaynağı oldu. :) Mutlu kesmek!
Lyndsy Simon

237

Tam URL olarak request.urlve sorgu dizesi olarak kullanılabilir request.query_string.

İşte bir örnek:

from flask import request

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

    return request.query_string

Sorgu dizesinde iletilen bilinen bir parametreye erişmek için kullanabilirsiniz request.args.get('param'). Bildiğim kadarıyla bunu yapmanın "doğru" yolu.

ETA: Daha ileri gitmeden önce, kendinize neden sorgu dizesini istediğinizi sormalısınız. Ham dizeyi hiç çekmek zorunda kalmadım - Flask'ın soyutlanmış bir şekilde erişme mekanizmaları var. Zorlayıcı bir nedeniniz olmadıkça bunları kullanmalısınız.


11
Gerçek doğru cevap için +1. Dropbox gibi OAuth akışları, düzenli olarak yönlendirme URL'lerinin tokenleri geçirmesini ister. Sorgu dizesini kendiniz ayrıştırmak istediğiniz için çok mantıklı.
Richard Løvehjerte

Yanlış cevap için bir sanal -1 😉. Kelimenin tam anlamıyla doğru olmasına rağmen, OP'nin ne aradığını, kabul edilen cevabın yaptığı şeyi sağlamaz. DWIM FTW. Ancak bir SO puan mıknatıs olarak iyi oynadı.
Dave

15

Werkzeug / Flask zaten sizin için her şeyi ayrıştırdı. Aynı işi urlparse ile tekrar yapmaya gerek yok:

from flask import request

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

İstek ve yanıt nesneleriyle ilgili tüm belgeler Werkzeug'dadır: http://werkzeug.pocoo.org/docs/wrappers/


14

Bunu request.query_string kullanarak yapabiliriz.

Misal:

View.py'yi ele alalım

from my_script import get_url_params

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

Ayrıca Flask Blueprints kullanarak daha modüler hale getirebilirsiniz - http://flask.pocoo.org/docs/0.10/blueprints/

İlk adın / web_url /? First_name = john sorgusunun bir parçası olarak iletildiğini düşünelim.

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

Gördüğünüz gibi bu sadece küçük bir örnektir - birden fazla değer alabilir + bunları biçimlendirebilir ve kullanabilir veya şablon dosyasına aktarabilirsiniz.


11

Ben burada sorgu dizesinden değerleri almak için değil, sorgu dize arıyor geldi.

request.query_string URL parametrelerini ham bayt dizesi (Ref 1) olarak döndürür.

Kullanım örneği 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)

Çıktı:

Flask yolundaki sorgu parametreleri

Referanslar:

  1. Query_string ile ilgili resmi API belgeleri

1
Bu, OP'nin aradığı kesin çözümü verdiği için kabul edilen cevap olmalıdır.
constt

+600 ile biraz yanlış cevapla savaşmak zor.
Marvin

4

Sorgu dizesi için şu şekilde deneyin:

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)

Çıktı: resim açıklamasını buraya girin


request.args ['args1'] daha iyi request.args.get ('args1') olarak yazılmıştır
imbatman

1

O'Reilly Şişesi Web Geliştirme bölümünde açıklandığı gibi şişe istek nesnesinden alınabilen sorgu dizesinin her biçimi :

Gönderen O'Reilly Flask Web Geliştirme önceki Manan Gouhari belirttiği ve aynı öncelikle ithalat talebi gerekir:

from flask import request

requestFlask tarafından adlandırılan bir bağlam değişkeni olarak pozlanan bir nesnedir (tahmin ettiniz) request. Adından da anlaşılacağı gibi, istemcinin HTTP isteğine dahil ettiği tüm bilgileri içerir . Bu nesnenin sırasıyla alabileceğiniz ve çağırabileceğiniz birçok özelliği ve yöntemi vardır.

requestAralarından seçim yapabileceğiniz sorgu dizesini içeren oldukça az sayıda özelliğiniz var. Burada herhangi bir şekilde sorgu dizesini içeren her özniteliğin yanı sıra bu özniteliğin O'Reilly kitabından bir açıklama listeleyeceğim.

Birincisi args, "URL'nin sorgu dizesinde iletilen tüm bağımsız değişkenleri içeren bir sözlük "tür. Dolayısıyla, sorgu dizesinin bir sözlüğe ayrıştırılmasını istiyorsanız, şöyle bir şey yaparsınız:

from flask import request

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

(Diğerlerinin işaret ettiği gibi .get('<arg_name>'), sözlükten belirli bir değer elde etmek için de kullanabilirsiniz )

Sonra, orada formyok niteliği, değil sorgu dizesini içerebilir, ancak hangi başka bir özelliğin parçası dahildir yapar ben anlık listeler sorgu dizesi içerir. Birincisi, form"İstekle birlikte gönderilen tüm form alanlarını içeren bir sözlük." Bunu söylemek için söylüyorum: denilen şişe isteği nesnesinde kullanılabilir başka bir sözlük özelliği var values. values" formve içindeki değerleri birleştiren bir sözlüktür args." Bunu almak şöyle görünecektir:

from flask import request

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

(Yine, .get('<arg_name>')belirli bir öğeyi sözlükten çıkarmak için kullanın )

Başka bir seçenek de query_string"URL'nin sorgu ikili kısmı olarak ham ikili değer" dir. Buna bir örnek:

from flask import request

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

Sonra bir avantaj full_patholarak "URL'nin yol ve sorgu dizesi bölümleri" vardır. Ejemplo tarafından:

from flask import request

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

Ve son olarak url, "İstemci tarafından istenen tam URL" (sorgu dizesini içerir):

from flask import request

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

Mutlu kesmek :)


0

Bu kullanılarak yapılabilir request.args.get(). Sorgu dizesi bir alan vardır Örneğin date, bu kullanarak erişilebilir

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

requestŞişeden yapılan ithalat listesine " " eklemeyi unutmayın.

from flask import request

Cevabınız teknik olarak doğru olsa da, kullanımı öneren başka cevaplar da vardır (daha eski ve daha eksiksiz) request.args.get(); eski sorulara verilen yeni yanıtlar daha önce bahsedilmeyen bir şey içermelidir.
lfurini

0

Eğer istek alırsak ve bazı sorgu parametrelerini geçtikten sonra,

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.