前后端学习_Flask_http请求、表单_实现登陆后跳转回原网页

本文介绍了如何在用户未登录时重定向到登录页面,并在登录成功后返回之前访问的页面。通过在URL中传递next参数,利用Flask的路由处理GET和POST请求,实现登录后的页面跳转。这种方法虽然有些绕,但能有效提供用户体验。
摘要由CSDN通过智能技术生成

问题描述

一般的网站在未登录访问某个页面时,会跳转到登录界面,登录完后会跳转回原来那个页面,方便用户使用。

实现过程

1、使用url_for()向登录界面传递需要跳转回的地址(存放在next中)
###查看页面
@app.route('/view/<code>', methods=['POST', 'GET'])
def return(code):
	# 判断是否登录
    if 'username' in session:
        return render_template("view.html", code=code)
    else:
        # 如果为登录,重定向并传递当前页面路径,方便跳回
        return redirect(url_for('loginpage', next='/view/'+code))

2、处理表单提交方式

经过以上设置后,尝试在未登录时访问页面,将被重定向到/login页面,观察地址栏中URL,后面也会带上?next=/view/xx的参数(xx为后台的code)。

刚开始想着是使用JS获取URL的参数,但这样显得有点麻烦,还需要用到正则表达式。

印象中表单是可以直接提交到当前地址栏中的URL的,将<form>中的action去掉即可。


3、获得页面和提交表单使用同一个URL,接受表单提交时附带的参数

为什么要使用同一个URL呢,因为经过第二步的修改,当后端重定向获取登录界面后,地址栏的URL即为表单提交的地址,所以该URL需要具备同时处理GET请求和登录POST表单的能力。代码实现如下

###登录页面跳转
@app.route('/login',methods=['POST', 'GET'])
def loginpage():
	# 如果是GET请求,则返回页面模板
    if request.method == 'GET':
        return render_template("login.html")

	# 如果是POST请求,则处理登录表单
    if request.method == 'POST':
        # 获取表单信息
        username = request.form.get("uname")
        password = request.form.get("upwd")
		
		 # 获取URL中net参数
        next=request.args.get('next')

        if check_password(username, password) == "OK":
			#登陆成功后检查是否需要回跳
            if(next):
                return redirect(next)
            else:
            	# 如果不需要回跳则定向到主菜单
                return redirect(url_for('mainpage'))
        else:
        	#登陆失败
            return redirect(url_for('loginpage'))

总结

怎么说呢这个方法有点绕,如果大家有问题提可以在评论区一起讨论哦。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值