如何从嵌套函数响应Django请求?

时间:2020-07-13 10:05:44

标签: django function jsonresponse

假设我要在继续之前测试一些数据,如果失败,则将错误响应直接返回给提出请求的人。

我有这个

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 ...

1 个答案:

答案 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"})