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'),

 

posted @ 2022-06-02 10:45  我在春天等伱  阅读(42)  评论(0)    收藏  举报