django请求参数必须是django.http.HttpRequest的实例



我正在从djangoviews函数导入服务function,并得到此错误

'The `request` argument must be an instance of `django.http.HttpRequest`, not `collections.OrderedDict`.'

我在其他模块中也使用了相同的实现,这些模块运行良好。

from custom_label.services.custom_label_svc import update_label
@api_view(["POST"])
@authorize
def update_label(request) -> JsonResponse:
try:
payload = ValidateUpdateLabel(data=request.data)
if payload.is_valid():
# call service methods
data = update_label(payload.validated_data) << here
...

custom_label > services > custom_label_svc.py文件中:

from basic_files.database_connections import connect_to_postges
cursor = connect_to_postges()

def update_label(params: dict) -> dict:
app_id = params.get('appid')
label_name = params.get('label_name')
updated_label_icon = params.get('updated_label_icon')
sql = "UPDATE label SET icon = %s  WHERE appId = %s AND name = %s" % (updated_label_icon, app_id, label_name)
cursor.execute(sql)
return cursor.rowcount

我在这里错过了什么?

失败的原因是您有两个名称相同的函数,因此它将调用您在名称中定义的update_label

您可以通过导入具有不同名称的函数来解决此问题,因此:

from custom_label.services.custom_label_svc import update_labelas update_label_logic
@api_view(['POST'])
@authorize
def update_label(request) ->JsonResponse:
try:
payload = ValidateUpdateLabel(data=request.data)
if payload.is_valid():
# call service methods
data =update_label_logic(payload.validated_data)
# …

但是,将整个逻辑封装在try-except中通常不是一个好主意。此外,您的函数很容易受到SQL注入的攻击。

相关内容

  • 没有找到相关文章

最新更新