2016-12-12 13 views
5

Я пишу Falcon промежуточное программное обеспечение для моего приложения. Когда я получить какую-либо ошибку, я хочу поднять ошибку, процесс разрыва и вернуть мой собственный ответ, который выглядит следующим образом:Пользовательский ответ во время исключения промежуточного программного обеспечения falcon

{ 
    "status": 503, 
    "message": "No Token found. Token is required." 
} 

Но стандартная Falcon реализация ошибка не позволяет мне установить пользовательские поля для моего ответа.

Как решить эту проблему наиболее правильно?

ответ

4

После большого количества времени я решил эту проблему таким интересным способом. Я помещаю свой код в блок try/catch, и когда ошибка поймана, я решил не поднимать ошибку Falcon и просто попытался написать ключевое слово return после установки статуса ответа и тела, потому что метод равен void, поэтому он не возвращается что-нибудь. Теперь она выглядит следующим образом:

resp.status = falcon.HTTP_403 
resp.body = body 

return 
2

Я все еще искал пример, и здесь для тех, кто все еще нуждается:

from falcon.http_error import HTTPError 

class MyHTTPError(HTTPError): 

    """Represents a generic HTTP error. 
    """ 

    def __init__(self, status, error): 
     super(MyHTTPError, self).__init__(status) 
     self.status = status 
     self.error = error 

    def to_dict(self, obj_type=dict): 
     """Returns a basic dictionary representing the error. 
     """ 
     super(MyHTTPError, self).to_dict(obj_type) 
     obj = self.error 
     return obj 

с помощью:

error = {"error": [{"message": "Auth token required", "code": "INVALID_HEADER"}]} 

raise MyHTTPError(falcon.HTTP_400, error) 

 Смежные вопросы

  • Нет связанных вопросов^_^