Nie jest oczywiste z dokumentacji kolby, jak uzyskać ciąg zapytania. Jestem nowy, spojrzał na dokumenty, nie mógł znaleźć!
Więc
@app.route('/')
@app.route('/data')
def data():
query_string=??????
return render_template("data.html")
Nie jest oczywiste z dokumentacji kolby, jak uzyskać ciąg zapytania. Jestem nowy, spojrzał na dokumenty, nie mógł znaleźć!
Więc
@app.route('/')
@app.route('/data')
def data():
query_string=??????
return render_template("data.html")
Odpowiedzi:
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')
Pełny adres URL jest dostępny jako request.url
, a ciąg zapytania jest dostępny jako request.query_string
.
Oto przykład:
from flask import request
@app.route('/adhoc_test/')
def adhoc_test():
return request.query_string
Aby uzyskać dostęp do pojedynczego znanego parametru przekazanego w ciągu zapytania, możesz użyć request.args.get('param')
. O ile mi wiadomo, jest to „właściwy” sposób na zrobienie tego.
ETA: Zanim przejdziesz dalej, powinieneś zadać sobie pytanie, dlaczego chcesz ciąg zapytania. Nigdy nie musiałem wciągać surowego sznurka - Flask ma mechanizmy dostępu do niego w abstrakcyjny sposób. Powinieneś ich używać, chyba że masz ważny powód, aby tego nie robić.
Werkzeug / Flask as już wszystko przeanalizował. Nie musisz ponownie wykonywać tej samej pracy z 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")
Pełna dokumentacja dla obiektów żądania i odpowiedzi znajduje się w Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/
Możemy to zrobić za pomocą request.query_string.
Przykład:
Rozważmy 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())
Możesz także uczynić go bardziej modułowym, korzystając z Flask Blueprints - http://flask.pocoo.org/docs/0.10/blueprints/
Rozważmy, że imię jest przekazywane jako część ciągu zapytania / 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
Jak widzisz, to tylko mały przykład - możesz pobrać wiele wartości, sformatować je i użyć lub przekazać do pliku szablonu.
Przybyłem tutaj, szukając ciągu zapytania, a nie jak uzyskać wartości z ciągu zapytania.
request.query_string
zwraca parametry URL jako nieprzetworzony ciąg bajtów (Ref 1).
Przykład użycia 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)
Wynik:
Bibliografia:
Spróbuj tak dla ciągu zapytania:
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)
Każda forma ciągu zapytania możliwa do odzyskania z obiektu żądania kolby, jak opisano w O'Reilly Flask Web Devleopment :
Z O'Reilly Flask Web Development i jak stwierdził wcześniej Manan Gouhari, najpierw musisz zaimportować żądanie:
from flask import request
request
jest obiektem ujawnionym przez Flask jako zmienna kontekstowa o nazwie (zgadłeś) request
. Jak sama nazwa wskazuje, zawiera wszystkie informacje, które klient zawarł w żądaniu HTTP. Ten obiekt ma wiele atrybutów i metod, które można odpowiednio pobrać i wywołać.
Masz sporo request
atrybutów, które zawierają ciąg zapytania do wyboru. Tutaj wymienię każdy atrybut, który w jakikolwiek sposób zawiera ciąg zapytania, a także opis z książki O'Reilly tego atrybutu.
Najpierw args
jest „słownik ze wszystkimi argumentami przekazanymi w ciągu zapytania adresu URL”. Więc jeśli chcesz, aby ciąg zapytania został przeanalizowany w słowniku, zrobiłbyś coś takiego:
from flask import request
@app.route('/'):
queryStringDict = request.args
(Jak zauważyli inni, możesz również użyć, .get('<arg_name>')
aby uzyskać określoną wartość ze słownika)
Następnie istnieje form
atrybut, który nie zawiera ciągu zapytania, ale który jest zawarty w części innego atrybutu, który zawiera ciąg zapytania, który wymienię na chwilę. Najpierw form
jest jednak „Słownik ze wszystkimi polami formularza przesłanymi wraz z żądaniem”. Mówię to tak: istnieje inny atrybut słownika dostępny w obiekcie żądania kolby o nazwie values
. values
to „Słownik, który łączy wartości w form
i args
”. Pobieranie, które wyglądałoby mniej więcej tak:
from flask import request
@app.route('/'):
formFieldsAndQueryStringDict = request.values
(Ponownie, użyj, .get('<arg_name>')
aby pobrać konkretny element ze słownika)
Inną opcją jest query_string
„Część ciągu zapytania w adresie URL jako nieprzetworzona wartość binarna”. Przykład tego:
from flask import request
@app.route('/'):
queryStringRaw = request.query_string
Następnie, jako dodatkowy bonus, istnieje full_path
„Ścieżka i części ciągu zapytania w adresie URL”. Por ejemplo:
from flask import request
@app.route('/'):
pathWithQueryString = request.full_path
I wreszcie: url
„Pełny adres URL żądany przez klienta” (który zawiera ciąg zapytania):
from flask import request
@app.route('/'):
pathWithQueryString = request.url
Miłego hakowania :)
Można to zrobić za pomocą request.args.get()
. Na przykład, jeśli ciąg zapytania ma pole date
, można uzyskać do niego dostęp za pomocą
date = request.args.get('date')
Nie zapomnij dodać „ request
” do listy importów z kolby, tj
from flask import request
request.args.get()
; nowe odpowiedzi na stare pytania powinny zawierać coś, o czym wcześniej nie wspomniano.
Jeśli żądanie GET i przekażemy niektóre parametry zapytania,
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)