Django处理匿名用户

时间:2019-02-02 11:33:37

标签: python django django-orm

我正在尝试对董事会进行匿名写操作。

匿名用户的信息(IP地址和昵称)必须存储在数据库中。

目前,我有一个User模型和一个Article模型,

class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(_('Username'), unique=True, null=True)

    etc...

class Article(models.Model):

    id = models.AutoField(primary_key=True)
    author = models.ForeignKey(User, verbose_name=_("Author"), on_delete=models.PROTECT, null=True, blank=True)

    etc....

我想到了几种实现匿名写功能的方法。

  1. 为每个匿名用户创建仅具有IP地址和昵称的User,然后为该用户设置外键。

    class User(AbstractBaseUser, PermissionsMixin):
        TYPE_FIXED_USER = 0
        TYPE_ANONYMOUS = 1
    
        TYPE_CHOICES = (
            (TYPE_FIXED_USER, 'Fixed User'),
            (TYPE_ANONYMOUS, 'Annonymous'),
        )
    
        user_type = models.IntegerField(_('User type'), choices=UserType.TYPE_CHOICES)
    

    这似乎是最简单的方法,但是我担心它会创建很多User并给数据库带来高负载。

  2. author_typeanon_author_ipanon_author_nick字段添加到Article

    class Article(models.Model):
        TYPE_FIXED_USER = 0
        TYPE_ANONYMOUS = 1
    
        TYPE_CHOICES = (
            (TYPE_FIXED_USER, 'Fixed User'),
            (TYPE_ANONYMOUS, 'Annonymous'),
        )
    
        author_type = models.IntegerField(_('Author type'), choices=UserType.TYPE_CHOICES)
    

    这似乎还可以,但是按昵称搜索文章会很困难。如果要搜索用户'user1234',则必须寻找Article.objects.filter(user__nickname__contains='user1234')Article.objects.filter(anon_author_nick__contains='user1234')并加入它们。

有没有更有效的方法?

2 个答案:

答案 0 :(得分:0)

第一种方法似乎比第二种方法好,不用担心数据库填充

基本上,如果要保存匿名用户,则已决定删除网站的“注册”部分,并且仍然保存了Users,因此,您必须像固定用户一样操作,并为该用户生成随机的Username或NickName没有密码

我建议您使用这种简单的方法,如果您想加快数据库速度,可以使用Redis

答案 1 :(得分:0)

对于您的特定示例,不必担心数据库中的用户数量,而应为每个人(无论是否匿名)提供自己的用户记录。

如果您确实希望保留1条记录,则软件包post_url = "http://localhost:6543/myservice" data = {"problem": {"capacity": 60, "weights": [10, 20, 33], "values": [10, 3, 30]}} data_json = json.dumps(data) res = requests.post(post_url, json={"text": data_json}, headers= {'Content-Type': 'application/json'}) print(res.text) print(res.headers) Output: {'Connection': 'close', 'Content-Length': '20'} Wrong capacity Value 将创建一个匿名用户(因为它需要一个实际的数据库用户行来进行配置),因此您可以在此处了解更多信息:{{3} }

请注意,Django具有类似匿名用户之类的东西,一个带有django-guardian的类似用户的对象。有时,当与匿名用户一起使用时,这会造成混乱。