플라스크 요청 URL의 다른 부분은 어떻게 얻습니까?


144

요청이 호스트 localhost:5000또는 foo.herokuapp.com호스트 에서 온 것인지와 어떤 경로가 요청되었는지 감지하고 싶습니다 . 플라스크 요청에 대한 정보를 얻으려면 어떻게해야합니까?

답변:


235

여러 Request필드를 통해 URL을 검사 할 수 있습니다 .

사용자는 다음 URL을 요청합니다.

    http://www.example.com/myapplication/page.html?x=y

이 경우 위에서 언급 한 속성의 값은 다음과 같습니다.

    path             /page.html
    script_root      /myapplication
    base_url         http://www.example.com/myapplication/page.html
    url              http://www.example.com/myapplication/page.html?x=y
    url_root         http://www.example.com/myapplication/

적절한 분할로 호스트 부분을 쉽게 추출 할 수 있습니다.


5
나는 노력 Request.root_url하고있어 반환 <werkzeug.utils.cached_property object>형식으로 대신 멋지게 얻을 수 http://www.example.com/myapplication/있습니다. 아니면이 기능이 localhost에서 작동하지 않습니까?
Vadim

4
@Vadim Request.root_url이 아니라 request.root_url을 사용해야합니다.
selfboot


3
request.url_root가 나를 위해 작동하는 반면 request.root_url 및 Request.root_url은 실패합니다. 따라서, root_url 대 캡 'R'과 url_root을 감시
zerocog

url_root 반환 http://www.example.com/하지 http://www.example.com/myapplication/ BASE_URL 반환http://www.example.com/myapplication/
모토

171

다른 예시:

의뢰:

curl -XGET http://127.0.0.1:5000/alert/dingding/test?x=y

그때:

request.method:              GET
request.url:                 http://127.0.0.1:5000/alert/dingding/test?x=y
request.base_url:            http://127.0.0.1:5000/alert/dingding/test
request.url_charset:         utf-8
request.url_root:            http://127.0.0.1:5000/
str(request.url_rule):       /alert/dingding/test
request.host_url:            http://127.0.0.1:5000/
request.host:                127.0.0.1:5000
request.script_root:
request.path:                /alert/dingding/test
request.full_path:           /alert/dingding/test?x=y

request.args:                ImmutableMultiDict([('x', 'y')])
request.args.get('x'):       y

4
더 자세한 내용이 포함되어 있기 때문에 허용되는 답변이어야합니다.
pfabri

1
이것은 좋은 대답입니다. 매우 유용하고 완벽합니다.
타오 스타 보우

10

당신은 시도해야합니다 :

request.url 

localhost에서도 항상 작동한다고 가정합니다 (방금 수행했습니다).


1

Python을 사용하는 경우 요청 객체를 탐색하여 제안합니다.

dir(request)

객체가 dict 메소드를 지원하기 때문에 :

request.__dict__

인쇄 또는 저장할 수 있습니다. Flask에 404 코드를 기록하는 데 사용합니다.

@app.errorhandler(404)
def not_found(e):
    with open("./404.csv", "a") as f:
        f.write(f'{datetime.datetime.now()},{request.__dict__}\n')
    return send_file('static/images/Darknet-404-Page-Concept.png', mimetype='image/png')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.