前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >flask 拦截器与session的使用(微信报修小程序源码讲解三)

flask 拦截器与session的使用(微信报修小程序源码讲解三)

原创
作者头像
热心的程序员
修改2020-03-25 10:04:03
3.1K0
修改2020-03-25 10:04:03
举报
文章被收录于专栏:编程之路

上一讲,我们学会了 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 ,给我留言 ,谢谢!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 拦截器是做什么的? flask 中怎么实现对 url 请求的拦截 ?
  • session 使用说明
  • 总结:
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档