首页 > 解决方案 > Django AUTHENTICATION AND AUTHORIZATION 组和权限想要创建经过验证的用户

问题描述

嗨 Djangonauts,我是 Django 新手,请原谅逻辑或代码中的任何愚蠢错误。

简介: 我正在构建一个网络应用程序,成员可以在其中撰写有关某个主题的帖子并提供有关该主题的课程。示例 会员可以写一篇关于骑自行车骑自行车的博客并提供相关课程。

我想要什么: 我希望想要提供课程的成员得到验证。示例:会员必须填写一份表格,其中包含他们的详细信息,例如……姓名、地址和带照片的身份证件。另外支付 9.99 美元的费用以进行验证。在管理员(在这种情况下是我)检查一切是否良好后,我会批准他们。然后他们将成为“认证会员”并能够提供课程

到目前为止我所拥有的:现在会员可以提供课程,因为没有经过验证的条款

class Event(models.Model):
    user = models.ForeignKey(User, related_name='seller')
    post = models.ForeignKey(Post, related_name='course')
    price = models.DecimalField(max_digits=6, decimal_places=2)
    stock = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(35)])
    date = models.DateField()
    time_from = models.TimeField()
    time_to = models.TimeField()
    event_types = (
        ('1', 'Webinar'),
        ('2', 'Actual Meet'),

    )
    event_choice = models.CharField(max_length=1, choices=event_types)

    def get_absolute_url(self):
        return reverse('posts:single', kwargs={'username': self.user.username,
                                               'slug': self.post.slug})
    def __str__(self):
        return 'Meet for ' + self.post.title

我打算怎么做:我打算在 Django 的管理员 AUTHENTICATION AND AUTHORIZATION 中添加一个组

Home › Authentication and Authorization › Groups › Add group
Name: Verified

Permissions: Chosen permissions 
event| event| Can add event
event| event| Can change event
event| event| Can delete event 

现在我从这里做什么?:到目前为止我做的事情是否正确,我如何从这里得到它。我是否创建一个名为verified并添加 forms.py 的模型来验证成员。权限如何出现在图片中。

我的猴子补丁(对于@Ojas Kale,不是问题的一部分)

class Contact(models.Model):
    user_from = models.ForeignKey(User, related_name='supporter')
    user_to = models.ForeignKey(User, related_name='leader')

    def __str__(self):
        return '{} follows {}'.format(self.user_from, self.user_to)


User.add_to_class('following',
                  models.ManyToManyField('self', through=Contact, related_name='followers', symmetrical=False))

标签: djangodjango-modelsdjango-formsdjango-templatesdjango-admin-tools

解决方案


一种方法是在用户中添加一个 is_verified 列。有多种方法可以做到这一点。但是从 abstractUser 扩展可能是最直接和最适合您的情况,因为类django.contrib.auth.models.AbstractUser提供了默认 User 作为抽象模型的完整实现。

在你的 app_name.models.py 中创建这样的用户类。

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    is_verified = models.BooleanField(default=False)

在你的设置 ps.py

AUTH_USER_MODEL = 'app_name.User'

注意app_name是如何使用的。

现在,您也可以添加任意数量的属性。

默认情况下 is_verified 设置为 False,一旦管理员批准(验证)用户将其更改为 True。

希望这可以帮助。


推荐阅读