我试图通过检查令牌是否有效,然后使用该令牌取出详细信息来替换令牌。
如:{"jwt"asdahasjkaiubdkjsdjasdajkdjakdon"hostel":"BCJ bhawan","room_no":"300" ;......}
像这样的东西我会收到
如何将令牌部分替换为serializer1
中的值但是我无法将它们合并在一起
这是我的观点。py
class leaveview(APIView):
def post(self,request):
token = request.data['jwt']
if not token:
raise AuthenticationFailed('Unauthenticated')
try:
payload = jwt.decode(token,'secret',algorithms=['HS256'])
except jwt.ExpiredSignatureError:
raise AuthenticationFailed('Unauthenticated')
user=User.objects.filter(id=payload['id']).first()
serializer1=UserSerializers(user)
serializer2 = leaveSerializers(data=request.data)
serializer2.is_valid(raise_exception=True)
serializer=serializer1+serializer2
serializer.save()
return Response(serializer.data)
models.py
class leave(models.Model):
name=models.CharField(max_length=100)
father_name=models.CharField(max_length=100,null=True)
branch=models.CharField(max_length=40,null=True)
coer_id=models.CharField(max_length=12,unique=True,null=True)
hostel = models.ForeignKey(hostel_manager,on_delete=models.CASCADE)
room_no = models.CharField(max_length=10)
where_to = models.CharField(max_length=100)
reason = models.CharField(max_length=300)
start_date = models.CharField(max_length = 100,null=True)
end_date = models.CharField(max_length=100,null=True)
phone_regex=RegexValidator(regex=r'^+?1?d{9,15}$', message="Phone number must be entered in the format: '+9999999999'. Up to 12 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=17)
serializer.py
class leaveSerializers(serializers.ModelSerializer):
class Meta:
model = leave
fields = ['id','hostel','room_no','where_to','reason','time_period','phone_number','name','father_name','branch','coer_id']
首先有两件事,你的问题有两个问题。
- 首先你想用一个值替换一个令牌。
- 其次,你想合并序列化器。
在查看您的代码时,我们假设您正在使用来自DRF的jwt认证系统。
因此,您可以简单地使用以下内容来检索用户并确保用户已经过身份验证:
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
...
class leaveview(APIView):
@permission_classes([IsAuthenticated])
def post(self,request):
...
user = request.user
...
然后让DRF处理jwt而不麻烦。
对于你的合并问题,强行把不同性质的东西合并在一起是不对的。
你必须让你的数据序列化:
...
serializer1 = UserSerializers(user)
serializer1_data = UserSerializers(user).data
...
serializer2.is_valid(raise_exception=True)
merged_data = {**serializer1_data, **serializer2.data}
return Response(data=merged_data)
上面应该是一个工作的例子,球在你这边来简化你的代码。