【问题标题】:Checking the type of an argument in Django Python views在 Django Python 视图中检查参数的类型
【发布时间】: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)

标签: python django


【解决方案1】:

似乎现在正在工作。

但后来我意识到了一些事情。 EmailField 可能甚至不是一个有效的 Python 类型!

其次,我已经更正了类型检查(这可能首先是错误的)。

最后,将 url.py 修改为现在的样子:

网址.py

path('<int:arg>/', views.getUpdateDeleteAccount),
path('<str:arg>/', views.getUpdateDeleteAccount),

视图.py

def getUpdateDeleteAccount(request, arg):
    """To get, update and delete a single user account"""

    if type(arg) is int:
        try:
            account = Account.objects.get(id=arg)
        except Account.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)
    elif type(arg) is str:
        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)

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 2011-11-24
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2021-10-22
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多