WebHU - Programozási kérdések és válaszok

Hogyan lehet elérni, hogy a Flask metódus tokennel vagy anélkül működjön útvonalelemként

Egy cookiecutter Flask alkalmazás módosításán dolgozom. Megpróbálom követni a következőt: https://realpython.com/blog/python/handling-email-confirmation-in-flask/ e-mail-engedély hozzáadásához.

Az alkalmazás megerősítő e-mailt küld. Ebben az esetben az e-mail egy megerősítő linket tartalmaz, amely így néz ki:

http://127.0.0.1:5000/register/ImNsdWVtYXJpbmUxQG1haWxpbmF0b3IuY29tIg.CajQIA.Pn20l8bkpo3muh1Nk6TSguSoF0I

(amely a „[email protected]” beágyazott e-mailt tartalmazza a tokenben.)

Ez megfelelően működik a regiszter funkcióval (a nyilvános tervben):

@blueprint.route("/register/<token>", methods=['GET', 'POST'])
def register(token):
    form = RegisterForm(request.form, csrf_enabled=False)
    email = confirm_token(token)
    ....

A kódom másik részében a felhasználót a regisztrációs funkcióhoz szeretném átirányítani, és a következő sort használtam:

return redirect(url_for('public.register'))

Ebben az esetben nem használok tokent! Ennek eredménye:

Werkzeug.routing.BuildError BuildError: ('public.register', {}, None)

Feltételezem, hogy ez azért van, mert a második módszernél nincs token. Mi a legjobb módja annak, hogy kezeljük azt a lehetőséget, hogy rendelkezünk-e jogkivonattal a regiszter funkcióban?

Teljes visszakövetés:

File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1477, in full_dispatch_reques
rv = self.handle_user_exception(e)
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask_debugtoolbar\__init__.py", line 124, in dispatch_request
return view_func(**req.view_args)
File "C:\envs\r2\mini\myflaskapp\views\user.py", line 144, in confirm_email
return redirect(url_for('public.register'))
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\helpers.py", line 312, in url_for
return appctx.app.handle_url_build_error(error, endpoint, values)
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\app.py", line 1641, in handle_url_build_error
reraise(exc_type, exc_value, tb)
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\flask\helpers.py", line 305, in url_for
force_external=external)
File "C:\envs\virtalenvs\flask_mini\lib\site-packages\werkzeug\routing.py", line 1678, in build
raise BuildError(endpoint, values, method)
20.02.2016

Válaszok:


1

Igen, az alapértelmezett értékek megadhatók, a következőket teheti:

@blueprint.route("/register", defaults={'token': ''}, methods=['GET', 'POST'])
@blueprint.route("/register/<token>", methods=['GET', 'POST'])
def register(token):
    # do somethind here
    ....

Íme a dokumentáció: URL-útvonal regisztrációk

20.02.2016
  • Kösz. ez segít nekem. A link is nagyon hasznos. 20.02.2016

  • 2

    Ennek egyik módja két külön útvonal lenne.

    @blueprint.route("/register/", methods=['GET', 'POST'])
    @blueprint.route("/register/<token>", methods=['GET', 'POST'])
    def register(token=None):
        form = RegisterForm(request.form, csrf_enabled=False)
        email = confirm_token(token)
        ....
    

    Most a url_for('public.register') a várt módon működik.

    20.02.2016
  • Köszönet a felvilágosításért! 20.02.2016
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..