Что, если я верну None в django просмотров и обработаю его в промежуточном программном обеспечении? - PullRequest
1 голос
/ 08 мая 2020

Мы всегда возвращаем HttpResponse в Django просмотрах, но теперь я хочу сделать этот пакет в промежуточном программном обеспечении. То есть я могу вернуть dict (или что-то еще) или вызвать ошибку в представлении, и мое промежуточное ПО обнаружит это: если оно вернет dict (body), промежуточное ПО будет упаковывать dict как {error: None, code: 0 , body: bodydict} и используйте JSON .dumps, чтобы получить строку в качестве содержимого ответа (например, с кодом 0); Если это вызывает ошибку, промежуточное программное обеспечение преобразовывает ошибку в строку и упаковывает ее как {error: "Some Error", code: 500, body: []}

Если представление возвращает None, промежуточное программное обеспечение будет упаковано как {error: None, code: 0, body: None}

Но проблема в том, что django обнаружит возврат изображения. Если он вернет None, будет записана ошибка:

The view xxxView didn't return an HttpResponse object. It returned None instead.

Теперь я хочу удалить этот журнал. Что мне делать?

1 Ответ

0 голосов
/ 08 мая 2020

Я думаю, единственный способ сделать это (легко) - это использовать декоратор, а не промежуточное ПО, метод get_response или что-то еще, что передается в промежуточное ПО, в значительной степени хочет чего-то с как минимум вызываемым render метод, и без большого количества работы его невозможно избежать

def jsonify(fn):
    def __inner(*args,**kwargs):
        result = fn(*args,**kwargs)
        return HTTPResponse(json.dumps({"data":result}))

@jsonify
def my_function(request,...):
    return None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...