Я хотел бы выполнить некоторый код перед каждым запросом для некоторого URL. Итак, как лучше всего проверить путь из запроса? Он отлично работает в разработке, но когда он развернут на производстве, я получаю request.url_rule = None
для http://host:port/swagger
, поэтому моя третья часть elif str(request.url_rule) == '/swagger'
не выполняется. Если я изменится на request.path
, то это работает. Не знаете, какой из них лучше использовать, можете ли вы подсказать, в чем здесь разница?
from flask import Flask, request, jsonify, make_response
from flask_restful import Api
from flask_swagger_ui import get_swaggerui_blueprint
app = Flask(__name__, static_folder='swagger')
if app.config["ENV"] == "production":
app.config.from_object("config.ProductionConfig")
else:
app.config.from_object("config.DevelopmentConfig")
# swagger specific
swagger_url = '/swagger'
static_url = '/static/api.yaml'
SWAGGERUI_BLUEPRINT = get_swaggerui_blueprint(
swagger_url,
static_url,
config={
'app_name': "Test"
}
)
app.register_blueprint(SWAGGERUI_BLUEPRINT, url_prefix=swagger_url)
# end swagger specific
db = SQLAlchemy(app)
jwt = JWTManager(app)
api = Api(app, prefix='/api')
# middleware
@app.before_request
def before_request_callback():
"""
This is callback will run before each and every endpoint .
:return:
"""
# Checking jwt-authentication for every request except login
if str(request.url_rule) == '/api/v1/login':
# do execute some code
elif str(request.url_rule) != '/api/v1/user/create' and \
# do execute some code
elif str(request.url_rule) == '/swagger':
# problem is here