You should use the Post-Redirect-Get pattern.
from flask import Flask, redirect, request, render_template app = Flask("the_flask_module") @app.route('/', methods=["GET", "POST"]) def post_redirect_get(): if request.method == "GET": return render_template("post_redirect_get.html") else: # Use said data. return redirect("target", code=303) @app.route("/target") def target(): return "I'm the redirected function" app.run(host="0.0.0.0", port=5001)
So that would break down something like
@app.route('/register', methods=['PUT']) def register(): username = request.form.get('username') password = request.form.get('password') if username is None or password is None: abort(400) # missing parameters user = User.query.filter_by(username=username).first() if user: abort(400) # user exists else: user = User(user=user) user.hash_password(password) db.session.add(user) db.session.commit() # How do we generate a token? redirect("login_success", code=307) @app.route("login_success", methods=["GET", "POST"]) @jwt_required() def login_success(): return "Redirected Success!"
Edit: I haven’t used Flask-JWT before and didn’t know about the post requirement. But you can tell Flask to redirect with the current method used (rather than a get request) by passing the redirect function code=307
.. Hopefully that solves your extended problem.