Django利用中间间 判断页面是否登录,未登录则返回登录页

在t\login_app\middleware\ 新建 verify.py

python 复制代码
from django.shortcuts import redirect
from django.utils.deprecation import MiddlewareMixin

class VerifyMiddleware(MiddlewareMixin):
    def process_request(self, request):
        if request.path_info in ['/login/','/login/login/data/','/login/logout/']:
            return
        info_dict=request.session.get('info')
        if info_dict:
            request.user_id=info_dict['id']
            request.user_name=info_dict['username']
            request.user_role=info_dict['role']
            return
        else:
            return redirect("/login/")

在setting.py中注册

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",
    'login_app.middleware.verify.VerifyMiddleware',
]

views login.py

python 复制代码
import json

from django.http import HttpResponse, JsonResponse
from django.shortcuts import render, redirect
from django.views.decorators.csrf import csrf_exempt

from admin_app.models import UserInfo
from utils_app.utils.encryption import md5


# Create your views here.
def login(request):
    return render(request, "login/login.html")

@csrf_exempt
def login_data(request):
    username=json.loads(request.body)['username']
    password=json.loads(request.body)['password']
    password=md5(password)

    queryset=UserInfo.objects.filter(username=username,password=password).first()
    if queryset:
        request.session['info'] = {"id":queryset.id,"username":queryset.username,"role":queryset.role}
        request.session.set_expiry(60*60*24*7)           #保存时间7天
        return JsonResponse({'status':True})
    return JsonResponse({'status':False,'error':'用户名密码错误'})


def logout(request):
    request.session.clear()
    return redirect('/login')

登录前端页面login.html

html 复制代码
{% load static %}
<!DOCTYPE html>
<html lang="zh-CN" id="crm-html">
<head>
<meta charset="UTF-8" />
<title>登录 · 客户管理系统</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="{% static 'login/css/login.css' %}">
</head>

<body>

<div id="crm-login-box">
    <h1>客户管理系统</h1>
    <p>请输入账号和密码登录</p>

    <form onsubmit="return false;">
        <div class="crm-form-group">
            <label for="username">账号</label>
            <input
                type="text"
                id="username"
                class="crm-input"
                placeholder="请输入账号"
                autocomplete="username"
            />
        </div>

        <div class="crm-form-group">
            <label for="password">密码</label>
            <input
                type="password"
                id="password"
                class="crm-input"
                placeholder="请输入密码"
                autocomplete="current-password"
            />
        </div>

        <button class="crm-btn" id="btn_log">
            登 录
        </button>
    </form>

    <div id="crm-footer">
        © 备案号:xxxxx-xxxxx-xxxxx
    </div>
</div>

<script src="{% static 'bootstrap-3.4.1-dist/js/jquery-3.7.1.js' %}"></script>
<script>
    $('#btn_log').click(function () {

        $.ajax({
            url:'/login/login/data/',
            type:'post',
            data:JSON.stringify({
                username:$('#username').val(),
                password:$('#password').val(),
            }),
            dataType:"JSON",
            success:function(res){
                if(res.status){
                    window.location.href='/'
                }else{
                    alert(res.error)
                    location.reload()
                }
            }
        })
    })
</script>
</body>
</html>

登录后 前端 页可加上

html 复制代码
<div class="crm-user-dropdown">
                <button class="crm-user-btn" onclick="toggleDropdown()">
                    👤 {{ request.user_name }} ▾
                </button>
                <ul class="crm-dropdown-menu" id="crmDropdown">
                    <li><a href="#">👤 个人中心</a></li>
                    {% if request.user_role == 2 %}
                    <li><a href="/admin/">⚙️ 进入后台</a></li>
                    {% endif %}
                    <li><a href="/login/logout/">🚪 退出登录</a></li>
                </ul>
            </div>
相关推荐
ai生成式引擎优化技术1 小时前
WSaiOS:面向认知资产与工程化认知流程的智能操作系统架构
python·架构·django·virtualenv·pygame
承渊政道1 小时前
【MySQL数据库学习】(MySQL访问、连接池原理与简易网站数据流动)
数据库·学习·mysql·mysql访问·连接池原理
吴声子夜歌1 小时前
SQL进阶——EXISTS谓词
java·数据库·sql
wefg14 小时前
【MySQL】索引(索引底层原理/创建/查看/删除主键、普通、联合、前缀、全文索引)
数据库·mysql
风向决定发型丶8 小时前
redis集群搭建
数据库·redis·缓存
2501_947575809 小时前
计算机毕业设计之jsp开山车行二手车交易系统
java·开发语言·hadoop·python·信息可视化·django·课程设计
wei_shuo10 小时前
KES 扩展与插件开发实战:自定义函数、触发器与第三方插件集成
数据库·kes
风中芦苇啊11 小时前
从直接生成到受控配置:新一代图表Agent的SQL安全生成范式
数据库·sql·安全
吴声子夜歌11 小时前
SQL进阶——窗口函数
数据库·sql