Django登陆状态保存以及退出登陆状态

本文介绍如何在Django中管理用户的登录状态,包括如何保存登录状态和如何清空登录状态,主要涉及Python、Django框架、中间件及session机制。

Day 20/12/30

在这里插入图片描述

用户登陆状态保存

在登陆成功后使用session,将用户id写入到session中

request.session['user_id'] = user_obj.pk
request.session.set_expiry(60 * 60 * 24 * 14)  # 设置过期时间

使用中间件来做登陆状态的验证

from django.utils.deprecation import MiddlewareMixin
from web import models

class AuthMiddleware(MiddlewareMixin):

    def process_request(self, request):
        user_id = request.session.get('user_id', 0)
         # 通过session中保存的user_id查询到用户对象
        user_obj = models.User.objects.filter(id=user_id).first()
        # 将用户对象赋值给request.login_user,模板中只需判断request.login_user即可
        request.login_user = user_obj

将写好的中间件注册在settings.py中

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',
    'web.middlewares.auth.AuthMiddleware',   # 登陆状态验证
]

模板中判断

{% if request.login_user %}
	<li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">{{ request.login_user.username }}<span class="caret"></span></a>
        <ul class="dropdown-menu">
            <li><a href="#">管理中心</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="{% url 'logout' %}">退出</a></li>
        </ul>
    </li>
{% else %}
    <li><a href="{% url 'login' %}">登录</a></li>
    <li><a href="{% url 'register' %}">注册</a></li>

{% endif %}

清空登陆状态

request.session.flush()

def logout(request):
    request.session.flush()
    return redirect('index')
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天意不可违.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值