django - 管理员 - 中间件实现登录 , 没等自动跳转到登录页面 - 注销用户
1. 登录login.py 页面中必须有代码
def login(request): if request.method =='GET': form = LoginForm() return render(request, 'login.html', {'form': form}) form = LoginForm(data=request.POST) if form.is_valid(): # 注意form 没有 form.save() # form 使用 form.cleaned_data 字典 #print(form.cleaned_data) admin_obj = models.Admin.objects.filter(**form.cleaned_data).first() if not admin_obj: # 添加一个错误提示 form.add_error('pwd', '用户名或密码错误') return render(request, 'login.html', {'form': form}) # 登录成功 随机字符写入浏览器cookie中 写入session # Redis-x64-3.0.504.msi 电脑缺少软件下面代码是无法运行的 request.session["info"] = {'id': admin_obj.id, 'name': admin_obj.user} return redirect('/admin/list/') return render(request, 'login.html', {'form': form})
2. 设置中间件 在app 文件夹里面创建 文件夹 :middleware 创建 auth.py文件
auth.py 代码
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import redirect '''中间件''' class AuthMiddleware(MiddlewareMixin): def process_request(self, request): # 排除直接访问页面 if request.path_info == '/login/': return # 1 .读取当前用户信息 info_dict = request.session.get('info') if info_dict: return # 没有登录信息 return redirect('/login/')
3. 在setting 设置
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', 'app.middleware.auth.AuthMiddleware', ]
4.注销用户
html 页面代码 退出登录 与 修改用户信息 调用 显示当前用户名 {{ request.session.info.name }} 根据前面设置来调用字段
<li><a href="/login_out/">退出登录</a></li> <li><a href="/admin/{{ request.session.info.id }}/chongzhi/">修改密码</a></li> <li><a href="/admin/{{ request.session.info.id }}/edit/">修改资料</a></li> views代码 注销用户代码 def login_out(request): request.session.clear() return redirect('/login/') urls 代码 # 退出注销 path('login_out/', login.login_out, name='login_out'),

浙公网安备 33010602011771号