python - 如何检查 django 员工用户首次登录管理面板?

标签 python django django-admin

我正在开发一个 django 项目,我正在使用默认的 auth 应用程序进行身份验证。
我知道用户模型中有一个 last_login 字段,用于存储用户上次登录时间。

当员工用户第一次登录管理面板时,我想检查 last_login 字段是否为 none 并将他重定向到更改密码页面。

我应该把这张支票放在哪里?


到目前为止我尝试了什么:

我尝试使用自定义登录表单并覆盖默认的 confirm_login_allowed 方法,但似乎我只能引发验证错误以阻止使用这些登录尝试。

我还尝试使用 django.contrib.auth.signals.user_logged_in 信号,但是当 last_loginNone 时,这也不允许我返回重定向响应

我想知道如何在用户通过身份验证后返回重定向响应。

最佳答案

使用 <a href="https://docs.djangoproject.com/en/dev/ref/contrib/admin/#customizing-the-adminsite-class" rel="noreferrer noopener nofollow">AdminSite</a> 自定义 Django 管理并使用 login_form 属性为管理员登录页面提供自定义登录表单。

管理员.py

class MyAdminSite(AdminSite):
    login_form = CustomAdminLoginForm

admin_site = MyAdminSite(name='myadmin')
admin_site.register(User)
admin_site.register(Group

网址.py

当覆盖 Admin 时,我们必须摆脱 Django 默认的 admin

from app.admin import admin_site

url(r'^admin/', admin_site.urls)

表单.py

AuthenticationFormconfirm_login_allowed方法使用它来授予登录或不登录的权限。

class CustomAdminLoginForm(AuthenticationForm):
    def confirm_login_allowed(self, user):
        if user.last_login:
            raise ValidationError(mark_safe('Hey first time user please reset your password here... <a href="/test">test</a>'), code='inactive')

注意:对于这种方法,您必须考虑很多边缘情况。

  1. 如果用户没有在第一次设置密码怎么办?您将如何处理第二次尝试……?这次 last_long 不是 None。虽然date_joined来救援。 last_login == date_joined
  2. 但是如果用户第一天没有设置密码,第二天就来了怎么办?

编辑:

您可以使用信号来检查登录用户并应用 config_login_allowed逻辑在这里...?

from django.contrib.auth.signals import user_logged_in


def change_password_first_time(sender, user, request, **kwargs):
    # Your business logic here...

user_logged_in.connect(change_password_first_time)

关于python - 如何检查 django 员工用户首次登录管理面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47826908/

相关文章:

python - 如何在 python/pandas 中解压缩/解聚合分层数据?

python - 使用 timedelta 索引从 pandas 数据帧进行绘图

python - 我可以使用 django-storages 和 boto 将 ImageField 直接从 Django 管理上传到 S3 吗?

html - 将 Django 模板与 Div 导航栏链接起来

python - DRF的嵌套关系: serializer output OrderedDict with Tuple

python - 如何从 django 管理表单提交访问 request.FILES?

django - 将 "View on Site"链接添加到 Django 管理 list_display

python - 将新行添加到输出文件python

python - 删除特殊目录 Python (Windows) 的内容

Django:自定义管理站点类的管理注册装饰器