【问题标题】:How to modify Browsable API form如何修改可浏览的 API 表单
【发布时间】:2013-07-03 11:21:50
【问题描述】:

目前,我正在创建一个 UserRegistration 视图,该视图应显示带有密码/确认密码字段的表单。问题是 Browsable API 只显示模型定义中出现的字段。

  • 我应该如何调整表单以便能够添加自定义字段?

    class UserRegistrationSerializer(serializers.ModelSerializer):
    
        password = serializers.CharField(
            max_length=128,
            widget=widgets.PasswordInput,
            label=_('Password')
        )
        password_confirm = serializers.CharField(
            max_length=128,
            widget=widgets.PasswordInput,
            label=_('Confirm password')
        )
    
        class Meta:
            model = User
            fields = ('id', 'name', 'username', 'email', 'password', 'registration_date')
    
        def validate(self, attrs):
            if attrs.get('password') and attrs.get('password_confirm'):
                if attrs['password'] != attrs['password_confirm']:
                    raise serializers.ValidationError(_("Passwords do not match"))
            return attrs
    
  • 另外,区分输入序列化器和输出序列化器的最佳方法是什么?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    Django Rest Framework 实际上使用呈现到 Browsable API 视图中的普通 Django 表单。

    您可以通过修改使用的渲染器来控制表单的外观:http://www.django-rest-framework.org/api-guide/renderers#browsableapirenderer

    例如:

    class MyBrowsableAPIRenderer(BrowsableAPIRenderer):
        # either
        def get_context(self, *args, **kwargs):
            context = super(MyBrowsableAPIRenderer, self).get_context(*args, **kwargs)
            context["post_form"] = django.form.Form()  # modify form here          
    
        # or
        def get_rendered_html_form(self, view, method, request):
            # do things here to create full Form
    
    @renderer_classes((JSONRenderer, MyBrowsableAPIRenderer)):
        class MyViewSet(GenericViewSet):
            pass
    

    不知道Form创建后能不能修改,没试过。如果没有,您可以重写创建表单的整个函数。我可以添加表单字段,这样会更好。

    【讨论】:

      【解决方案2】:

      首先,您需要在您正在使用的ViewViewSet 中定义它。序列化程序不会以这种方式控制可浏览 API,它只是处理将对象从本机转换为某种序列化格式并返回。

      既然你没提,我猜你在用http://django-rest-framework.org/

      您可能想要查看的文档的具体部分是:http://django-rest-framework.org/api-guide/viewsets.html#modelviewset

      【讨论】:

        猜你喜欢
        • 2013-05-07
        • 1970-01-01
        • 1970-01-01
        • 2018-12-25
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-27
        相关资源
        最近更新 更多