Píšem veľmi jednoduchú bankovú aplikáciu (URLskrátenie), ktoré by mali byť schopné presmerovať určité požiadavky na iné ľubovoľné domény. Mám však problémy s presmerovaním. Táto stiahnutá verzia, napríklad, nefunguje:
from app import app, db
from flask import abort, redirect
@app.route("/")
def index():
return "Hello, world"
@app.route("/favicon.ico")
def favicon():
abort(404)
@app.route("/<slug>")
def redirect(slug):
return redirect("http://google.com/")
Možno naivne som očakával, že toto presmerovanie na google.com, ale namiesto toho presmerovanie sa zdá, že "zachytil" od banky, a snaží sa smerovať presmerované URL späť cez presmerovač (napr. redirect(slug="http://google.com/")
), kým neprežije celý priestor zásobníkarekurzia a chyby. Nemôžem sa zdať, prečo by sa to mohlo stať, alebo ako to obísť, ale ja by som naozaj ocenil ukazovateľ správnym smerom.
odpovede:
2 pre odpoveď č. 1Problém je v tejto funkcii:
@app.route("/<slug>")
def redirect(slug):
return redirect("http://google.com/")
Funkciu ste pomenovali redirect()
, takže v rozsahu funkcie pri volaní return redirect(...)
toto sa interpretuje ako rekurzívne volanie, pretože funkcia zobrazenia zatemňuje funkciu banky s rovnakým názvom a adresa URL, ktorú odovzdáte, je mapovaná na slug
argument v rekurzívnom volaní.
Zmeňte názov funkcie zobrazenia z redirect()
na niečo iné a váš kód bude fungovať v poriadku.