【发布时间】:2022-08-11 01:46:22
【问题描述】:
我在 C(中介专业知识)方面有更多经验,现在正在用 Django Python 做一些事情。
我有一个 url 函数,它将 REST 调用定向到视图函数。现在,我正在尝试创建一个 url 用于传递 ID(int)和电子邮件(str/EmailField)的参数以登陆相同的视图函数,然后我可以解压缩发送的 arg 的类型并做一些事情不同的。
我希望 url 与参数类型无关,然后在视图函数中进行条件检查。但看起来每次,参数都是作为 str 发送的(即使发送了 id 也是如此)。
我相信这里可能有两件事我不完全理解:也许参数总是会一直作为 str 发送到视图函数?或者我的类型检查可能存在问题(如您所见,我正在尝试转换 arg 的类型并检查是否为真。看起来更像是一种 C 方法?
谢谢!
urls.py 看起来像
path(\'<arg>/\', views.getUpdateDeleteAccount), ->> this is what I am trying to do
#path(\'<int:pk>/\', views.getUpdateDeleteAccount), ->>> works in isolation
#path(\'<str:email>/\', views.getUpdateDeleteAccount), -->>> works in isolation
view.py 看起来像
@api_view([\'GET\', \'PUT\', \'DELETE\'])
def getUpdateDeleteAccount(request, arg):
if type(int(arg)) is int:
print(\"account id search, arg type is \")
print(type(arg))
try:
account = Account.objects.get(id=arg)
except Account.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
elif type(EmailField(arg)) is EmailField:
print(\"email add search, arg type is \")
print(type(arg))
try:
account = Account.objects.get(emailAddress=arg)
except Account.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
-
如果您不指定转换器类型,则 Django 将捕获的参数值推断为字符串。参考:docs.djangoproject.com/en/4.1/topics/http/urls