【问题标题】:OAuth2 custom basic user modelOAuth2 自定义基本用户模型
【发布时间】:2016-07-14 21:56:20
【问题描述】:

我正在使用 rest_framework_social_oauth2

我想对 oauth.User 进行最小的更改。通过 AbstractUser 搜索以交换 AbstractBaseUser 并添加 PermissionMixin。但没有任何效果。

我的应用> models.py

 from django.db import models
 from django.contrib.auth.models import AbstractUser, PermissionsMixin, UserManager

 class MyUser(AbstractUser, PermissionsMixin):
      country_code = models.CharField(max_length=10, blank=True)
      objects = UserManager()

我的settings.py

AUTH_USER_MODEL ='userTest.MyUser'

如教程所示,makemigrations 和 migrate 没有。

错误:

get 中的文件“/Users/luisdemarchi/Git/django/.env/lib/python3.5/site-packages/django/db/models/manager.py”,第 277 行 self.model._meta.swapped,

AttributeError: Manager 不可用; 'auth.User' 已替换为 'userTest.MyUser'

【问题讨论】:

    标签: django python-3.x django-rest-framework django-socialauth


    【解决方案1】:

    我们做到了。我将在这里为那些想要改进 OAuth2.user 的人提供一个完整的示例。在我们的例子中,我们自动创建了用户名。

    PS:需要创建类AuthManager()

    userTest(myApp) > models.py

    import uuid as uuid
    from django.contrib.auth.models import BaseUserManager, AbstractUser
    from django.db import models
    
    from rest_framework import exceptions
    
    class AuthManager(BaseUserManager):
        def create_user(self, email, username=None, password=None):
            if not email:
                raise exceptions.AuthenticationFailed('Users must have an username')
    
            username = email.split("@")[0]
    
            user = self.model(username=username)
            user.set_password(password)
            user.save(using=self._db)
            return user
    
        def create_superuser(self, email, password, username=None):
            user = self.create_user(email=email, password=password)
            user.is_admin = True
            user.save(using=self._db)
            return user
    
    class User(AbstractUser):
        uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        is_test = models.BooleanField(default=True)
        is_admin = models.BooleanField(default=False)
    
        objects = AuthManager()
    

    userTest(myApp) > views.py

    from rest_framework import viewsets
    
    from apps.userTest.models import User
    from apps.userTest.serializers import UserSerializer
    
    class UserViewSet(viewsets.ReadOnlyModelViewSet):
        queryset = User.objects.all()
        serializer_class = UserSerializer
    

    【讨论】:

    • 我收到一个错误,即未找到 apps.userTest。你能解释一下吗?
    猜你喜欢
    • 2014-10-03
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2016-04-23
    • 2013-04-29
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多