2016-06-28 40 views
2
try: 
    if isDateValid(date) == false: 
     raise ValidationError('invalid date') 
    if usernameValid(user) == false: 
     raise ValidationError('invalid username') 
except ValidationError: 
    data = json.dumps({'status': 'Enter a valid date'}) 
    data = json.dumps({'status': 'Enter a valid username'}) 
    return HttpResponseBadRequest(data, content_type='application/json')` 

如何使数据=正确的消息,具体取决于引发错误或消息传递的位置?尝试除块以外的多个验证错误

+0

为什么你使用try /除了?你可以直接在这些if语句中设置'data' var。这将解决你的消息定制q。 – xgord

回答

3

访问你提出的异常实例:

try: 
    if isDateValid(date) == false: 
     raise ValidationError('invalid date') 
    if usernameValid(user) == false: 
     raise ValidationError('invalid username') 
except ValidationError as e: 
    data = json.dumps({'status': str(e)}) 
    return HttpResponseBadRequest(data, content_type='application/json') 

好了,上面会产生'status': 'invalid date'。如果你想给的消息'enter a valid date',你必须看到这消息得以通过:

except ValidationError as e: 
    msg = 'Enter a valid ' 
    if str(e).endswith('date'): 
     msg += 'date' 
    else: 
     msg += 'username' 
    data = json.dumps({'status': msg}) 
    return HttpResponseBadRequest(data, content_type='application/json') 

或者更简单:

except ValidationError as e: 
    msg = 'Enter a valid ' + str(e)[len('invalid '):] 
    data = json.dumps({'status': msg}) 
    return HttpResponseBadRequest(data, content_type='application/json') 

个人,你应该问自己,你是否可以只使用针对两种不同条件的ValidationError的两个不同子类。 你可以有InvalidUsernameErrorInvalidDateError并单独捕捉它们。 这肯定会产生更稳健的解决方案(您并不依赖于传递给引发异常的确切文本),尽管类层次结构过深并不总是一件好事。