【问题标题】:request.user is giving me only email address but I want all information of user using email primary key asrequest.user 只给我电子邮件地址,但我希望使用电子邮件主键的用户的所有信息作为
【发布时间】:2018-09-06 12:14:06
【问题描述】:

每当经过身份验证的用户发布在我的设备中时,我都必须检查设备是否与该用户关联?为此,我使用 request.user 获得了所有信息,但我只是获得了一个电子邮件地址,有什么解决方案吗?

我的自定义用户模型

class User(AbstractUser):
"""User model."""

  username = None
  email = models.EmailField(_('email address'), unique=True)
  mobile_token = models.CharField(max_length=20,blank=True,null=True)

  USERNAME_FIELD = 'email'
  REQUIRED_FIELDS = []



  objects = UserManager_1()

我的设备型号

  class Device(models.Model):
# user_id = models.CharField(max_length=20,primary)
    device_id = models.CharField(max_length=20 ,primary_key=True )

    email = models.ForeignKey(User,on_delete=models.CASCADE,blank = True,null=True)

    date_added = models.DateField(default=timezone.now)



   def __str__(self):
     return self.device_id

我的 serailzers

class UserSerializer(serializers.ModelSerializer):
# my_field = serializers.SerializerMethodField()

# def get_field_name(self, obj):
#     return "name"

   class Meta:
     model = models.User
     # key= {'status':'success'}

      fields = ('first_name', 'email','last_name','mobile_token',)
class DeviceSerializer(serializers.ModelSerializer):
    # locations = serializers.PrimaryKeyRelatedField(many=True, 
      queryset=models.User.objects.all())

      class Meta:
        model = models.Device

        fields = ('date_added','email','device_id',)

以及设备视图

class DeviceView(viewsets.ViewSet):


   queryset = models.Device.objects.all()


   serializer_class = serializers.DeviceSerializer

   def list(self,request):
    queryset = models.Device.objects.all()
    serializer = serializers.DeviceSerializer(queryset, many=True)
    final_data = serializer.data


    import json


    api={}
    api['data'] = final_data
    api['message'] = "Device ids"
    # Device_name_api = final_data[]
    # validators = serializer.get_validators()
    api['status'] = 1
    # print(request.data)
    return Response(api)
   def create(self, request, *args, **kwargs):
    # response = super().post(request, *args, **kwargs)
    # print(self.response)
    serializer = self.serializer_class(data=request.data)

    print(request.user)
    # user_data=models.User.objects.all()
    # print(user_data)
    # print(request.META['HTTP_X_MYHEADER'])
    # print(request.data['device_id'])

    if serializer.is_valid():

        return Response({
                'data':serializer.data,
                'status': 1,
                'message': 'Succuess'
            }, status=status.HTTP_400_BAD_REQUEST)

【问题讨论】:

  • 您发送到特定视图的所有数据是什么?

标签: python django rest django-rest-framework django-rest-auth


【解决方案1】:

尝试使用depth选项:

class DeviceSerializer(serializers.ModelSerializer):

      class Meta:
        model = models.Device

        fields = ('date_added','email','device_id',)
        depth = 1

【讨论】:

  • 谢谢,现在我在 django-rest-auth 中有一个简单的问题,是否有任何方法可以检查电子邮件是否经过验证,如果电子邮件未验证但登录凭据正确,那么我要发送消息,请先验证您的邮件
  • @Kashyap 您可以为此编写自定义身份验证后端:docs.djangoproject.com/en/2.1/topics/auth/customizing/… 或者简单地添加到模型布尔字段 email_verified 并在视图级别检查它,如下所示:if user.email_verified
  • 我已经有 email_verified 但它在另一个表(电子邮件地址表)上,不在用户表中
  • @Kashyap 您需要提供额外的信息,例如电子邮件地址模型。我想最好在不同的问题上这样做。
猜你喜欢
  • 2011-04-17
  • 2020-08-12
  • 2017-11-03
  • 2014-07-20
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多