[英]How to access requested user object from jwt token in django serializers?
After user-registration , user wants to post data into Client model ( OnetoOne relationship with User model ).
用户注册后,用户希望将数据发布到客户端 model (与用户model的一对一关系)。 So, I want to access the requested user object inside the serializer-class to create a new row in Client model associated with the requested user.
因此,我想在序列化程序类中访问请求的用户 object以在与请求的用户关联的客户端 model 中创建一个新行。
models.py模型.py
class Client(models.Model):
user= models.OneToOneField(User, on_delete=models.CASCADE, null=False, blank=False)
sex = models.CharField(max_length = 6, blank=False, null=False)
location = models.CharField(max_length = 30, null = False, blank = False)
views.py视图.py
class ClientRegister(GenericAPIView):
def post(self, request):
user = request.user
serializer = ClientSerializer(data= request.data)
if serializer.is_valid():
serializer.save()
return Response(status= status.HTTP_201_CREATED)
else:
return Response(data= 'Invalid Form', status= status.HTTP_400_BAD_REQUEST)
serializers.py序列化程序.py
class ClientSerializer(serializers.ModelSerializer):
class Meta:
model = Client
fields = ['sex', 'location']
def create(self, validated_data):
sex = validated_data.get('sex')
location = validated_data.get('location')
user = #------ Want requested user object here ------#
if user.is_client:
client = Client(user=user, sex=sex, location=location)
client.save()
return client
I have manually added user oject into the data in
serializer = CientSerializer(data=request.data)
.我已手动将用户 oject 添加到
serializer = CientSerializer(data=request.data)
中的数据中。 But, It didn't work.但是,它没有用。 Please, tell me how to pass it from
views.py
or how to access it inserializers.py
.请告诉我如何从
views.py
传递它或如何在serializers.py
中访问它。
Try to pass the user with sex and location in views尝试在视图中传递具有性别和位置的用户
class ClientRegister(GenericAPIView):
def post(self, request):
data = request.data
user = request.user
#add user in key
data['user']=user
serializer = ClientSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(status= status.HTTP_201_CREATED)
else:
return Response(data= 'Invalid Form', status= status.HTTP_400_BAD_REQUEST)
serializer:序列化器:
class ClientSerializer(serializers.ModelSerializer):
class Meta:
model = Client
fields = '__all__'
Pass user when you do serializer.save in post method of views like当您在视图的 post 方法中执行 serializer.save 时传递用户,例如
def post(self, request):
u = request.user
serializer = ClientSerializer(data= request.data)
if serializer.is_valid():
serializer.save(user=u)
return Response(status= status.HTTP_201_CREATED)
else:
return Response(data= 'Invalid Form', status= status.HTTP_400_BAD_REQUEST)
Or you can read about passing context from views to serializers and in this context you can pass your required data like -或者您可以阅读有关将上下文从视图传递到序列化程序的信息,在这种情况下,您可以传递所需的数据,例如 -
serializer = ClientSerializer(context = {'request':request}, data=request.data)
then you can have your request object in your serializers and you can get request.user or directly pass it in the context.然后你可以在你的序列化器中拥有你的请求 object 并且你可以得到 request.user 或者直接在上下文中传递它。
views.py
视图.py
class ClientRegister(GenericAPIView):
def post(self, request):
user = request.user
serializer = ClientSerializer(context={'user':user}, data= request.data)
if serializer.is_valid():
serializer.save()
return Response(status= status.HTTP_201_CREATED)
else:
return Response(data= 'Invalid Form', status= status.HTTP_400_BAD_REQUEST)
serializers.py
序列化程序.py
class ClientSerializer(serializers.ModelSerializer):
class Meta:
model = Client
fields = ['sex', 'location']
def create(self, validated_data):
sex = validated_data.get('sex')
location = validated_data.get('location')
user = self.context.get('user')
if user.is_client:
client = Client(user=user, sex=sex, location=location)
client.save()
return client
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.