2015-11-26 6 views
1

Я создал представление rest-framework для создания объекта.Различные ответы в зависимости от инструмента запроса

К сожалению, я получаю разные ответы, если:

  • Я использую интерфейс browsableAPI с необработанными данными: 201 СОЗДАНА
  • Я использую Hurl.it (см параметров): 201 СОЗДАН
  • Я использую завиток (curl -d @sample.json -H "Content-Type: application/json" -u admin -i "https://vincentle.pythonanywhere.com/samples/api/create/"): 302 НАЙДЕНО
  • Я использую OkHttp/Дооснащение в Android приложение: 302 НАЙДЕНО

C вы помогаете мне, по крайней мере, в предоставлении некоторых стратегий отладки?

просмотров:

class SampleCreateAPIView(ListCreateAPIView): 
    queryset = Sample.objects.all() 
    serializer_class = SampleSerializer 
    permission_classes = (permissions.IsAuthenticated,) 

    def perform_create(self, serializer): 
     room = serializer.validated_data['room'] 
     building = room.area.floor.building 
     admins = building.customer_account.admin.all() 
     if self.request.user in admins: 
      super(SampleCreateAPIView, self).perform_create(serializer) 
     else: 
      raise PermissionDenied(detail=_('You are not in the administrators list for this room')) 

сериализаторы:

class SampleSerializer(serializers.ModelSerializer): 
    room = serializers.PrimaryKeyRelatedField(many=False, queryset=Room.objects.all()) 
    wifiaccesspoint_set = WifiAccessPointSerializer(many=True) 

    class Meta: 
     model = Sample 
     fields = ('room', 'wifiaccesspoint_set',) 

    def create(self, validated_data): 
     wap_data = validated_data.pop('wifiaccesspoint_set') 
     sample = Sample(room=validated_data['room']) 
     sample.save() 
     for wap in wap_data: 
      WifiAccessPoint.objects.create(sample=sample, **wap) 
     return sample 

Edit 1 - Кажется локонов проблему Эта команда: curl -u admin -i "https://vincentle.pythonanywhere.com/fr/samples/api/create/" -H "Content-Type: application/json" -d @sample.json работает нормально, и я получаю 201 СОЗДАНО ответ.

Но эта команда: curl -d @sample.json -H "Content-Type: application/json" -u admin -i "https://vincentle.pythonanywhere.com/samples/api/create/" дает мне ответ 302 НАЙДЕН.

В чем разница между этими двумя командами?

+1

Вы можете сравнить заголовок запроса curl и API для просмотра для стартеров. Вы уже используете '-i' в своем запросе curl, теперь все, что вам нужно сделать, это увидеть вкладку в сети параметров разработчика вашего браузера. Было бы лучше, если бы вы могли делиться заголовками. –

+0

См. Править для префикса – bixente57

+0

Можете ли вы поделиться выводом curl? Если ограничение по символу/пробелу является проблемой, вы можете использовать какое-либо онлайн-приложение, например [dpaste] (http://dpaste.de), чтобы опубликовать информацию о выходе curl? –

ответ

0

302 является переадресацией. Поскольку вы используете аутентификацию, дважды проверьте, куда перенаправляется.

Если это страница входа в систему, я чувствую, что вы не прошли аутентификацию, потому что у вас нет правильной конфигурации конфигурации. curl -u, вероятно, отправит базовое auth, которое вам нужно настроить на вашем API (http://www.django-rest-framework.org/api-guide/authentication/#basicauthentication)

+0

См. Edit for curl precisions – bixente57

+0

Перенаправление - хороший путь для отладки. На самом деле мои две команды curl запрашивают разные ресурсы:/samples/api/create и/fr/samples/api/create! Я проверю конфигурацию своего api url. – bixente57

+0

Если он добавляет информацию о языке, ваш API, скорее всего, стоит за i18n_pattern. При удалении это должно решить проблему перенаправления. – Linovia