我正在尝试对董事会进行匿名写操作。
匿名用户的信息(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....
我想到了几种实现匿名写功能的方法。
为每个匿名用户创建仅具有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
并给数据库带来高负载。
将author_type
,anon_author_ip
,anon_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')
并加入它们。
有没有更有效的方法?
答案 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
的类似用户的对象。有时,当与匿名用户一起使用时,这会造成混乱。