Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django rest_框架中登录后返回用户详细信息作为响应_Django_Django Models_Django Rest Framework_Django Forms_Django Views - Fatal编程技术网

如何在django rest_框架中登录后返回用户详细信息作为响应

如何在django rest_框架中登录后返回用户详细信息作为响应,django,django-models,django-rest-framework,django-forms,django-views,Django,Django Models,Django Rest Framework,Django Forms,Django Views,嗨,我是Django的初学者,在这里我希望在用户使用api登录后回复用户电子邮件和姓名。提前感谢你的帮助 def post(self, request, *args, **kwargs): response = super(CreateTokenView, self).post(request, *args, **kwargs) token = Token.objects.get(key=response.data['token']) user_email = reque

嗨,我是Django的初学者,在这里我希望在用户使用api登录后回复用户电子邮件和姓名。提前感谢你的帮助

def post(self, request, *args, **kwargs):
    response = super(CreateTokenView, self).post(request, *args, **kwargs)
    token = Token.objects.get(key=response.data['token'])
    user_email = request.data.get('email', None)
    user = User.objects.get(email=user_email)
    return Response({'name': user.name, 'email': user.email, 'token': token.key})
models.py 我想要用户电子邮件和用户名的回应,只有得到认证令牌的回应

class UserManager(BaseUserManager):

    def create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError('Users must have an email address')

        if not password:
            raise ValueError('Users must have a password')

        user = self.model(email=self.normalize_email(email), **extra_fields)
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, email, password):
        user = self.create_user(email,password)
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)

        return user

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
class UserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(
            required=True,
            validators=[UniqueValidator(queryset=User.objects.all())]
            )
    class Meta:
        model = get_user_model()
        fields = ('email', 'password', 'name')
        extra_kwargs = {'password': {'write_only': True, 'min_length': 6}}

        def create(self, validated_data):
            user = User.objects.create_user('name',validated_data['email'],
                validated_data['password'],)
            return user

class AuthTokenSerializer(serializers.Serializer):

    email = serializers.CharField()
    password = serializers.CharField(
        style = {'input_type':'password'},
        trim_whitespace = False
    )

    def validate(self, attrs):

        email = attrs.get('email')
        password = attrs.get('password')

        user = authenticate(
            request = self.context.get('request'),
            username = email,
            password = password
        )

        if not user:

            msg = _('Unable to authenticate with provided crenditial')
            raise serializers.ValidationError(msg, code = 'authorization')

        attrs['user'] = user

        return attrs
path('api/login/',views.CreateTokenView.as_view(),name='token'),
def post(self, request, *args, **kwargs):
    response = super(CreateTokenView, self).post(request, *args, **kwargs)
    token = Token.objects.get(key=response.data['token'])
    user_email = request.data.get('email', None)
    user = User.objects.get(email=user_email)
    return Response({'name': user.name, 'email': user.email, 'token': token.key})
序列化程序.py 我想要用户电子邮件和用户名的回应,只有得到认证令牌的回应

class UserManager(BaseUserManager):

    def create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError('Users must have an email address')

        if not password:
            raise ValueError('Users must have a password')

        user = self.model(email=self.normalize_email(email), **extra_fields)
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, email, password):
        user = self.create_user(email,password)
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)

        return user

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
class UserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(
            required=True,
            validators=[UniqueValidator(queryset=User.objects.all())]
            )
    class Meta:
        model = get_user_model()
        fields = ('email', 'password', 'name')
        extra_kwargs = {'password': {'write_only': True, 'min_length': 6}}

        def create(self, validated_data):
            user = User.objects.create_user('name',validated_data['email'],
                validated_data['password'],)
            return user

class AuthTokenSerializer(serializers.Serializer):

    email = serializers.CharField()
    password = serializers.CharField(
        style = {'input_type':'password'},
        trim_whitespace = False
    )

    def validate(self, attrs):

        email = attrs.get('email')
        password = attrs.get('password')

        user = authenticate(
            request = self.context.get('request'),
            username = email,
            password = password
        )

        if not user:

            msg = _('Unable to authenticate with provided crenditial')
            raise serializers.ValidationError(msg, code = 'authorization')

        attrs['user'] = user

        return attrs
path('api/login/',views.CreateTokenView.as_view(),name='token'),
def post(self, request, *args, **kwargs):
    response = super(CreateTokenView, self).post(request, *args, **kwargs)
    token = Token.objects.get(key=response.data['token'])
    user_email = request.data.get('email', None)
    user = User.objects.get(email=user_email)
    return Response({'name': user.name, 'email': user.email, 'token': token.key})
url.py 我想要用户电子邮件和用户名的回应,只有得到认证令牌的回应

class UserManager(BaseUserManager):

    def create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError('Users must have an email address')

        if not password:
            raise ValueError('Users must have a password')

        user = self.model(email=self.normalize_email(email), **extra_fields)
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, email, password):
        user = self.create_user(email,password)
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)

        return user

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
class UserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(
            required=True,
            validators=[UniqueValidator(queryset=User.objects.all())]
            )
    class Meta:
        model = get_user_model()
        fields = ('email', 'password', 'name')
        extra_kwargs = {'password': {'write_only': True, 'min_length': 6}}

        def create(self, validated_data):
            user = User.objects.create_user('name',validated_data['email'],
                validated_data['password'],)
            return user

class AuthTokenSerializer(serializers.Serializer):

    email = serializers.CharField()
    password = serializers.CharField(
        style = {'input_type':'password'},
        trim_whitespace = False
    )

    def validate(self, attrs):

        email = attrs.get('email')
        password = attrs.get('password')

        user = authenticate(
            request = self.context.get('request'),
            username = email,
            password = password
        )

        if not user:

            msg = _('Unable to authenticate with provided crenditial')
            raise serializers.ValidationError(msg, code = 'authorization')

        attrs['user'] = user

        return attrs
path('api/login/',views.CreateTokenView.as_view(),name='token'),
def post(self, request, *args, **kwargs):
    response = super(CreateTokenView, self).post(request, *args, **kwargs)
    token = Token.objects.get(key=response.data['token'])
    user_email = request.data.get('email', None)
    user = User.objects.get(email=user_email)
    return Response({'name': user.name, 'email': user.email, 'token': token.key})
查看创建视图的文件,我现在不知道如何从身份验证令牌返回用户。我想要用户电子邮件和用户名的回应,只有得到认证令牌的回应 views.py

def post(self, request, *args, **kwargs):
    response = super(CreateTokenView, self).post(request, *args, **kwargs)
    token = Token.objects.get(key=response.data['token'])
    user_email = request.data.get('email', None)
    user = User.objects.get(email=user_email)
    return Response({'name': user.name, 'email': user.email, 'token': token.key})

我猜您可以做的是,一旦您收到用户的有效令牌,您就可以使用用户的电子邮件从请求数据中查询用户

def post(self, request, *args, **kwargs):
    response = super(CreateTokenView, self).post(request, *args, **kwargs)
    token = Token.objects.get(key=response.data['token'])
    user_email = request.data.get('email', None)
    user = User.objects.get(email=user_email)
    return Response({'name': user.name, 'email': user.email, 'token': token.key})
希望这有帮助

def post(self, request, *args, **kwargs):
    response = super(CreateTokenView, self).post(request, *args, **kwargs)
    token = Token.objects.get(key=response.data['token'])
    user_email = request.data.get('email', None)
    user = User.objects.get(email=user_email)
    return Response({'name': user.name, 'email': user.email, 'token': token.key})