问题描述
示例详细说明我的问题->我是该网站的用户,我想创建一个组。在创建群组时,网站向我询问 group_name,group_description,group_password(因为我不希望该群组公开,如果要加入该群组的人应该知道密码)。现在,我已将名称和密码提供给我的朋友,他们可以通过验证并使用该组的密码来加入该组,从而成功加入。
问题,我正面临->我在 models.py 中创建了密码字段。但是密码会以平面文本的形式保存在数据库中,但不会像散列的django密码那样保存。其次,我希望加入的用户使用密码进行身份验证才能加入群组。
models.py
class Group(models.Model):
admin = models.ForeignKey(to=Profile,related_name="admin",on_delete=models.CASCADE)
name = models.CharField(max_length=200,unique=True)
password = models.CharField(max_length=200,default='thinkgroupy')
slug = models.SlugField(allow_unicode=True,unique=True)
group_pic = models.ImageField(upload_to="users/group_images/%y/%m/%d",null=True)
about = models.CharField(max_length=255,null=True,blank=True)
about_html = models.TextField(editable=False,default='',blank=True)
created_at = models.DateTimeField(auto_Now=True)
members = models.ManyToManyField(User,through="GroupMember")
def __str__(self):
return "%s" % self.name
def save(self,*args,**kwargs):
self.slug = slugify(self.name)
self.about_html = misaka.html(self.about)
super().save(*args,**kwargs)
def get_absolute_url(self):
return reverse("groups:single",kwargs={"slug": self.slug})
class Meta:
ordering = ["name"]
class GroupMember(models.Model):
group = models.ForeignKey(Group,related_name="memberships")
user = models.ForeignKey(User,related_name='user_groups')
def __str__(self):
return self.user.username
class Meta:
unique_together = ("group","user")
views.py
class CreateGroup(LoginrequiredMixin,generic.CreateView):
fields = ("name","description","password")
model = Group
class JoinGroup(LoginrequiredMixin,generic.RedirectView):
def get_redirect_url(self,**kwargs):
return reverse("groups:single",kwargs={"slug": self.kwargs.get("slug")})
def get(self,request,**kwargs):
group = get_object_or_404(Group,slug=self.kwargs.get("slug"))
try:
GroupMember.objects.create(user=self.request.user,group=group)
except IntegrityError:
messages.warning(self.request,("Warning,already a member of {}".format(group.name)))
else:
messages.success(self.request,"You are Now a member of the {} group.".format(group.name))
return super().get(request,**kwargs)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)