Flask-Login获取next参数request.args.get('next')获取不到值

flask视图函数打上@login_request装饰器之后。访问该视图的时候如果没有登录会弹出登录页面而且会有一个next参数,表示之前想访问的视图函数。登陆之后会跳到这个next视图。代码如下:

next = request.args.get('next') # 这样获取next参数
if not next or not next.startwith('/'):
    next = url_for('web.index')
return redirect(next)

html代码如下:

<form  action="{{ url_for('web.login')  }}" method="post">

但是遇到这种情况的时候会出现next参数为none的情况,因为跳转到登录页面是是有next参数的,但是点击登陆之后的URL next参数就没有了。这个时候在html页面里作如下修改:

<form  action="{{ url_for('web.login',next=request.args.next)  }}" method="post">

这样就成功跳转了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,Flask web可以通过使用Flask-WTF和Flask-Login进行实现登录页面。具体步骤可以看下面的教程: 1. 安装Flask-WTF和Flask-Login: ``` pip install Flask-WTF Flask-Login ``` 2. 创建一个app,并配置Flask-WTF和Flask-Login: ```python from flask import Flask from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField, BooleanField from wtforms.validators import DataRequired, Length, Email, EqualTo from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user app = Flask(__name__) app.config['SECRET_KEY'] = 'your_secret_key!' login_manager = LoginManager(app) login_manager.login_view = 'login' login_manager.login_message_category = 'info' class User(UserMixin): def __init__(self, id): self.id = id @login_manager.user_loader def load_user(user_id): return User(user_id) class LoginForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) password = PasswordField('Password', validators=[DataRequired()]) remember = BooleanField('Remember Me') submit = SubmitField('Login') ``` 3. 编写视图函数,并在登录成功后将用户信息存入session中: ```python @app.route("/login", methods=['GET', 'POST']) def login(): if current_user.is_authenticated: return redirect(url_for('home')) form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(email=form.email.data).first() if user and form.password.data == 'your_password': login_user(user, remember=form.remember.data) next_page = request.args.get('next') return redirect(next_page) if next_page else redirect(url_for('home')) else: flash('Login Unsuccessful. Please check email and password', 'danger') return render_template('login.html', title='Login', form=form) ``` 4. 编写登录页面模板: ```html {% extends "layout.html" %} {% block content %} <div class="content-section"> <form method="POST"> {{ form.hidden_tag() }} <fieldset class="form-group"> <legend class="border-bottom mb-4">Login</legend> <div class="form-group"> {{ form.email.label(class="form-control-label") }} {{ form.email(class="form-control form-control-lg") }} </div> <div class="form-group"> {{ form.password.label(class="form-control-label") }} {{ form.password(class="form-control form-control-lg") }} </div> <div class="form-group"> {{ form.remember(class="form-check-input") }} {{ form.remember.label(class="form-check-label") }} </div> </fieldset> <div class="form-group"> {{ form.submit(class="btn btn-outline-info") }} </div> </form> <div class="border-top pt-3"> <small class="text-muted"> Need An Account? <a class="ml-2" href="{{ url_for('register') }}">Sign Up</a> </small> </div> </div> {% endblock %} ``` 希望这个回答能够帮助你!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值