• Django中间件判断网站的登陆状态


    • 此中间件对后台网址访问做了是否登录的判断
    • 关于网站后台要求:只要访问的URL地址是以 "/admin" 开头的都会执行是否登录判断验证。

    (1). 在myadmin应用中创建中间件

    • 创建文件: myobject/myadmin/shopmiddleware.py, 代码如下:
    1. # 自定义中间件类
    2. from django.shortcuts import redirect
    3. from django.urls import reverse
    4. import re
    5. class ShopMiddleware(object):
    6. def __init__(self, get_response):
    7. self.get_response = get_response
    8. # One-time configuration and initialization.
    9. print("ShopMiddleware")
    10. def __call__(self, request):
    11. # 获取当前请求路径
    12. path = request.path
    13. #print("mycall..."+path)
    14. # 后台请求路由判断
    15. # 定义网站后台不用登录也可访问的路由url
    16. urllist = ['/myadmin/login','/myadmin/dologin','/myadmin/logout','/myadmin/verify']
    17. # 判断当前请求是否是访问网站后台,并且path不在urllist中
    18. if re.match(r"^/myadmin",path) and (path not in urllist):
    19. # 判断当前用户是否没有登录
    20. if "adminuser" not in request.session:
    21. # 执行登录界面跳转
    22. return redirect(reverse('myadmin_login'))
    23. # 请求继续执行下去
    24. response = self.get_response(request)
    25. # Code to be executed for each request/response after
    26. # the view is called.
    27. return response

    (2). 将自定义的中间件注册到项目中

    • 编辑 myobject/settings.py 配置文件, 添加如下代码
    1. ...
    2. MIDDLEWARE = [
    3. 'django.middleware.security.SecurityMiddleware',
    4. 'django.contrib.sessions.middleware.SessionMiddleware',
    5. 'django.middleware.common.CommonMiddleware',
    6. 'django.middleware.csrf.CsrfViewMiddleware',
    7. 'django.contrib.auth.middleware.AuthenticationMiddleware',
    8. 'django.contrib.messages.middleware.MessageMiddleware',
    9. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    10. 'myadmin.shopmiddleware.ShopMiddleware', #注册中间件
    11. ]
    12. ...

    (3). 配置路由、模板并测试中间件

    • 3.1 配置路由 myobject/myadmin/urls.py 加入如下代码
    1. ....
    2. # 后台管理员路由
    3. path('login', index.login, name="myadmin_login"),
    4. path('dologin', index.dologin, name="myadmin_dologin"),
    5. path('logout', index.logout, name="myadmin_logout"),
    6. #path('verify', index.verify, name="myadmin_verify"), #验证码
    7. ....
    • 3.2 编写视图 myobject/myadmin/views/index.py文件 并加入如下代码:
    1. ...
    2. # ==============后台管理员操作====================
    3. # 会员登录表单
    4. def login(request):
    5. return render(request,'myadmin/index/login.html')
    6. # 会员执行登录
    7. def dologin(request):
    8. pass
    9. # 会员退出
    10. def logout(request):
    11. pass
    12. ...
    • 3.3 创建登录模板文件: templates/myadmin/index/login.html 代码如下:
    1. {% load static from staticfiles %}
    2. <!DOCTYPE html>
    3. <html>
    4. <head>
    5. <meta charset="utf-8">
    6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    7. <title>后台管理登录界面</title>
    8. <!-- 支持响应式布局 -->
    9. <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
    10. <link rel="stylesheet" href="{% static 'myadmin/bower_components/bootstrap/dist/css/bootstrap.min.css' %}">
    11. <!-- 象形字体 -->
    12. <link rel="stylesheet" href="{% static 'myadmin/bower_components/font-awesome/css/font-awesome.min.css' %}">
    13. <!-- 图标 -->
    14. <link rel="stylesheet" href="{% static 'myadmin/bower_components/Ionicons/css/ionicons.min.css' %}">
    15. <!-- 主题风格样式 -->
    16. <link rel="stylesheet" href="{% static 'myadmin/dist/css/AdminLTE.min.css' %}">
    17. <!-- AdminLTE 皮肤.这里选择的是skin-blue样式,我们还可以有其他皮肤可以选择. -->
    18. <link rel="stylesheet" href="{% static 'myadmin/dist/css/skins/skin-blue.min.css' %}">
    19. <!-- 兼容IE9以下浏览器 -->
    20. <!--[if lt IE 9]>
    21. <script src="{% static 'myadmin/local/js/html5shiv.min.js' %}"></script>
    22. <script src="{% static 'myadmin/local/js/respond.min.js' %}"></script>
    23. <![endif]-->
    24. <!-- Google Font -->
    25. <link rel="stylesheet" href="{% static 'myadmin/local/css/google_fonts.css' %}">
    26. </head>
    27. <body class="hold-transition login-page">
    28. <div class="login-box">
    29. <div class="login-logo">
    30. <a href="index2.html"><b>餐饮系统后台管理</b></a>
    31. </div>
    32. <!-- /.login-logo -->
    33. <div class="login-box-body">
    34. <p class="login-box-msg" style="color:red">登录账号或密码错误!</p>
    35. <form action="index2.html" method="post">
    36. <div class="form-group has-feedback">
    37. <input type="text" class="form-control" placeholder="账号">
    38. <span class="glyphicon glyphicon-user form-control-feedback"></span>
    39. </div>
    40. <div class="form-group has-feedback">
    41. <input type="password" class="form-control" placeholder="密码">
    42. <span class="glyphicon glyphicon-lock form-control-feedback"></span>
    43. </div>
    44. <div class="form-group has-feedback">
    45. <input type="text" class="form-control" style="width:150px" placeholder="验证码">
    46. <span class="form-control-feedback" style="width:150px">
    47. <img src="{% static 'myadmin/dist/img/verify.png' %}"/>
    48. </span>
    49. </div>
    50. <div class="row">
    51. <div class="col-xs-12">
    52. <button type="submit" class="btn btn-primary btn-block btn-flat">登录</button>
    53. </div>
    54. <!-- /.col -->
    55. </div>
    56. </form>
    57. </div>
    58. <!-- /.login-box-body -->
    59. </div>
    60. <!-- /.login-box -->
    61. <!-- jQuery 3 -->
    62. <script src="{% static 'myadmin/bower_components/jquery/dist/jquery.min.js' %}"></script>
    63. <!-- Bootstrap 3.3.7 -->
    64. <script src="{% static 'myadmin/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
    65. </body>
    66. </html>

    (4). 启动服务测试,网站后台就进不去了,统一调跳转登录页面中

  • 相关阅读:
    解决Spring Boot应用在Kubernetes上健康检查接口返回OUT_OF_SERVICE的问题
    万字博客带你了解Spring Framework 的全貌
    6.5 图的遍历
    docker mysql主从复制
    2024年1月京东奶粉行业销售数据分析(TOP10奶粉品牌排行榜)
    【黄啊码】MySQL入门—3、我用select *,老板直接赶我坐火车回家去,买的还是站票
    【左程云算法全讲11】贪心算法 & 并查集
    I2C知识笔记
    【第2章 Node.js基础】2.1 JavaScript基本语法
    Java(六)——常用类System
  • 原文地址:https://blog.csdn.net/xyh2004/article/details/139253132