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

在Django项目中重写LoginView添加记住我功能及属性咨询

在Django Auth中为LoginView添加「记住我」功能

可以通过form_class属性结合自定义视图的方式实现需求,不需要完全重写LoginView的核心逻辑,步骤如下:

1. 自定义登录表单

在你的forms.py中创建继承自AuthenticationForm的自定义表单,添加「记住我」复选框字段:

from django.contrib.auth.forms import AuthenticationForm
from django import forms

class LoginForm(AuthenticationForm):
    remember_me = forms.BooleanField(
        required=False,
        initial=True,
        label="记住我"
    )

2. 自定义LoginView处理「记住我」逻辑

在views.py中创建继承自auth_views.LoginView的自定义视图,重写form_valid方法根据勾选状态设置会话有效期:

from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy
from .forms import LoginForm

class CustomLoginView(LoginView):
    form_class = LoginForm
    template_name = "account/login.html"  # 指定自定义登录模板
    success_url = reverse_lazy("account:dashboard")  # 登录成功后跳转地址

    def form_valid(self, form):
        # 获取表单中「记住我」的勾选状态
        remember_me = form.cleaned_data.get("remember_me")
        # 先执行父类的登录逻辑
        response = super().form_valid(form)
        
        # 根据勾选状态设置会话有效期
        if remember_me:
            # 勾选则设置会话有效期为14天(与Django默认SESSION_COOKIE_AGE一致)
            self.request.session.set_expiry(60 * 60 * 24 * 14)
        else:
            # 不勾选则会话随浏览器关闭而过期
            self.request.session.set_expiry(0)
        
        return response

3. 更新urls.py中的登录路由

将原来的auth_views.LoginView.as_view()替换为自定义视图:

# 替换前的旧代码
# path('login/', auth_views.LoginView.as_view(), name='login'),

# 替换后的新代码
path('login/', views.CustomLoginView.as_view(), name='login'),

4. 自定义登录模板

在templates/account/login.html中渲染表单,确保「记住我」字段正常显示:

{% extends "base.html" %}

{% block content %}
<h2>登录</h2>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">登录</button>
</form>
{% endblock %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:50:47