Как ответить на запрос Django от вложенной функции? - PullRequest
0 голосов
/ 13 июля 2020

Допустим, я хочу протестировать несколько данных, прежде чем продолжить, и, если это не удастся, вернуть ответ об ошибке непосредственно тому, кто сделал запрос.

У меня есть это :

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 (), но никогда не делайте этого.

EDIT :

В основном я пытаюсь сделать возврат из вложенной функции, например здесь в JS для al oop, я хочу это сделать с возвратом я даже не уверен, что это возможно в JS ...

1 Ответ

0 голосов
/ 13 июля 2020

Похоже, вы могли бы использовать некоторый рефакторинг в своем подходе.

Вы должны разделить logi c извлечения / проверки данных и ответ, который вы создадите на их основе.

Функция с именем 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"})
...