繁体   English   中英

Django(v2 +)和Django REST Framework:如何处理“路径”?

[英]Django (v2+) and Django REST Framework: what to do with “path” interferes?

我是Django REST Framework的新手...但是正在通过教程,快速入门,网络和摆弄弄清楚了它。 但是,我没有找到以下问题的明确解决方案。

假设有人希望编写一个需要整数的api。

您可以尝试在网址格式中使用Django的path

urlpatterns = [
    ...
    path('my_api/<int:integer_argument>', views.my_api, name='my_api'),
    ...
]

在他们看来

@api_view(['GET'])
def my_api(request, integer_argument):
     # do stuff
     return JsonResponse({'int': integer_argument})

注意:在这里,我使用JsonResponse只是为了保持简单,但是很可能那个/那些参数进入类/模型和序列化器中,并由Response(serializer.data)返回。

因此,现在如果他们要测试一个调用此api的应用程序(处于开发模式) http://localhost:8000/my_api/1他们应该得到{'int':1}

但是,如果他们要调用http://localhost:8000/my_api/ehttp://localhost:8000/my_api/e得到调试页面或Bad Request (400)作为html

让我们假设制作api的人确实有适当的错误处理来验证参数(在这种情况下, integer_argument是整数)。

现在, path越来越麻烦了,而对于Django网站,这可能是理想的结果。

RESTful和django REST框架认可的处理这种情况的方式是什么?

path转换(例如<int:arg_name> )使url conf可读,因此是一个不错的功能。

我是否应该在基于函数的视图中移动类型以键入注释? 并使用通用弹头?

注意:在这种情况下,我希望对my_api/<something>每个请求都返回统一的响应(错误或其他)。

您的问题不够明确。 您声明:

让我们假设制作api的人确实有适当的错误处理来验证参数(在这种情况下,integer_argument是整数)。

是的,这将是Django处理的事情...。这就是为什么您得到调试页\\错误请求的原因,因为它不匹配。

在您的API中,您正在定义与该格式完全匹配的端点。 如果一个uri不匹配,则这是预期的行为,您不应在此处进行任何巫术操作,因为那根本没有道理。

如果确定要使用类型注释,则mypy非常有用,其他开发人员也可能会觉得有用。

现在,下一点:

注意:在这种情况下,我希望对my_api /的每个请求都返回一个统一的响应(错误或其他)。

所以...添加一个端点,当其他路径\\正则表达式路径找不到匹配项时,该端点将充当全部捕获以返回该统一响应。 我认为您过于复杂了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM