Flask에서 쿼리 문자열을 어떻게 얻습니까?


408

쿼리 문자열을 얻는 방법에 대한 플라스크 문서에서 명확하지 않습니다. 나는 새로운, 문서를보고 찾을 수 없습니다!

그래서

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

11
빠른 시작의 문서에 있습니다 : flask.pocoo.org/docs/quickstart/#the-request-object
Jarus

그러나 '쿼리 문자열'이라는 용어는 사용하지 않습니다. 그냥 매개 변수라고 부릅니다. > URL (? key = value)에 제출 된 매개 변수에 액세스하려면 args 속성을 사용할 수 있습니다.>> searchword = request.args.get ( 'key', '')
Ion Freeman

답변:


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
이 예는 쿼리 문자열 자체가 아니라 쿼리 문자열에 전달 된 "user"매개 변수의 값을 반환합니다. "쿼리 문자열"은 물음표와 파운드 기호 (있는 경우) 앞에있는 모든 것을 의미합니다.
Lyndsy Simon

45
여전히 유용한 답변입니다. 질문과 관련이 있다고 생각하십시오. 유효하고 +1
Necronet

8
아니요-dict 및 .get과 마찬가지로 None을 얻습니다.
JPEG_

5
@LyndsySimon : 잘 발견되었습니다. 그러나이 답변은 질문에 올바르게 대답하기 때문에 Google 검색어 ( 'flask get request parameter')로 암시되어 있습니다. 나는 또한 pedant이지만, 나는 이것을 웹 신비주의에 초크하고있다. 😉
Michael Scheper

5
나로부터 논쟁이 없다! 이 질문에 대한 나의 의견은 SO 포인트와 전반적인 업의 지속적인 원천이었습니다. :) 행복한 해킹!
Lyndsy Simon

237

전체 URL은으로 사용 가능 request.url하고 쿼리 문자열은으로 사용 가능합니다 request.query_string.

예를 들면 다음과 같습니다.

from flask import request

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

    return request.query_string

쿼리 문자열에 전달 된 개별 알려진 매개 변수에 액세스하려면을 사용할 수 있습니다 request.args.get('param'). 이것은 내가 아는 한 "올바른"방법입니다.

ETA : 계속 진행하기 전에 왜 쿼리 문자열을 원하는지 스스로에게 물어봐야합니다. 나는 원시 문자열을 끌어 들일 필요가 없었습니다.-Flask에는 추상적 인 방식으로 액세스 할 수있는 메커니즘이 있습니다. 설득력없는 이유가없는 한 사용하십시오.


11
실제 정답은 +1입니다. Dropbox와 같은 OAuth 흐름은 정기적으로 토큰을 전달할 리디렉션 URL을 요청합니다. 쿼리 문자열을 직접 파싱하려는 것이 완벽합니다.
Richard Løvehjerte

오답에 대한 가상 -1 😉. 말 그대로 정확하지만 OP가 찾고있는 것을 제공하지는 않지만 받아 들인 대답은 아닙니다. DWIM FTW. 그러나 SO 포인트 자석으로 잘 작동합니다.
Dave

15

Werkzeug / Flask는 이미 모든 것을 파싱했습니다. 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")

요청 및 응답 오브젝트에 대한 전체 문서는 Werkzeug에 있습니다. http://werkzeug.pocoo.org/docs/wrappers/


14

request.query_string을 사용하여이를 수행 할 수 있습니다.

예:

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

또한 Flask Blueprints- http: //flask.pocoo.org/docs/0.10/blueprints/를 사용하여 더 모듈화 할 수 있습니다.

쿼리 문자열 / 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

보시다시피 이것은 작은 예일뿐입니다. 여러 값을 가져 와서 형식을 지정하여 사용하거나 템플릿 파일로 전달할 수 있습니다.


11

쿼리 문자열에서 값을 얻는 방법이 아니라 쿼리 문자열을 찾으러 왔습니다.

request.query_string URL 매개 변수를 원시 바이트 문자열 (Ref 1)로 리턴합니다.

사용 예 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)

산출:

플라스크 경로의 쿼리 매개 변수

참고 문헌 :

  1. query_string에 대한 공식 API 문서

1
OP가 찾고 있던 정확한 솔루션을 제공하기 때문에 이것이 정답입니다.
constt

다소 부정확 한 답변으로 +600으로 싸우기가 어렵습니다.
마빈

4

쿼리 문자열에 대해 다음과 같이 시도하십시오.

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)

산출: 여기에 이미지 설명을 입력하십시오


[ 'args1'] request.args 더 request.args.get ( 'args1')로 기입된다
imbatman

1

O'Reilly Flask Web Devleopment에 설명 된대로 플라스크 요청 객체에서 검색 가능한 모든 형식의 쿼리 문자열 :

에서 오라일리 플라스크 웹 개발 이전 만안 Gouhari에 의해 진술하고, 먼저 가져 오기 요청해야합니다

from flask import request

requestFlask에 의해 명명 된 컨텍스트 변수 (추측 치)로 노출 된 객체 request입니다. 이름에서 알 수 있듯이 클라이언트가 HTTP 요청에 포함시킨 모든 정보를 포함합니다. 이 객체에는 각각 검색하고 호출 할 수있는 많은 속성과 메서드가 있습니다.

request선택할 쿼리 문자열을 포함하는 속성 이 꽤 있습니다. 여기에서는 쿼리 문자열을 포함하는 모든 속성과 해당 속성의 O'Reilly 책의 설명을 나열합니다.

먼저 args"URL의 쿼리 문자열에 모든 인수가 전달 된 사전"이 있습니다. 따라서 쿼리 문자열을 사전으로 구문 분석하려면 다음과 같이하십시오.

from flask import request

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

(다른 사람들이 지적했듯이 .get('<arg_name>')사전에서 특정 값을 얻는 데 사용할 수도 있습니다 )

그런 다음 쿼리 문자열을 포함 form하지 않지만 잠시 나열 할 쿼리 문자열을 포함하는 다른 속성의 일부에 포함되는 속성 있습니다. 그러나 먼저 form"요청과 함께 제출 된 모든 양식 필드가있는 사전"입니다. 플라스크 요청 객체에서 사용할 수있는 또 다른 사전 속성이 있습니다 values. values" form및 의 값을 결합하는 사전입니다 args." 이를 검색하면 다음과 같이 보일 것입니다.

from flask import request

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

(다시, .get('<arg_name>')사전에서 특정 항목을 가져 오기 위해 사용 하십시오)

또 다른 옵션은 query_string"원시 이진 값으로 URL의 쿼리 문자열 부분"입니다. 그 예 :

from flask import request

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

그런 다음 추가 보너스 full_path로 "URL의 경로 및 쿼리 문자열 부분"이 있습니다. ejemplo에게 :

from flask import request

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

마지막으로 url"클라이언트가 요청한 전체 URL"(쿼리 문자열 포함) :

from flask import request

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

행복한 해킹 :)


0

이것은을 사용하여 수행 할 수 있습니다 request.args.get(). 예를 들어 쿼리 문자열에 필드가 있으면 다음을 date사용하여 액세스 할 수 있습니다.

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

request플라스크의 수입품 목록에 " " 를 추가하는 것을 잊지 마십시오.

from flask import request

귀하의 답변은 기술적으로 정확하지만 이미 사용하도록 제안하는 다른 답변 (이전 및 더 완전한 답변)이 있습니다 request.args.get(). 이전 질문에 대한 새로운 답변에는 이전에 언급되지 않은 내용이 포함되어야합니다.
lfurini 2019 년

0

요청이 GET이고 일부 쿼리 매개 변수를 전달한 경우,

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.