如何在用户导航期间在 Django 中保存自定义用户模型

Posted

技术标签:

【中文标题】如何在用户导航期间在 Django 中保存自定义用户模型【英文标题】:How to save custom User model in Django during user's navigation 【发布时间】:2018-08-17 06:57:08 【问题描述】:

大家好,我在 Django 2.0 中有一个自定义用户模型,其中包含各种用户数据。

class User(models.Model):
    username = = models.CharField(max_length=30)
    _isLogged = False
    # ... other custom data

一旦用户在登录页面中登录 (_isLogged = True)~,我如何保存此对象,以便在另一个页面(例如主页)中验证同一用户是否已经登录?

注意我试图将所有对象存储在会话变量中,但它不可序列化。

非常感谢。

【问题讨论】:

【参考方案1】:

您可以通过调用is_authenticated 函数来检查用户是否登录:

if request.user.is_authenticated():
    # something

这已经在类似的帖子中有很好的描述:How to check if a user is logged in (how to properly use user.is_authenticated)?

不需要任何特殊字段(如_isLogged),如果 1)您使用默认 Django 用户,2)您扩展默认用户模型或 3)您正确配置了自己的型号。

详情请咨询documentation。

编辑:“我应该如何“正确”配置我自己的模型?”

这在下面的article 中有很好的描述。简而言之:

    您声明您的 User 模型继承了 AbstractUser 类:

    from django.contrib.auth.models import AbstractUser
    
    class User(AbstractUser):
        pass
    

    您可以通过在 Django 设置中设置以下值来覆盖默认用户模型:

    AUTH_USER_MODEL = 'myapp.MyUser'
    

【讨论】:

我会选择选项 3) 但你能解释一下我应该如何“正确”配置我自己的模型吗??? 谢谢,但是 Django 的方式来做到这一点是相当模糊的......例如在文档中我找不到如何定义我的 is_authenticated() 方法。我仍然更喜欢使用会话来做我的自定义模型并检查数据,与 Django 用户模型分开。 定义是什么意思? is_authenticated 是默认方法,您可以直接使用它或使用 Python 覆盖它。 用户如何获得“认证”?在检查用户名和密码之前,我有一个特殊的测试要做。

以上是关于如何在用户导航期间在 Django 中保存自定义用户模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DRF + django-rest-auth 中使用自定义用户模型保存注册时的额外字段

小程序自定义底部导航缓存

Django:如何在管理表单中获取当前用户?

如何在 Django 会话模型中设置自定义字段?

django 在模型自定义保存中访问上传的文件,最佳实践?

Django:使用自定义保存方法更新表单中的对象