You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django应用如何实现页面刷新时自动触发用户登出功能?

实现Django页面刷新自动登出功能的步骤

核心实现逻辑使用Django全局中间件,所有请求触发时自动执行登出逻辑,覆盖全应用所有页面场景:

步骤1:创建自定义中间件

在你的应用目录下新建middleware.py文件,写入如下代码:

from django.contrib.auth import logout
from django.urls import resolve

class AutoLogoutOnRefreshMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 排除登录接口的POST请求,避免刚登录就被登出
        current_url = resolve(request.path_info).url_name
        if not (request.method == 'POST' and current_url == 'login'):
            if request.user.is_authenticated:
                logout(request)
        
        response = self.get_response(request)
        return response

步骤2:注册中间件

打开项目settings.py文件,找到MIDDLEWARE配置项,将刚才写的中间件添加到列表末尾,注意要放在django.contrib.sessions.middleware.SessionMiddleware和django.contrib.auth.middleware.AuthenticationMiddleware之后:

MIDDLEWARE = [
    # 原有默认中间件保持不变
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 其他原有中间件...
    # 新增你的自定义中间件,替换为你实际的应用名
    '你的应用名.middleware.AutoLogoutOnRefreshMiddleware',
]

步骤3:修复现有登录视图的问题

你当前的Login视图存在两处逻辑错误需要修正:

  • 登录验证成功后跳转逻辑错误,当前返回的仍是登录页
  • 登录失败分支逻辑缺失,error变量未定义
    修正后的代码参考:
def Login(request):
    if request.method == 'GET':
        if request.user.is_authenticated:
            logout(request)
        return render(request,'login.html')
    elif request.method == 'POST':
        username=request.POST['username']
        password=request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            login(request, user)
            # 登录成功跳转到首页
            return redirect('home')
        else:
            # 登录失败返回错误提示
            error = {"msg":"用户名或密码错误"}
            return render(request,'login.html',context=error)

完成以上配置后,用户登录后刷新任意页面都会被自动登出,跳转回登录页。

内容的提问来源于stack exchange,提问作者jay kishan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:24:03