如何在用户导航期间在 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 中保存自定义用户模型的主要内容,如果未能解决你的问题,请参考以下文章