2016-04-18 2 views
0

РедактироватьДжанго рамочные остальные аргументы URL с патч не работает

Я подозреваю, что вся проблема с моим UpdateApiView это с URL. Независимо от того, как я могу изменить его, не вернет 404.

url(r'verify-phone/(?P<phone_id>^\d+)$', view.VerifyPhone.as_view(), name='verify-phone'), 

возвращает

{ 
    "detail": "Not found." 
} 


[18/Apr/2016 01:39:02] "PATCH /api/verify-phone/phone_id=00980 HTTP/1.1" 404 4941 

Почему?

views.py

class VerifyPhone(generics.UpdateAPIView): 
    permission_classes = (AllowAny,) 
    serializer_class = serializers.VerifyPhoneSerializer 
    allowed_methods = ['PATCH'] 
    lookup_field = 'phone_id' 

    def get_queryset(self): 
     phone_id = self.request.query_params.get('phone_id', None) 
     queryset = User.objects.filter(phone_id=phone_id) 
     return queryset 

def update(self, request, *args, **kwargs): 
    print('inside update') 
    print(request.data) 
    partial = kwargs.pop('partial', False) 
    instance = self.get_object() 
    print(instance) 
    serializer = self.get_serializer(instance, data=request.data, partial=partial) 
    print(serializer) 
    serializer.is_valid(raise_exception=True) 
    self.perform_update(serializer) 
    print('done perform update') 
    return Response(serializer.data) 

serializers.py

class VerifyPhoneSerializer(serializers.ModelSerializer): 
    regex = r'\d+' 
    verification_code = serializers.RegexField(regex, max_length=7, min_length=7, allow_blank=False) 
    phone_id = serializers.HyperlinkedRelatedField(view_name='verify-phone', lookup_field='phone_id', read_only=True) 

    class Meta: 
     model = User 
     fields = ('verification_code', 'phone_id') 

    def validate(self, data): 
     verification = api.tokens.verify(data['phone_id'], data['verification_code']) 

     if verification.response.status_code != 200: 
      raise serializers.ValidationError("Invalid verification code.") 

     return data 

def update(self, instance, validated_data): 
    instance.phone_number_validated = True 
    instance.save() 
    return instance 

Второго вопрос: Правильно ли это, чтобы получить phone_id от взглядов?

phone_id = serializers.HyperlinkedRelatedField(view_name='verify-phone', lookup_field='phone_id', read_only=True) 
+0

я просто удалил весь взгляд в этом вопросе. Можете ли вы взглянуть на историю? Причина, по которой я удалил весь код, состоит в том, что это не нужно. Но добавлю, если вы так думаете. – momokjaaaaa

+0

и почему вы проголосовали за этот вопрос? – momokjaaaaa

ответ

1

Глядя на ваш апи URL четкости, я думаю, вы должны позвонить:

/api/verify-phone/00980 

вместо

/api/verify-phone/phone_id=00980 

Я также думаю, что что-то не так с URL (the^before \ d):

url(r'verify-phone/(?P<phone_id>^\d+)$', view.VerifyPhone.as_view(), name='verify-phone') 

должен быть

url(r'verify-phone/(?P<phone_id>\d+)$', view.VerifyPhone.as_view(), name='verify-phone') 

или

url(r'verify-phone/(?P<phone_id>\d{5})$', view.VerifyPhone.as_view(), name='verify-phone') 
+0

Итак? Это проблема? –

+0

это не проблема. Проблема была совсем другой, о чем я не знал в то время, и вопрос не связан вообще. Я все равно соглашусь на ваши усилия, чтобы помочь :). – momokjaaaaa

Смежные вопросы