我正在从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注入的攻击。