Làm cách nào để có được các phần khác nhau của url yêu cầu Flask?


143

Tôi muốn phát hiện nếu yêu cầu đến từ localhost:5000hoặc foo.herokuapp.commáy chủ lưu trữ và đường dẫn nào được yêu cầu. Làm cách nào để biết thông tin này về yêu cầu Flask?

Câu trả lời:


235

Bạn có thể kiểm tra url thông qua một số Requesttrường :

Một người dùng yêu cầu URL sau:

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

Trong trường hợp này, các giá trị của các thuộc tính được đề cập ở trên sẽ là như sau:

    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/

Bạn có thể dễ dàng trích xuất phần máy chủ với các phần tách thích hợp.


5
Tôi đang cố gắng để có được Request.root_urlvà khi trở về, tôi chỉ nhận được <werkzeug.utils.cached_property object>thay vì định dạng độc đáo http://www.example.com/myapplication/. Hoặc tính năng này không hoạt động trên localhost?
— Vadim

4
@Vadim Bạn nên sử dụng request.root_url, không phải Request.root_url.
— selfboot

1
Mới sử dụng Flask, tôi không biết đối tượng yêu cầu đến từ đâu và hoạt động như thế nào, đây là: Vase.pocoo.org/docs/0.12/reqcontext
— Ulysse BN

3
request.url_root hoạt động với tôi, trong khi request.root_url và Request.root_url không thành công. Do đó, hãy xem nắp 'R' và url_root so với root_url
— zerocog

url_root trả về http://www.example.com/không phải là http://www.example.com/myapplication/ return_url trả vềhttp://www.example.com/myapplication/
— moto

170

một vi dụ khac:

yêu cầu:

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

sau đó:

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
Đây phải là câu trả lời được chấp nhận, vì nó có nhiều chi tiết hơn cho nó.
— pfabri

1
Đây là một câu trả lời tuyệt vời. Rất hữu ích và đầy đủ.
— Tao Starbow

10

bạn nên thử:

request.url 

Nó giả sử hoạt động luôn, ngay cả trên localhost (vừa mới làm).


1

Nếu bạn đang sử dụng Python, tôi sẽ đề xuất bằng cách khám phá đối tượng yêu cầu:

dir(request)

Vì đối tượng hỗ trợ phương thức dict :

request.__dict__

Nó có thể được in hoặc lưu. Tôi sử dụng nó để đăng nhập mã 404 trong Flask:

@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')
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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.