Я хочу отправить ответ с помощью Django. Для этого У меня такое мнение:
def flights(request, query):
req_obj = Flights.RequestObject(query)
return StreamingHttpResponse(req_obj.make_response(), content_type = "application/json")
Для создания данных для потока у меня есть функция генератора make_response, который является методом класса «Полеты», созданным как «req_obj».
Функция генератора в определенные моменты выдает чистый словарь Python.
def make_response(self):
for _ in range(0,3):
yield some_dict
time.sleep(1)
Это приводит к следующему поведению:
если возвращенный словарь выглядит примерно так
{"data": "some_data"}
, после второго yield пользователь получает следующий ответ:
{"data": "some_data"}{"data": "some_data"}
, что НЕ является допустимым json.
Есть предложения, как решить эту проблему?






Вы пробовали что-то вроде
req_obj.update(req_obj.make_response())
который обновит ваш исходный dict значениями, полученными из вашего метода?
Я предполагаю, что это обновление произойдет в первом аргументе streamingHttpResponse, к сожалению, это не работает, потому что req_obj.make_response () не является объектом, а скорее генератором. @Omar
Ах да, правильно @RafaelMarques, так как насчет внутри генератора вы делаете: yield self.update (some_dict) Я не уверен, как вы строите dict из объекта Flight, но поскольку у вас есть доступ к нему в make_response вы, возможно, можете использовать это для обновления словаря, который выдается
проблема не в этом. Проблема в том, что если несколько раз получить словарь (равный или разный), получается что-то, что НЕ является словарем. @Omar
правильно, поэтому в вашем вопросе он возвращал два словаря, поэтому обновление объединит значения в один словарь
Мое плохое, я думаю, что я неправильно понимаю все это, поток приводит к "двойному" словарю, не уверен, что вы справитесь с этой стороной django
точно. хотя обновление работает так, как вы говорите, Stream и Yield приводят к возврату нескольких словарей, которые в совокупности образуют объект, который не является допустимым json или даже dict в этом отношении.
@RafaelMarques, тебе удалось это решить? Если да, то какую технику вы использовали? Вы пытались выполнить потоковую передачу строкового объекта и проанализировать его как json на другом конце?
Нет, мне не удалось решить мою ситуацию со стримингом. Я хотел постепенно возвращать ответы (вернуть ответ A сейчас, вернуть ответ B через секунду, ответ C позже и т. д.). Насколько я могу судить, потоковая передача не подходила для этого, поскольку потоковая передача использовалась для отправки уже существующего ответа, фрагмент за фрагментом, вместо того, чтобы возвращать несколько объектов ответа, когда они становятся доступными. Честно говоря, я до сих пор не знаю, как решить эту проблему, хе-хе @omar
Привет, прежде всего, хочу поблагодарить вас за вашу помощь. К сожалению, я не понял вашего ответа.