Замена маркера значением
я пытаюсь заменить токен, проверяя, действителен ли токен, а затем извлекая детали, используя этот токен .
eg: {"jwt": "asdahasjkaiubdkjsdjasdajkdjakdon", "hostel": "BCJ bhawan", "room_no": "300"......}
что-то вроде этого я получу
как я могу заменить эту часть токена на значение в сериализаторе1
но я не могу объединить их вместе
вот мой views.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']
Во-первых, в ваших вопросах есть две проблемы.
- Во-первых, вы хотите заменить токен на значение.
- Во-вторых, вы хотите объединить сериализатор вместе.
Просматривая ваш код, мы предполагаем, что вы используете систему jwt auth из DRF.
Поэтому вы можете просто использовать что-то следующее для получения пользователя и убедиться, что он аутентифицирован :
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 auth без суеты.
Что касается вашего вопроса о слиянии, это неправильная идея - принудительно объединять вещи разной природы таким образом.
Вам придется выполнить сериализацию данных :
...
serializer1 = UserSerializers(user)
serializer1_data = UserSerializers(user).data
...
serializer2.is_valid(raise_exception=True)
merged_data = {**serializer1_data, **serializer2.data}
Выше приведен рабочий пример, мяч на вашей стороне, чтобы облегчить ваш код.