在使用flask中的重定向之前,让我们先了解一个概念,重定向和请求转发的作用和区别
网址
重定向时浏览器上的网址改变
转发时浏览器上的网址不变
请求次数
重定向实际上产生了两次请求
转发只有一次请求
工作流程
转发过程:
客户浏览器发送http请求 --> web服务器接受此请求 --> 调用内部的一个方法在容器内部完成请求处理和转发动作 --> 将目标资源发送给客户
转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的
重定向过程:
客户浏览器发送http请求 --> web服务器接受后发送302状态码响应及对应新的location给客户浏览器 --> 客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址 --> 服务器根据此请求寻找资源并发送给客户
可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有request传递。在客户浏览器路径栏显示的是其重定向的路径。重定向行为是浏览器做了至少两次的访问请求
需求
实现一个获取微信中code变量,步骤如下:
方案
可以在微信页面请求路由http://xxxx.xx.xxxx.xx/getUserId
中,判断是否存在参数code,若不存在即重定向 https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx123&redirect_uri=http://xxxx.xx.xxxx.xx/getUserId&response_type=code&connect_redirect=1#wechat_redirect,若存在即获取code的值即可
实现
from flask import redirect
if code == None:
return redirect('https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx123&redirect_uri=http://xxxx.xx.xxxx.xx/getUserId&response_type=code&connect_redirect=1#wechat_redirect')
else:
print(code)