Django rest framework 在Django Rest框架中路由API视图?

Django rest framework 在Django Rest框架中路由API视图?,django-rest-framework,Django Rest Framework,使用Django Rest框架路由APIViews(即不是ViewSets)是否有任何通用模式 例如,如果我有一个采用可选参数的API视图: class ReportView(APIView): def get(self, request, report_name=None): # … stuff … return Response(report) 除了写出一个标准的Django URL路由器外,是否有任何标准模式用于路由该视图 除了写出一个标准的D

使用Django Rest框架路由
APIViews
(即不是
ViewSets
)是否有任何通用模式

例如,如果我有一个采用可选参数的API视图:

class ReportView(APIView):
    def get(self, request, report_name=None):
         # … stuff …
         return Response(report)
除了写出一个标准的Django URL路由器外,是否有任何标准模式用于路由该视图

除了写出一个标准的Django URL路由器外,是否有任何标准模式用于路由该视图

如果您想要标准化布线,则视图集和路由器是一种模式


如果您使用的是视图,那么只需使用常规的Django URLconf。

能够添加简单的API视图对于在
根API
视图中显示URL非常有用

以下是
DefaultRouter
的最简单扩展,它不仅可以注册视图集,还可以注册简单的API视图:

从django.conf.url导入url
从rest_框架导入路由器、视图集
从rest\u framework.urlpatterns导入格式\u后缀\u模式
类DefaultRouterWithSimpleViews(routers.DefaultRouter):
"""
扩展DefaultRouter的功能,增加可能性
注册简单的API视图,而不仅仅是视图集。
"""
def get_路由(自、视图集):
"""
检查视图集是否为视图集的实例,
否则,假定它是一个简单视图,并且不运行
原始“获取路径”代码。
"""
如果issubclass(viewset、viewset.ViewSetMixin):
返回超级(默认路由,带有SimpleView,self)。获取路由(视图集)
返回[]
def get_URL(自):
"""
将非视图集视图附加到URL
由原始的“获取URL”方法生成。
"""    
#简单视图的URL
ret=[]
对于self.registry中的prefix、viewset、basename:
#跳过视图集
如果issubclass(viewset、viewset.ViewSetMixin):
持续
#URL正则表达式
正则表达式='{prefix}{trailing_slash}$'。格式(
前缀=前缀,
拖尾斜杠=自拖尾斜杠
)
#由于具体原因,视图名称必须有后缀“-list”
#DefaultRouter实现的。
ret.append(url)(
regex,viewset.as_view(),
名称=“{0}-list.”格式(basename)
))
#格式后缀
ret=格式\后缀\模式(ret,允许=['json','html'])
#为视图集预先设置URL并返回
返回super(DefaultRouterWithSimpleViews,self)。获取URL()+ret
现在,您可以将简单的Django视图与rest framework视图集一起使用:

router=DefaultRouterWithSimpleViews()

register(r'users',UserViewSet',users')#如何将使用常规Django URLconf的视图添加到可浏览的API中?请注意。此路由器将生成不支持后缀(*.json,*.jsonp)的URL。您必须调用format\u suffix\u patterns来获取额外的模式。@AlexanderKlimenko谢谢!我已经更新了答案-请仔细检查它是否正确。也许为了让这个示例代码更容易理解,您还可以包含一个简短的示例,说明如何使用它?@М.Б。这可能是您的代码输入错误。也许你错过了创建
路由器
实例的第一行?@DavidAvsajanishvili我终于做到了!我找到了一条路。当项目完成时,我会在这里链接git回购。