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')
本文介绍如何在Django中管理用户的登录状态,包括如何保存登录状态和如何清空登录状态,主要涉及Python、Django框架、中间件及session机制。
3万+





