我一直在尝试使用 urls.py 文件中的 re_path 方法获取泛型 RetrieveAPIView
类。在尝试了几种组合之后,我只能让路径方法起作用。我想要一个类似于 /file?id={some_uid}
的端点。
到目前为止,我有以下内容:
- Django :3.0.6
- djangorestframework=3.11.0
views.py:
class UploadFileInfoView(generics.RetrieveAPIView):
lookup_field = "id"
queryset = Upload.objects.all()
serializer_class = UploadModelSerializer
urls.py:
from django.urls import path, re_path
from . import views
urlpatterns = [
path("file/", views.UploadFileView.as_view(), name="UploadFile"),
# this works
# path("file/<uuid:id>", views.UploadFileInfoView.as_view(), name="UploadFileInfo"),
# this does not
re_path(r"^file/(?P<id>[0-9A-Fa-f-]+)", views.UploadFileInfoView.as_view(), name="UploadFileInfo"),
]
没有像文档中说的那样使用 url 方法
This function is an alias to
django.urls.re_path()
. It’s likely to be deprecated in a future release.
最佳答案
据我所知,Query 参数默认传递给 django View 。所以你不需要在 URL 中显式地处理它。在你的情况下,如果你想要 /file?id={some_uid}
,你应该在 View 中处理它或覆盖 get_queryset
方法。
urls.py
urlpatterns = [
# ** your other urls **
path(r"file", views.UploadFileInfoView.as_view(), name="UploadFileInfo"),
]
views.py
class UploadFileInfoView(generics.ListAPIView):
lookup_field = "id"
queryset = Upload.objects.all()
serializer_class = UploadModelSerializer
def get_queryset(self):
return Upload.objects.get(id=self.request.GET.get('id'))
以上设置适用于 /file/?id=1234
并返回 Upload.objects.get(id=1234)
。我没有测试过这段代码,但它应该可以工作,而且如果对象不存在,您还需要处理异常。
关于python - DRF- Django Rest Framework re_path 查询参数 - "Method\"GET\"not allowed.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61846371/