直接生成 Django-REST-API ?
generate a Django-REST-API directly ?
我已经有一个包含 100 个表的数据库。
现在,我想将其公开为 REST-API。
我以前做过这个,所以我熟悉这个过程。
我为模型创建了一个序列化器,为序列化器创建了一个 ViewSet 和一个路由器。
我在 2 个表上测试它并且有效。
问题是我想公开我所有的 100 个表。同样的操作重复 100 次也不好玩。
有没有办法只做一次?
在 django 中似乎没有办法这样做。
NOW, THIS IS NOT THE BEST SOLUTION,
SOMETIMES, DIFFERENT SERIALIZERS CLASSES ARE NEEDED DEPENDING ON RELATIONS
我刚刚创建了一个有效的脚本:
您只需要 运行 从您的项目目录中使用您的应用程序名称作为参数
`import os
import sys
ROUTER_TEMPLATE = "router.register(r'{}', views.{}ViewSet)"
SERIALIZER_TEMPLATE = """
class {}Serializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = {}
fields = '__all__'
"""
VIEW_TEMPLATE= """
class {}ViewSet(viewsets.ModelViewSet):
queryset = {}.objects.all()
serializer_class = {}Serializer
"""
def gen_api(app_name):
models= open(app_name+'/models.py', 'r')
aLines = models.readlines()
for sLine in aLines:
aLine = sLine.split()
for sWord in aLine:
if sWord == "class" and aLine[aLine.index(sWord)+1] != "Meta:":
model_name= aLine[aLine.index(sWord)+1].split("(")[0]
gen(app_name,model_name )
def gen(app_name, name):
config = open(app_name+'/urls.py', 'a') #append
config.write("\n"+ ROUTER_TEMPLATE.format(name, name))
config.close()
config = open(app_name+'/serializers.py', 'a') #append
config.write("\n"+ SERIALIZER_TEMPLATE.format(name, name))
config.close()
config = open(app_name+'/views.py', 'a') #append
config.write("\n"+ VIEW_TEMPLATE.format(name, name, name))
config.close()
if __name__ == "__main__":
gen_api(sys.argv[1])
`
我已经有一个包含 100 个表的数据库。
现在,我想将其公开为 REST-API。
我以前做过这个,所以我熟悉这个过程。 我为模型创建了一个序列化器,为序列化器创建了一个 ViewSet 和一个路由器。 我在 2 个表上测试它并且有效。
问题是我想公开我所有的 100 个表。同样的操作重复 100 次也不好玩。
有没有办法只做一次?
在 django 中似乎没有办法这样做。
NOW, THIS IS NOT THE BEST SOLUTION,
SOMETIMES, DIFFERENT SERIALIZERS CLASSES ARE NEEDED DEPENDING ON RELATIONS
我刚刚创建了一个有效的脚本:
您只需要 运行 从您的项目目录中使用您的应用程序名称作为参数
`import os
import sys
ROUTER_TEMPLATE = "router.register(r'{}', views.{}ViewSet)"
SERIALIZER_TEMPLATE = """
class {}Serializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = {}
fields = '__all__'
"""
VIEW_TEMPLATE= """
class {}ViewSet(viewsets.ModelViewSet):
queryset = {}.objects.all()
serializer_class = {}Serializer
"""
def gen_api(app_name):
models= open(app_name+'/models.py', 'r')
aLines = models.readlines()
for sLine in aLines:
aLine = sLine.split()
for sWord in aLine:
if sWord == "class" and aLine[aLine.index(sWord)+1] != "Meta:":
model_name= aLine[aLine.index(sWord)+1].split("(")[0]
gen(app_name,model_name )
def gen(app_name, name):
config = open(app_name+'/urls.py', 'a') #append
config.write("\n"+ ROUTER_TEMPLATE.format(name, name))
config.close()
config = open(app_name+'/serializers.py', 'a') #append
config.write("\n"+ SERIALIZER_TEMPLATE.format(name, name))
config.close()
config = open(app_name+'/views.py', 'a') #append
config.write("\n"+ VIEW_TEMPLATE.format(name, name, name))
config.close()
if __name__ == "__main__":
gen_api(sys.argv[1])
`