假设我要在继续之前测试一些数据,如果失败,则将错误响应直接返回给提出请求的人。
我有这个:
def gerUserInfo(request):
if request.user.is_authenticated:
data = json.loads(request.body.decode('utf-8'))
info1 = data.get("info1") if data.get("info1") else ""
if info1.strip() == "":
return JsonResponse({"status":"fail"})
else:
#proceed...
info2 = data.get("info2") if data.get("info2") else ""
if info2.strip() == "":
return JsonResponse({"status":"fail"})
else:
#proceed...
...
我想要这个:
def gerUserInfo(request):
def secureGetData(data):
try:
data = data if data else ""
if data.strip() == "": return JsonResponse({"status":"fail"})
else: return data
except:
return JsonResponse({"status":"fail"})
if request.user.is_authenticated:
data = json.loads(request.body.decode('utf-8'))
info1 = secureGetData(data.get("info1"))
info2 = secureGetData(data.get("info2"))
...
# i can proceed without worring...
我希望服务器响应来自secureGetData()的请求,但是从不这样做。
编辑:
基本上,我想做的是从JS中的here之类的嵌套函数返回一个循环,我想返回一个,我什至不确定在JS ...
答案 0 :(得分:0)
看起来您可以在方法上使用一些重构。
您应该将提取/验证数据的逻辑与将根据其创建的响应分开。
名为secureGetData
的函数返回JsonResponse而不是类似数据的结构没有任何意义。看起来您试图通过更改第一个实现不重复自己的操作,这是正确的,但是您可能想调用一个函数以获取有效数据或根本不获取任何数据,然后使用它来确定该函数返回哪个响应。
def gerUserInfo(request):
def validate_data(data):
# validate all your data. and return a dict ({} if data is not valid)
if request.user.is_authenticated:
data = json.loads(request.body.decode('utf-8'))
data = validate_data(data)
if data:
# proceed without worring...
else:
# return JsonResponse({"status":"fail"})