首页 > 其他分享 >Django web开发:实现账号登陆的注意事项以及2种根据session判断的方法

Django web开发:实现账号登陆的注意事项以及2种根据session判断的方法

时间:2022-09-07 13:57:36浏览次数:88  
标签:web 判断 登录 index Django session path

Django web开发:实现账号登录的注意事项以及2种根据session判断的方法     最近学习基于Django的WEB后端开发,在做网站会员的登录判断时遇到了一些问题,为了提醒自己于是记录一下:     我们做网站的会员登录时,一般都会采用session中间件的方式,使所有的网络请求都通过中间件,判断客户是否是已经登录的会员,如果不是则重定向到登录页面,这是框架要求的方法。     但事实上我们可能会忽略这样一个问题,为了便于理解我们打一个比方: 如果一个景区要对所有来参观的游客售票,只有持票者方可进园参观,那么售票处应该设置在景区内还是景区外呢? 我们对于这个问题的答案都很清楚,但是在写登录页面时,却经常会做出“把售票处设在景区内”的做法,导致实际运行项目时,客户即使想要提交登录表单、退出登录、执行登陆操作甚至是调用生成验证码的网页,都会因为目前不处在登录状态被再次重定向到登录页去,非常不合理!     解决这个矛盾,需要在园外就进行“检票”,具体实现有2种方法: 1.在判断session的中间件views文件里,将逻辑上无需判断登录状态的页面封装一个列表,在中间件判断时将其排除在外:

 # 判断管理后台是否登录
        #定义后台不登陆管理员也允许直接访问的路径列表
        urllist = ['/myadmin/login', '/myadmin/logout', '/myadmin/dologin', '/myadmin/verify']


        #判断当前url地址是否以后台(/myadmin)开头,并且不是管理员页面本身,即不在urllist中,才做登录判断
        if re.match(r'^/myadmin', path) and (path not in urllist):
            # 判断是否已经登陆了(session中没有adminuser),使用session
            if 'adminuser' not in request.session:
                # 重定向到登录页
                return redirect(reverse('myadmin_login'))

如上面说过的,逻辑上登录表单本身、登出表单、执行登录页面和登录时生成验证码的页面都是不需要判断登录状态的,因此用urllist封装,在中间件里判断一下即可!

2.在配置路由时就将需要判断和跳转到登录界面的url和无需判断的区分开,在判断session的中间件views文件里只需要使用正则表达式就可排除不需判断和跳转的:

urls.py:

 1 #前台大堂点餐子路由文件
 2 """
 3 from django.contrib import admin
 4 from django.urls import path, include
 5 from web.views import index
 6 
 7 urlpatterns = [
 8     path('', index.index, name="web_index"),
 9 
10     # 前台员工登录、退出路由,按照逻辑 ,这四个地址无需判断是否登录就可以访问
11     path('login', index.login, name="web_login"),  # 加载登陆表单
12     path('dologin', index.dologin, name="web_dologin"),  # 执行登录
13     path('logout', index.logout, name="web_logout"),  # 执行退出
14     path('verify', index.verify, name="web_verify"),  # 验证码,必须排除中间件,可以直接访问
15 
16     #为url路由添加请求前缀
17     #凡是带此前缀/web 的url均要登陆后才可访问
18     path("web/",include([
19         path('', index.webindex, name="web_index"), #前台大堂首页
20     ]))
21 ]

 

middleware.py:

1        #判断前台大堂点餐请求,判断是否有登录(session中是否有webuser)
2         if re.match(r'^/web', path) :
3             # 判断是否已经登陆了(session中没有webuser),使用session
4             if 'webuser' not in request.session:
5                 # 重定向到登录页
6                 return redirect(reverse('web_login'))

由于我们将需要判断的页面url中都带有了web/,因此直接正则判断即可。

 

以上方法均可实现正常登录页面不被影响,但是个人写模块是同模块url路径比较像,可能不会事先就因为session判断问题做区分,因此优先第一种。

完整代码与项目请参考课程:https://www.bilibili.com/video/BV1MK4y1n7TT?p=30&share_source=copy_web

标签:web,判断,登录,index,Django,session,path
From: https://www.cnblogs.com/czy-blogs/p/16665057.html

相关文章

  • Java Servlet 入门: 问题系列:警告: Web应用程序[ROOT]似乎启动了一个名为[Thread-1]的
    问题:在Java 代码中开了一个线程,死循环定时运行。右键运行项目,再右键停目项目: 发现系统有提示警告:警告:Web应用程序[ROOT]似乎启动了一个名为[Thread-1]的线程,但......
  • 从0到1使用Webpack5 + React + TS构建标准化应用
    简介: 本篇文章主要讲解如何从一个空目录开始,建立起一个基于webpack+react+typescript的标准化前端应用。作者|刘皇逊(恪语)来源|阿里开发者公众号前言本篇......
  • Django开发3- 前后端分离
    数据交互接口规范REST,全称RepresentationalStateTransfer,意为"表现层状态转化"。django的第三方拓展——django-rest-framework可以实现开发符合REST规范的框架。Res......
  • 非洲 Web3 开发者卷 #6
    Bridgelabscoverimage非洲Web3开发者卷#6学习新技能?您如何探索Web3!learnandupskillinweb3Web3是一个去中心化的网络,是互联网的下一阶段。它对开发人员有......
  • 您的移动策略:原生应用还是移动 Web?
    您的移动策略:原生应用还是移动Web?早期计划中的一个主要决策点是在构建原生应用程序或使用移动Web之间。从用户的角度以及技术方面的考虑,有许多事情需要考虑。我还为这......
  • WebGL压缩纹理实践
    0x01本文将讲述压缩纹理在实际项目中的使用的案例。最近的一个项目是这样的:项目由于涉及到的建筑物特别多,大概有近40栋的建筑,而每一栋建筑物,又有10层楼,每层楼里面又有很多......
  • WebAssembly JS API All In One
    WebAssemblyJSAPIAllInOne在js中执行.wasm文件的步骤(()=>{constlog=console.log;log(`\n......
  • django框架-模型层
    正反向进阶操作#正向查询1.查询电话号码问1234的学校名称#res=models.School.objects.filter(schoolinfo_fo__phone='1234').values('name')#print(res)......
  • 常见HTTP请求Web API接口
    一、HTTP请求带账号和密码的域名接口1.接口地址:http://yuming.com/test/model2.请求头:账号:admin;密码:1234563.接口入参格式:点击查看代码{"code":"0","msg":"......
  • asp.net web api 如何设置允许后台跨域访问
    publicstaticclassWebApiConfig{publicstaticvoidRegister(HttpConfigurationconfig){//WebAPI配置和服务......