Замена маркера значением

я пытаюсь заменить токен, проверяя, действителен ли токен, а затем извлекая детали, используя этот токен .

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}

Выше приведен рабочий пример, мяч на вашей стороне, чтобы облегчить ваш код.

Вернуться на верх