11.(http)重定向

重定向很简单,只需要一个redirect()函数即可解决,里面可以直接放链接,也可以用url_for反转

【重点是重定向到上一个页面】

(思路)  
1. 获取上一个页面的url(通过request.reffer或者next参数)
2. 获取到之后还得验证这个url
3. 将其编写为一个函数,以便之后重复用
(代码)
from flask import request,redirect,url_for
from urllib.parse import urlparse,urljoin

# 从url里获取查询字符串next的值
# next = request.args.get("next")
# 重定向到上一个页面函数

def redirect_back(next, **kwargs):
# 遍历这两个url 
    for target in (next,request.referrer):
        if not target:
            continue
        if target:
#获取主机地址(本站根域名)并解析出来
            a_url = urlparse(request.host_url)
#将目标url加上主机地址 即转换为绝对地址,如果目标url已经是绝对地址,则以目标url为准
            b_url = urlparse(urljoin(request.host_url,target))
#验证转换后的模板url是否属于这两个协议,并且他们的根域名是否相等(重点)
            if b_url.scheme in ["http","https"] and a_url.netloc==b_url.netloc:
                return redirect(target)
            return redirect(url_for("blog.index"))
        return redirect(url_for("blog.index"))                 

【注意】一般是

你可能感兴趣的:(11.(http)重定向)