上一讲,我们学会了 flask 路由的基本功能和用法 , 若你还是不理解怎么使用,可以联系我,我会为你解答。
本文我们讲解一下 URL 拦截器和 session 的使用 , 后台管理的各个 URL 不应该在未登录的情况下被访问到,为了数据安全,只有登录之后才可以访问。
拦截器是做什么的? flask 中怎么实现对 url 请求的拦截 ?
1、拦截器:可以拦截所有URL请求,即只要有 url 请求 flask 应用,拦截器都可以监听到此 URL 请求 。
2、flask 中的拦截器使用 before_request 来完成 , 对所有 url 请求进行拦截 , 我们需要在启动程序(app.py)中进行拦截 。
before_request:在每个函数执行之前执行 ,当用户发来请求时 , 首先经过 before_request ,然后再到具体的路由 。
代码语言:txt复制# 请求拦截器,对未登录的链接进行拦截,防止非法访问
@app.before_request
def before_user():
if request.path == "/login":
return None
if request.path.startswith("/static"):
return None
if request.path.startswith("/api"):
return None
if not session.get("username"):
return redirect("/login")
详细解释:
在 app.py 中 , 将 before_user 函数注册为 before_request ,即所有请求都要经过 before_user 方法 。
那么什么请求需要拦截 ? 什么请求不需要拦截呢 ?
1)静态资源不需要拦截 ,即 static 下的文件不需要拦截 ,static 目录下存放 css、js、以及图标图片等 。
2)登录地址不需要拦截 , 如果拦截登录地址 ,那么我们就无法打开后台登录页面 , 也就无法登录了 。这里我们的登录路由是 login ,所以 login 不需要拦截 。
3)api 相关的接口不需要拦截 , 拦截后小程序端将请求不到接口 。开放了api 接口任何应用随意访问 ,安全性不能保证 ,但是为了安全性可以对 api 接口进行 token 验证操作 。
什么情况下拦截请求 ?如何拦截 ? 如何判断用户是否登录 ?
需要拦截的请求 : 若用户未登录则跳转到后台登录页面 , 即 login 路由 。
不需要拦截的请求:执行 return None ,即直接跳转到对应请求的路由 。
判断用户是否登录:这里我们涉及到 session 的操作 ,若 session 中存在用户名则用户已经登录 , 反之用户未登录 ,未登录则被拦截的请求直接跳转到 登录路由 login 。
session 使用说明
以username 为例 ,添加 、获取 、删除、清空操作如下 :
添加 session :
代码语言:txt复制session['username'] = 'JeenWang'
获取 session :
代码语言:txt复制session.get('username')
删除 session :
代码语言:txt复制session.pop('username')
清空所有 session :
代码语言:txt复制session.clear()
总结:
通过本讲 , 你应该学会如何拦截用户请求 , 如何设置不需要拦截的请求如:/login 、/static、/api 等,如何判断用户是否登录,session 的详细使用。
如果你有任何问题 , 请关注公众号 JeenWang ,给我留言 ,谢谢!