[英]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/e
, http://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.