[英]Flask login_required + next url params
我的应用程序中有一个受保护的视图,它只接受POST请求。
@app.route("/booking", methods=("POST", ))
@login_required
def booking():
arg1 = request.form.get("arg1")
arg2 = request.form.get("arg2")
当未经授权的用户尝试访问此视图时,我希望他们登录,然后在此处重定向。
现在,我的登录视图如下所示:
@app.route("/login", methods=("GET", "POST"))
@login_required
def login():
do_login()
return redirect(request.args.get('next') or url_for('home'))
所以最终发生的是对/booking
的POST请求(这是“下一个”参数),我得到一个NOT ALLOWED错误。
问题是login()
向booking()
发出GET请求。 我可以解决这个问题,但我不知道如何从/booking
检索原始的POST表单参数? 任何想法绕过那个?
我会通过拉取数据并将其放入会话中来解决这个问题。 您可以删除@login_required装饰器并使用current_user.is_authorized
在函数中进行检查。 请参阅Flask Sessions和Flask Login 。
这样的东西可能适合你,我没有测试它:
from flask import session
from flask_login import current_user
@app.route("/booking", methods=("POST", ))
def booking():
if not 'arg1' in session.keys() and not 'arg2' in session.keys():
session['arg1'] = request.form.get("arg1")
session['arg2'] = request.form.get("arg2")
# Now the data will persist in the session
if current_user.is_authorized:
# Do what you need...
else:
# Redirect to login, session will persist
为什么你只在预订视图中使用POST? 您可能正在渲染一个也应该允许GET的表单。
@app.route("/booking", methods=['GET','POST'])
@login_required
def booking():
# render the form. something like
form = BookingForm()
# Check if POST
if request.method == 'POST':
# process the form now and do whatever you need.
return redirect(url_for('index'))
# code below will run if not POST. You should render the template here
return render_templte('booking.html')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.