在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>