Làm thế nào để bạn có được một chuỗi truy vấn trên Flask?


408

Không rõ ràng từ tài liệu bình về cách lấy chuỗi truy vấn. Tôi là người mới, nhìn vào các tài liệu, không thể tìm thấy!

Vì thế

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

11
Nó có trong tài liệu dưới quickstart: Vase.pocoo.org/docs/quickstart/#the-request-object
Jarus

Nhưng, nó không sử dụng thuật ngữ 'chuỗi truy vấn.' Nó chỉ gọi chúng là tham số. > Để truy cập các tham số được gửi trong URL (? Key = value), bạn có thể sử dụng thuộc tính args: >> searchword = request.args.get ('key', '')
Ion Freeman

Câu trả lời:


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
Ví dụ này trả về giá trị của tham số "người dùng" được truyền trong chuỗi truy vấn, chứ không phải chính chuỗi truy vấn. "Chuỗi truy vấn" có nghĩa là tất cả mọi thứ sau dấu chấm hỏi và trước dấu thăng, nếu có.
Lyndsy Simon

45
vẫn là một câu trả lời hữu ích xem xét rằng nó có liên quan đến câu hỏi. Rất hợp lệ và +1
Necronet

8
Không - như với một dict và .get, bạn sẽ không nhận được.
JPEG_

5
@LyndsySimon: Phát hiện tốt. Nhưng vì câu trả lời này trả lời đúng câu hỏi mà cụm từ tìm kiếm Google của tôi đã ám chỉ ('tham số yêu cầu') dù sao tôi cũng sẽ bỏ phiếu. Tôi cũng là một giáo viên, nhưng tôi đang cố gắng điều này lên chủ nghĩa thần bí web. 😉
Michael Scheper

5
Không có tranh luận từ tôi! Nhận xét của tôi về câu hỏi này là một nguồn điểm SO liên tục và nghiệp chung. :) Chúc mừng hack!
Lyndsy Simon

237

URL đầy đủ có sẵn dưới dạng request.urlvà chuỗi truy vấn có sẵn dưới dạngrequest.query_string .

Đây là một ví dụ:

from flask import request

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

    return request.query_string

Để truy cập một param được biết đến thông qua chuỗi truy vấn, bạn có thể sử dụng request.args.get('param') . Đây là cách "đúng" để làm điều đó, theo như tôi biết.

ETA: Trước khi bạn đi xa hơn, bạn nên tự hỏi tại sao bạn muốn chuỗi truy vấn. Tôi chưa bao giờ phải kéo theo chuỗi thô - Flask có các cơ chế để truy cập nó theo cách trừu tượng. Bạn nên sử dụng chúng trừ khi bạn không có lý do thuyết phục.


11
+1 cho câu trả lời đúng thực tế. Các luồng OAuth như Dropbox sẽ thường xuyên yêu cầu các URL chuyển hướng để chuyển mã thông báo đến. Thật ý nghĩa khi bạn muốn phân tích chuỗi truy vấn.
Richard Løvehjerte

Một -1 ảo cho câu trả lời sai. Mặc dù đúng theo nghĩa đen, nó không cung cấp những gì OP đang tìm kiếm, câu trả lời được chấp nhận. FTIM FTW. Tuy nhiên, chơi tốt như một nam châm điểm SO.
Dave

15

Werkzeug / Flask như đã phân tích mọi thứ cho bạn. Không cần phải thực hiện lại công việc tương tự với 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")

Tài liệu đầy đủ cho các đối tượng yêu cầu và phản hồi có trong Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/


14

Chúng tôi có thể làm điều này bằng cách sử dụng request.query_opes.

Thí dụ:

Hãy xem xét 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())

Bạn cũng làm cho nó trở nên mô đun hơn bằng cách sử dụng Flask Blueprints - http://flask.pocoo.org/docs/0.10/blueprints/

Hãy xem xét tên đầu tiên được thông qua như một phần của chuỗi truy vấn / 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

Như bạn thấy đây chỉ là một ví dụ nhỏ - bạn có thể tìm nạp nhiều giá trị + tạo thành các giá trị đó và sử dụng nó hoặc chuyển nó vào tệp mẫu.


11

Tôi đến đây để tìm chuỗi truy vấn, không phải làm thế nào để lấy giá trị từ chuỗi truy vấn.

request.query_string trả về các tham số URL dưới dạng chuỗi byte thô (Ref 1).

Ví dụ về việc sử dụng 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)

Đầu ra:

tham số truy vấn trong tuyến đường Flask

Người giới thiệu:

  1. Tài liệu API chính thức trên query_ chuỗi

1
Đây phải là câu trả lời được chấp nhận vì nó đưa ra giải pháp chính xác mà OP đang tìm kiếm.
cấu thành

Thật khó để chiến đấu với +600 với câu trả lời có phần không chính xác.
Marvin

4

Hãy thử như thế này cho chuỗi truy vấn:

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)

Đầu ra: nhập mô tả hình ảnh ở đây


request.args ['args1'] được viết tốt hơn là request.args.get ('args1')
imbatman

1

Mọi dạng của chuỗi truy vấn có thể truy xuất được từ đối tượng yêu cầu bình như được mô tả trong O'Reilly Flask Web Devleopment :

Từ Phát triển Web O'Reilly Flask và như Manan Gouhari đã nêu trước đó, trước tiên bạn cần nhập yêu cầu:

from flask import request

requestlà một đối tượng được Flask trưng ra dưới dạng một biến bối cảnh có tên (bạn đoán nó) request. Như tên của nó cho thấy, nó chứa tất cả thông tin mà máy khách đưa vào yêu cầu HTTP. Đối tượng này có nhiều thuộc tính và phương thức mà bạn có thể truy xuất và gọi tương ứng.

Bạn có khá nhiều request thuộc tính chứa chuỗi truy vấn để chọn. Ở đây tôi sẽ liệt kê mọi thuộc tính có chứa trong bất kỳ cách nào chuỗi truy vấn, cũng như mô tả từ sách O'Reilly của thuộc tính đó.

Đầu tiên, argsđó là "một từ điển với tất cả các đối số được truyền trong chuỗi truy vấn của URL." Vì vậy, nếu bạn muốn chuỗi truy vấn được phân tích cú pháp vào từ điển, bạn sẽ làm một cái gì đó như thế này:

from flask import request

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

(Như những người khác đã chỉ ra, bạn cũng có thể sử dụng .get('<arg_name>')để có được một giá trị cụ thể từ từ điển)

Sau đó, có các formthuộc tính, mà không chứa các chuỗi truy vấn, nhưng được bao gồm trong một phần của một thuộc tính mà không bao gồm các chuỗi truy vấn mà tôi sẽ liệt kê trong giây lát. Tuy nhiên, trước tiên, formlà "Một từ điển với tất cả các trường mẫu được gửi cùng với yêu cầu." Tôi nói điều đó để nói điều này: có một thuộc tính từ điển khác có sẵn trong đối tượng yêu cầu bình được gọi values. valueslà "Một từ điển kết hợp các giá trị trong formargs." Lấy ra sẽ trông giống như thế này:

from flask import request

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

(Một lần nữa, sử dụng .get('<arg_name>')để lấy một mục cụ thể ra khỏi từ điển)

Một tùy chọn khác query_stringlà "Phần chuỗi truy vấn của URL, dưới dạng giá trị nhị phân thô". Ví dụ về điều đó:

from flask import request

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

Sau đó, như một phần thưởng bổ sung full_path, đó là "Phần đường dẫn và chuỗi truy vấn của URL." Por ejemplo:

from flask import request

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

Và cuối cùng, url"URL hoàn chỉnh do khách hàng yêu cầu" (bao gồm chuỗi truy vấn):

from flask import request

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

Chúc mừng hack :)


0

Điều này có thể được thực hiện bằng cách sử dụng request.args.get(). Ví dụ: nếu chuỗi truy vấn của bạn có một trường date, nó có thể được truy cập bằng cách sử dụng

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

Đừng quên thêm " request" vào danh sách nhập khẩu từ bình, nghĩa là

from flask import request

Mặc dù câu trả lời của bạn là đúng về mặt kỹ thuật, đã có những câu trả lời khác (cũ hơn và đầy đủ hơn) gợi ý sử dụng request.args.get(); câu trả lời mới cho câu hỏi cũ nên chứa một cái gì đó không được đề cập trước đó.
lfurini

0

Nếu yêu cầu nếu GET và chúng tôi đã chuyển một số tham số truy vấn thì,

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.