13 django管理系统 - 注册与登录 - 中间件控制访问

news/2024/10/22 12:33:23/

去管理员列表中,获取刚才登录的用户session:

用户发来请求,获取cookie随机字符串,拿着随机字符串,看看session中有没有

通过request.session.get("user_info")来获取

python">def admin_list(request):# 获取当前登录用户信息info = request.session.get('user_info')print("info is...", info)# return HttpResponse("admin_list is ok")# 查询所有的数据queryset = models.Admin.objects.using("default").all()# 创建分页对象page_obj = Pagination(request, queryset)form = AdminModelForm()# context = {#     "queryset": queryset,#     "form": form# }context = {"form": form,"queryset": page_obj.page_queryset,  # 分完页的数据"page_html": page_obj.html(),  # 分页后的页码}return render(request, 'admin_list.html', context)

访问下管理员列表界面,看看输出的info是什么

可以看到session确实是被获取到了。

所以,如果用户没有登录,则返回登录界面,不给他直接进入部门列表界面或者管理员界面。

python">def admin_list(request):# 获取当前登录用户信息info = request.session.get('user_info')print("info is...", info)# 如果用户没有登录,则跳转到登录页面if not info:return redirect("/account/login/")# return HttpResponse("admin_list is ok")# 查询所有的数据queryset = models.Admin.objects.using("default").all()# 创建分页对象page_obj = Pagination(request, queryset)form = AdminModelForm()# context = {#     "queryset": queryset,#     "form": form# }context = {"form": form,"queryset": page_obj.page_queryset,  # 分完页的数据"page_html": page_obj.html(),  # 分页后的页码}return render(request, 'admin_list.html', context)

我们把cookie清除,看看能不能直接访问部门列表界面或者管理员列表界面

可以看到,当我们直接访问管理员列表,直接跳转登录界面。

类似的,如果有其他视图,则在所有的视图函数上,统一加上这个判断。

但是一个个加的话,贼烦。使用中间件来实现。

首先创建middleware文件夹,创建auth.py

python">from django.utils.deprecation import MiddlewareMixinclass AuthMiddlewareMixin(MiddlewareMixin):def process_request(self, request):print("MW 进来了")def process_response(self, request, response):print("MW 走了")return response

然后在settings注册

python">MIDDLEWARE = ["django.middleware.security.SecurityMiddleware","django.contrib.sessions.middleware.SessionMiddleware","django.middleware.common.CommonMiddleware","django.middleware.csrf.CsrfViewMiddleware","django.contrib.auth.middleware.AuthenticationMiddleware","django.contrib.messages.middleware.MessageMiddleware","django.middleware.clickjacking.XFrameOptionsMiddleware","app01.middleware.auth.AuthMiddlewareMixin",
]

修改业务逻辑

python"># 继承中间件类
from django.shortcuts import redirect
from django.utils.deprecation import MiddlewareMixinclass AuthMiddlewareMixin(MiddlewareMixin):def process_request(self, request):# 0 在做读取访问用户的session之前,要先过滤掉那么不需要登录就能访问的界面if request.path_info in ["/account/login/","/account/logout/",]:return None# 1 读取当前访问用户的session,如果能读取到,那么说明用户曾经登陆过,那么就可以继续往下执行;info_dict = request.session.get('user_info')if info_dict:return None# 2 如果没有读取到,则提示用户进行登录else:# return HttpResponse("请先登录")return redirect('/account/login/')def process_response(self, request, response):print("process_response。。。。")return response

把原来的获取信息注释掉

python">def admin_list(request):# # 获取当前登录用户信息# info = request.session.get('user_info')# print("info is...", info)# # 如果用户没有登录,则跳转到登录页面# if not info:#     return redirect("/account/login/")# return HttpResponse("admin_list is ok")# 查询所有的数据queryset = models.Admin.objects.using("default").all()# 创建分页对象page_obj = Pagination(request, queryset)form = AdminModelForm()# context = {#     "queryset": queryset,#     "form": form# }context = {"form": form,"queryset": page_obj.page_queryset,  # 分完页的数据"page_html": page_obj.html(),  # 分页后的页码}return render(request, 'admin_list.html', context)

可以看到,当我们直接访问管理员列表,直接跳转登录界面。


http://www.ppmy.cn/news/1541062.html

相关文章

安装和简单使用Milvus

安装和简单使用Milvus 1 介绍 Milvus是国产的高性能分布式向量数据库。 # Milvus官网 https://milvus.io/# 安装文档 https://milvus.io/docs/install-overview.md# Python的对应关系和接口文档 https://milvus.io/api-reference/pymilvus/v2.4.x/About.md2 安装Milvus 2.1…

解析带有MyBatis语法的SQL字符串,获取最终的可执行SQL

有一个带有mybatis语法的sql语句&#xff0c;如下&#xff1a; select * from cfg_export_template where id #{id} <if testid ! null> AND 1 1 </if>需求是将sql和占位符相关的数据丢给mybatis&#xff0c;获取到最终可执行的SQL。 解决思路&#xff1a; 1、像…

R语言绘制Venn图(文氏图、温氏图、维恩图、范氏图、韦恩图)

Venn图&#xff0c;又称文氏图&#xff0c;标题中其他名字也是它的别称&#xff0c;由封闭圆形组成&#xff0c;代表不同集合。圆形重叠部分表示集合交集&#xff0c;非重叠处为独有元素。在生物学、统计学等领域广泛应用&#xff0c;可展示不同数据集相似性与差异&#xff0c;…

企业电子印章主要通过以下几种方式进行防伪

企业电子印章主要通过以下几种方式进行防伪&#xff1a; 一、数字证书和加密技术 数字证书认证 企业电子印章依托数字证书&#xff0c;数字证书由权威的第三方数字认证机构颁发&#xff0c;确保了印章使用者的身份真实性。 数字证书如同企业在数字世界的身份证&#xff0c;包…

wpf grid 的用法

WPF中的Grid是一种布局控件&#xff0c;可用于将子控件按照行和列的方式排列。 以下是Grid控件的用法&#xff1a; 在XAML文件中&#xff0c;添加一个Grid控件&#xff1a; <Grid> </Grid>在Grid控件中&#xff0c;添加行和列定义&#xff1a; <Grid><…

Uptime Kuma: 全面的开源网站监控解决方案

在当今数字化时代,网站和服务的可用性对于企业和个人来说至关重要。Uptime Kuma作为一款功能强大的开源监控工具,为用户提供了全面的网站和服务监控解决方案。本文将深入介绍Uptime Kuma的特性、安装方法以及更新维护,帮助读者了解这一优秀的监控工具。 主要特性 Uptime Kuma…

dbt-codegen: dbt自动生成模板代码

dbt项目采用工程化思维&#xff0c;数据模型分层实现&#xff0c;支持描述模型文档和测试&#xff0c;非常适合大型数据工程项目。但也需要用户编写大量yaml描述文件&#xff0c;这个过程非常容易出错且无聊。主要表现&#xff1a; 手工为dbt模型编写yaml文件&#xff0c;这过…

【Golang】Go语言web框架Gin响应客户端有哪些方式

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…