从django rest框架序列化程序生成typescript接口的简单解决方案。
django-typomatic的Python项目详细描述
django字体
从Django Rest Framework Serializers生成类型脚本接口的简单解决方案。
因为我现在需要一个简单的包来为django rest框架序列化器生成typescript接口,所以我决定移植到我的Typemallow包上,以便与drf序列化器一起使用!
用法:
使用django typomatic同样简单!
首先,安装软件包
pip install django-typomatic
接下来,对于要为其生成typescript接口的django rest框架序列化程序,只需从django_typomatic
模块导入ts_interface
和generate_ts
,然后将@ts_interface()
类装饰器添加到django rest框架序列化程序类。
生成typescript接口所需的全部工作就是调用generate_ts()
函数,并提供一个filepath作为输出结果的参数。
main.py
fromdjango_typomaticimportts_interface,generate_tsfromrest_frameworkimportserializers@ts_interface()classFoo(serializers.Serializer):some_field=serializers.CharField()another_field=serializers.DateTimeField()generate_ts('./output.ts')
output.ts
exportinterfaceFoo{some_field: string;another_field: date;}
django typomatic支持嵌套序列化器,以及作为列表的列表字段和其他字段(任何具有many=true的字段)
main.py
fromdjango_typomaticimportts_interface,generate_tsfromrest_frameworkimportserializers@ts_interface()classFoo(serializers.Serializer):some_field=serializers.IntegerField(many=True)another_field=serializers.CharField()@ts_interface()classBar(serializers.Serializer):foo=Foo()foos=Foo(many=True)bar_field=serializers.CharField()
output.ts
exportinterfaceFoo{some_field: number[];another_field: string;}exportinterfaceBar{foo: Foo;foos: Foo[];bar_field: string;}
扩展使用:
decorator函数接受一个可选参数context,默认为…嗯…'默认值'。
“为什么是这样?“
用@ts_interface
decorator标识序列化程序时,它将被添加到序列化程序字典中的列表中,字典键是提供给context参数的值。如果要为每个序列化器提供不同的上下文,则如果它们不存在,则将创建附加键,或者将序列化器简单地附加到现有密钥的列表中。
这很方便,因为generate_ts()
函数还接受一个可选的context参数,该参数将仅在字典中的特定键处筛选序列化程序。
如果您希望将不同的上下文输出到不同的文件(例如
main.py
...fromdjango_typomaticimportts_interface,generate_tsfromrest_frameworkimportserializers@ts_interface(context='internal')classFoo(serializers.Serializer):foo=serializers.CharField()@ts_interface(context='internal')classBar(serializers.Serializer):bar=serializers.CharField()@ts_interface(context='external')classFooBar(serializers.Serializer):foo_bar=serializers.CharField()''' we're telling django-typomatic that we only want to generate interfaces from serializers with an 'internal' context to './internal.ts' '''generate_ts('./internal.ts',context='internal')''' only generate interfaces from serializers with an 'external' context to './external.ts' '''generate_ts('./external.ts',context='external')
内部.ts
exportinterfaceFoo{foo: string;}exportinterfaceBar{bar: string;}
外部.ts
exportinterfaceFooBar{foo_bar: string;}