大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解访问鉴权功能实现
视频在线地址:
2026版【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts+爬虫) 视频教程 (火爆连载更新中..)_哔哩哔哩_bilibili
课程简介:
本课程采用主流的Python技术栈实现,Mysql8数据库,Flask后端,Pandas数据分析,前端可视化图表采用echarts,以及requests库,snowNLP进行情感分析,词频统计,包括大量的数据统计及分析技巧。
实现了,用户登录,注册,爬取微博帖子和评论信息,进行了热词统计以及舆情分析,以及基于echarts实现了数据可视化,包括微博文章分析,微博IP分析,微博评论分析,微博舆情分析。最后也基于wordcloud库实现了词云图,包括微博内容词云图,微博评论词云图,微博评论用户词云图等功能。
用户安全退出功能实现
用户登录成功后,进入主页,可以点击安全退出,清掉session,回到登录页面。我们来实现下这个功能。
<a href="/user/logout">安全退出</a>
user / user.py 实现下logout()方法
@ub.route('/logout')
def logout():
"""
安全退出 注销
:return:
"""
session.clear()
return redirect('/user/login')
访问鉴权功能实现
前面我们实现的系统有个问题,比如用户没有登录,也可以直接访问后端主页。所以要修复这个问题,必须实现访问鉴权。
Flask提供了before_request装饰器功能,可以实现每次请求访问之前,都会进入before_request注解方法,通过这个方法实现鉴权逻辑。来实现访问鉴权。我们可以放行一些白名单地址,然后再判断用户session,如果没有登录的,直接重定向到登录页面。否则就放行。
app.py里实现before_request方法:
@app.before_request
def before_request():
"""
鉴权
:return:
"""
pat = re.compile(r'^/static')
if re.search(pat, request.path):
return
if request.path == '/user/login':
return
if request.path == '/user/register':
return
user = session.get('user')
if user:
return None
return redirect('/user/login')
404页面功能实现
有时候,我们访问系统暂未开发的Url地址页面,系统默认报错如下,不太友好。
我们可以自定义404页面,然后实现catch_all方法,路由匹配所有路径,只要是前面路由没匹配的,剩下的都是404页面。
@app.route('/<path:path>')
def catch_all(path):
"""
404页面
:param path:
:return:
"""
return render_template('/404.html')
404.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>
404页面
</title>
<link rel="stylesheet" href="//static/css/backend-plugin.min.css">
<link rel="stylesheet" href="//static/css/backend.css">
</head>
<body class=" ">
<div class="wrapper">
<div class="container">
<div class="row no-gutters height-self-center">
<div class="col-sm-12 text-center align-self-center">
<div class="iq-error position-relative">
<img src="//static/picture/Datum_404.png" class="img-fluid iq-error-img iq-error-img-dark mx-auto"
alt="">
<img src="//static/picture/Datum_404.png" class="img-fluid iq-error-img mb-0" alt="">
<h2 class="mb-0">噢!该页面没有找到.</h2>
<p>本次请求没有任何反应.</p>
<a class="btn btn-primary d-inline-flex align-items-center mt-3" href="/user/login"><i
class="ri-home-4-line mr-2"></i>回到登录页</a>
</div>
</div>
</div>
</div>
</div>
<script src="//static/js/backend-bundle.min.js"></script>
<script src="//static/js/customizer.js"></script>
<script src="//static/js/sidebar.js"></script>
<script src="//static/js/flex-tree.min.js"></script>
<script src="//static/js/tree.js"></script>
<script src="//static/js/table-treeview.js"></script>
<script src="//static/js/sweetalert.js"></script>
<script src="//static/js/vector-map-custom.js"></script>
<script src="//static/js/chart-custom.js"></script>
<script src="//static/js/01.js"></script>
<script src="//static/js/02.js"></script>
<script src="//static/js/slider.js"></script>
<script src="//static/js/index.js" type="module"></script>
<script src="//static/js/app.js"></script>
</body>
</html>