Chciałbym stworzyć dekorator dla Flask trasach do flagi niektórych trasach jako publiczne, więc mogę robić rzeczy tak:Tworzenie dekorator Kolba url publicznego
@public
@app.route('/welcome')
def welcome():
return render_template('/welcome.html')
indziej, oto co mi myślenia dekorator i check wyglądałby następująco:
_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
wtedy, gdy wniosek został złożony, mam funkcję kontekstowe, które sprawdza requested_url_is_public
.
Jestem nieco zakłopotany, ponieważ nie wiem, jak uzyskać regułę url dla danej funkcji w dekoratorze public
.
Być może nie jest to najlepszy wybór dla Flask, ale spodziewam się, że jest inny elegancki sposób, aby to osiągnąć.
Widziałem już takie wzory w przeszłości i chciałbym je naśladować. Na przykład jest to odpowiednik dekoratora Django login_required
.
Chciałbym czytać myśli na ten temat.
Magic! Pozdrawiam za to. –
Ups - Właśnie zdałem sobie sprawę, że tak blisko, jak to jest to, czego chcę, nie jestem całkiem pewien, że jest to odpowiedź, której potrzebuję. Mam około 4 publicznych adresów URL i ponad 100 prywatnych. Nie chcę zanieczyszczać kodu w/'login_required', więc chciałbym mieć np.' Before_request', który zaprzecza wszystkim publicznym żądaniom, chyba że w widoku jest '@ public'. Mam nadzieję, że widzisz, dlaczego to nie jest odpowiednia odpowiedź, ale to, co napisałeś, to z pewnością świetny trop. Jeśli wymyślę odpowiedź, zaznaczę to poprawnie i opowiem, co zrobiłem. Twoje zdrowie. –