解决Flask Web request.args.get('next')问题

 时间:2024-10-24 03:26:19

在FlaskWeb开发过程中有问题在所难免,关键是要找到解决问题的方案

工具/原料

适合python开发的任何编程软件(我用的是Pycharm)

方法/步骤

1、问题再现:目标实现的功能:当用户注册后,程序自动发送用于确认邮嘞窜虹律箱的连接到注册邮箱上,当用户点出确认链接后,转到登陆页面,用户输入登陆信息后达到自动确认邮箱的目的1.惺绅寨瞀创建登陆表单<formaction="auth.login"method='POST'>...</form>2.在User模型中添加生成token及验证token的方法fromitsdangerousimportTimedJSONWebSignatureSerializerasSerializerdefgernerate_token(self):s=Serializer(SECRET_KEY)token=s.dumps({'confirm':self.id})returntokendefconfirm_token(self,token):s=Serializer(SECRET_KEY)try:data=s.loads(token)ifdata.get('confirm')!=self.id:returnFalseelse:self.confirmed=Truedb.session.add(self)db.session.commit()returnTrue3.在登陆路由上的配置@auth.route('auth.login')deflogin():form=loginForm()ifform.validate_on_submit():user=User.query.filter_by(username=form.email.data).first()ifuserisnotNoneanduser.verify_pass(form.password.data):login_user(user)returnredirect(request.args.get('next')orurl_for('main.index'))returnredirect(url_for('main.index'))4.在验证令牌路由上的配置@auth.route('/confirm/<token>')@login_requireddefconfirm(token):ifcurrent_user.confirmed:flash('邮箱已经确认!')returnredirect(url_for('main.index'))else:ifuser.confirm_token(token):flash('恭喜!邮箱确认成功!')else:flash('令牌错误或者过期!')returnredirect('main.index')

2、按照以上步骤设置,令牌生成及发送功能已没有问题,唯独令牌验证上出现了问题。主要问题在于在登陆页面跳转时request.args.get('next')总是返回None,这就使得用户登陆后无法实现邮箱确认的功能

3、解决方案:1.问题是如何引起的:当用户提交表单后,表单中定义了处理表单数据的路由'auth.login',所以每次提交数据,都将跳转到auth/login这个连接去,而这链接中没有'next'这个参数,这就是为什么request.args.get('next')总是返回None的原因。2.解决问题的方案:修改登陆表单中的路由,去掉或者改为空action=''。这样修改后,邮箱验证的功能就正常了。

设置vs2010中的报表字段居中 如何使用C#dataGridView控件进行数据显示 Power Designer做出完整逻辑图 VS2013怎么设置为图像使用宽度和高度特性 制作镂空曲面(Mathematica)
热门搜索
ps合并两张图片 悍马图片 运动会图片素材 我为歌狂动漫 耽美动漫大全