rest_framework基于generics.CreateAPIView创建用户

匿名 (未验证) 提交于 2019-12-02 23:42:01

最近在写新版的devops3.0,被generics.CreateAPIView创建用户密码序列化的问题折磨的欲仙欲死。反复看源码测试,得出下面的流程,这也是做generics.CreateAPIView太少的原因。以后一定要更加细心才是!留存本篇博文便于参考!

伪代码:

用户model:

需要导入from django.contrib.auth.models import AbstractUser

AbstractUser继承了AbstractBaseUser, PermissionsMixin两个类之前写第二版kkit的时候就是选择了直接继承AbstractBaseUser, PermissionsMixin。

AbstractUser封装了更多的属性可以供我们调用,如果你们觉得没用,那就还是继承上面那两个就行。

 1 class UserProfile(AbstractUser):  2   3     img = models.CharField(max_length=10, default='user.jpg')  4     phone = models.CharField(max_length=11, default='None')  5     full_name = models.CharField(max_length=11, default='你好')  6     expire = models.IntegerField(default=100)  7     groups = models.ManyToManyField(  8         Group,  9         verbose_name=_('groups'), 10         blank=True, 11         help_text=_( 12             'The groups this user belongs to. A user will get all permissions ' 13             'granted to each of their groups.' 14         ), 15         related_name="user_set", 16         related_query_name="user", 17     ) 18     info = models.CharField(default='', max_length=150) 19  20  21     class Meta: 22         permissions = ( 23             ('yo_list_user', u'罗列用户'), 24             ('yo_list_opsuser', u'罗列运维用户'), 25             ('yo_create_user', u'新增用户'), 26             ('yo_update_user', u'修改用户'), 27             ('yo_delete_user', u'删除用户'), 28             ('yo_list_pmngroup', u'罗列权限组'), 29             ('yo_create_pmngroup', u'新增权限组'), 30             ('yo_update_pmngroup', u'修改权限组'), 31             ('yo_delete_pmngroup', u'删除权限组'), 32             ('yo_list_permission', u'罗列所有权限') 33         ) 34  35  36     def get_group_name(self): 37         if self.is_superuser == 1: 38             return "超级管理员" 39         # 查看组内有多少条符合的权限 40         elif self.groups.count() == 0: 41             return "无权限" 42         else: 43             gourp_list = [] 44             groups = self.groups.all() 45             for group in groups: 46                 gourp_list.append(group.name) 47             if len(gourp_list) == 0: 48                 return '' 49             else: 50                 return "-".join(gourp_list) 51  52     @property 53     def is_expire(self): 54         return not connect.exists(self.username) 55  56     @is_expire.setter 57     def is_expire(self): 58         connect.set(self.username, self.expire or 1)

创建用户接口:

1 path(r'v1/user/create/', user.UserCreateAPI.as_view()),

创建用户函数:

1 class UserCreateAPI(generics.CreateAPIView): 2  3     module = models.UserProfile 4     serializer_class = serializers.UserSerializer 5     queryset = models.UserProfile.objects.all() 6     def create(self, request, *args, **kwargs): 7             response = super(UserCreateAPI, self).create(request, *args, **kwargs) 8             self.get_serializer() 9             return  response

序列化函数:

写之前我们先导入之前创建好的模型

 1 class UserSerializer(serializers.ModelSerializer):  2     group_name = serializers.StringRelatedField(source="get_group_name", read_only=True)  3     groups = serializers.PrimaryKeyRelatedField(required=False, many=True, queryset=Group.objects.all())  4     class Meta:  5         model = UserProfile  6         fields = (  7             'id', 'is_active', 'phone', 'username', 'full_name', 'group_name', 'groups', 'email',  8             'info', 'expire',  9         ) 10         read_only_fields = ( 11             'id', 12         ) 13     # 保存序列化密码并保存 14     def create(self, validated_data): 15         obj = super(UserSerializer, self).create(validated_data=validated_data) 16         obj.set_password(validated_data.get('password')) 17         obj.save() 18         return obj


波神与你同行哦,加油!!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!