为什么djangoRest框架检索APIView无法使用电子邮件进行筛选



我正在尝试使用retrieveAPIView来查找基于"电子邮件"的详细信息。但它的抛出错误:

Not Found: /apii/list/
[27/May/2021 19:53:28] "GET /apii/list/?email=%22xxx.zzz@gmail.com%22 HTTP/1.1" 404 2801

项目级urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('apii/', include('AUTHENTICATION.urls')),
]

应用程序URL.py

urlpatterns = [
path('register/', UserRegisterView.as_view(), name='register'),
path('login/', loginAPIView.as_view(), name='login'),
re_path(r'^list/(?P<email>[w-]+)/$', IndividualUserDetails.as_view(), name='list'),
]

views.py

class IndividualUserDetails(RetrieveAPIView):
queryset = NewEmployeeProfile.objects.all()
permission_classes = [AllowAny]
serializer_class = UserSerializer
lookup_field = 'email'

我在poster中输入的url是http://127.0.0.1:8000/apii/list/?email="xxx.zzz@gmail.com"

我假设我调用网址的方式可能是错误的。

请提出建议。谢谢

您的url模式如下所示:

re_path(r'^list/(?P<email>[w-]+)/$', IndividualUserDetails.as_view(), name='list'),

然而,您试图将电子邮件作为GET参数(?email="xxx.zzz@gmail.com"(传递,而不是作为url本身的一部分。您需要将电子邮件作为url本身的一部分进行传递,因此您的url应该是:

http://127.0.0.1:8000/apii/list/xxx.zzz@gmail.com/

此外,您的模式将无法匹配您的电子邮件,因为[w-]+.@等不匹配。相反,只需使用pathstrurl转换器:

path(r'list/<str:email>/', IndividualUserDetails.as_view(), name='list'),

最新更新