Me gustaría crear un decorador para Flask rutas para marcar ciertas rutas como público, por lo que puedo hacer cosas como esta:Crear un decorador Frasco URL pública
@public
@app.route('/welcome')
def welcome():
return render_template('/welcome.html')
En otros lugares, aquí es lo que estaba pensando lo decorador y verificación se vería así:
_public_urls = set()
def public(route_function):
# add route_function's url to _public_urls
# _public_urls.add(route_function ...?.url_rule)
def decorator(f):
return f
def requested_url_is_public():
from flask import request
return request.url_rule in _public_urls
Luego, cuando se realiza una solicitud, que tienen una función que comprueba contexto requested_url_is_public
.
Estoy un poco perplejo porque no sé cómo obtener la regla url para una función dada en el decorador public
.
Quizás esta no sea la mejor opción de diseño para Flask, pero espero que exista otra manera sencilla de lograrlo &.
He visto estos patrones como este antes, y me gustaría imitarlo. Por ejemplo, esto es una contraparte del decorador login_required
de Django.
Me gustaría leer pensamientos sobre esto.
magia! Saludos por esto. –
Vaya, me acabo de dar cuenta de que, tan cerca como sea de lo que quiero, no estoy muy seguro de que sea la respuesta que necesito. Tengo alrededor de 4 URL públicas y más de 100 privadas. No quiero contaminar el código w/'@ login_required', así que me gustaría tener un ejemplo' before_request' que niegue todas las solicitudes públicas a menos que exista un '@ public' en la vista. Espero que puedan ver por qué esta no es exactamente la respuesta, pero lo que han publicado definitivamente es una gran ventaja. Si se me ocurre la respuesta, marcaré esto como correcto y publicaré lo que hice. Aclamaciones. –