Как Django Browsableapi генерировать HTML-форму автоматически? - PullRequest
0 голосов
/ 30 августа 2018

Я изучаю DRF и застрял на том, как сериализатор DRF генерирует HTML-форму в browsableapi. У меня есть UserRegistrationAPIView и UserRegistrationSerializer.

class UserRegistrationAPIView(CreateAPIView):
    authentication_classes = ()
    permission_classes = ()
    serializer_class = UserRegistrationSerializer

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)

        user = serializer.instance
        token, created = Token.objects.get_or_create(user=user)
        data = serializer.data
        data["token"] = token.key

        headers = self.get_success_headers(serializer.data)
        return Response(data, status=status.HTTP_201_CREATED, headers=headers)

class UserRegistrationSerializer(serializers.ModelSerializer):
    # password = serializers.CharField(write_only=True, style={'input_type': 'password'})
    confirm_password = serializers.CharField(write_only=True, style={'input_type': 'password'})
    confirm_password1 = serializers.CharField(write_only=True, style={'input_type': 'password'})

    class Meta:
        model = User
        fields = ("id", "username", "email", "password", "confirm_password", "date_joined","confirm_password1")

    def create(self, validated_data):
        del validated_data["confirm_password"]
        del validated_data["confirm_password1"]
        return super(UserRegistrationSerializer, self).create(validated_data)

    def validate(self, attrs):
        if attrs.get('password') != attrs.get('confirm_password'):
            raise serializers.ValidationError("Those passwords don't match.")
        return attrs

Я запутался, когда я перешел на URL этого представления, он автоматически генерирует поле формы HTML. Итак, это означает, что он использует сериализатор для генерации HTML-поля. На самом деле, я не понимаю поток запросов о том, как сериализатор используется для визуализации HTML-формы. Пожалуйста, помогите мне или предложите мне, чему научиться в первую очередь. Заранее спасибо.

1 Ответ

0 голосов
/ 19 февраля 2019

DRF-ответ, если основан на request.accepted_renderer.format. Если это html, он возвращает BrowsableAPI (есть шаблоны, основанные на начальной загрузке)

...