2016-04-18 17 views
7

Tôi có trường hợp cho ứng dụng Flask sơ bộ trước khi tiếp tục đến ứng dụng chính của mình hay không.Phát hiện xem ứng dụng Flask có xử lý URL

Tôi đã thực hiện nó bằng cách sử dụng "trung gian" mẫu:

class MyMiddleware(object): 
    def __init__(self, main_app, pre_app): 
     self.main_app = main_app 
     self.pre_app = pre_app 

    def __call__(self, environ, start_response): 
     # check whether pre_app has a rule for this URL 
     with self.pre_app.request_context(environ) as ctx: 
      if ctx.request.url_rule is None: 
       return self.main_app(environ, start_response) 

     return self.pre_app(environ, start_response) 

Có cách nào thành ngữ hơn để làm điều này, mà không tạo ra một bối cảnh chỉ để kiểm tra xem các URL được xử lý bởi các ứng dụng? Tôi muốn duy trì tính linh hoạt của việc giữ hai ứng dụng.

Trả lời

3

Mỗi flask.Flaskapp có thuộc tính url_map - là werkzeug.routing.Map. Bạn thể chỉ cần chạy bind_to_environ và sử dụng the test method from MapAdapter:

if self.pre_app.url_map.bind_to_environ(environ).test(environ['PATH_INFO']): 
    return self.pre_app(environ, start_response) 

return self.main_app(environ, start_response) 

Tôi không biết rằng tôi muốn gọi nó là "thành ngữ hơn" nhưng nó là một cách khác để xử lý trường hợp sử dụng của bạn.

Các vấn đề liên quan