Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 4, 2014 08:48:44

despair4
Зарегистрирован: 2014-09-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

пре рендер

страничка перед отображением ждет подгрузки на веб сервер данных с апи сервера до 1-10 секунд в зависимости от объема данных

сейчас оказалось, что иногда может потребоваться несколько запросов к апи серверу, для полного формирования веб странички

можно ли в джанго как то по простому формировать страничку по частям?

( за кончилась первая подгрузка данных отобразилась краткая информация по ним и тд, потом как закончилась вся подгрузка данных отобразилась полная информация по данным в браузере)

Офлайн

#2 Окт. 4, 2014 09:10:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

пре рендер

Это задача клиента, а не сервера - просите данные аяксом и перерисовываете страничку по мере поступления ответов. То есть джанга не при чем, это вопрос по джаваскрипту и его фреймворкам.



Офлайн

#3 Окт. 4, 2014 13:26:35

despair4
Зарегистрирован: 2014-09-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

пре рендер

FishHook
То есть джанга не при чем

до того как я начал переностить сервер на джангу, мне удавалось на basehttpserver выдавать страничку частями, по мере получения сервером данных:

                handler.send_response(200)
                handler.end_headers()            
                #name=pilot.get_name_by_pilot_id(path[2])
                handler.wfile.write("""<html><head><title>{} </title></head>
                <body>
                
                </body></html>""".format(name))
                print "send header ",time.time()-t
                j=get_json_pilot(characterID=path[2])
                print "get json ",time.time()-t
                handler.wfile.write(html_kills_loss_time(pilotID=path[2], kills_data=j))
                print "kill loss ",time.time()-t
                handler.wfile.write(html_corp_link(pilotID=path[2], kills_data=j, 
                                                   host=handler.headers.get("host")))
                print "send corp link ",time.time()-t
                #time_slice(kills=j)
                handler.wfile.write(kill_time(kills=j))
                print "time slice ",time.time()-t
                handler.wfile.write(html_json(kills_data=j, host=handler.headers.get("host")))
                print "send html jsona ",time.time()-t

я думал в жданге можно сделать что то подобное

зы щас все силы бросил на изучения джанги, аякс и js боюсь что в ближайщий месяц не потяну

Отредактировано despair4 (Окт. 4, 2014 13:30:15)

Офлайн

#4 Окт. 4, 2014 13:37:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

пре рендер

аривидерчи,
можно из батона, вязальных спиц и двух презервативов сделать троллейбус.
Вперед!
При чем тут Джанго?



Офлайн

#5 Окт. 4, 2014 17:27:07

despair4
Зарегистрирован: 2014-09-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

пре рендер

FishHook
При чем тут Джанго?

не знаю, думал джанго тоже как то по частям позволяет формировать страницу

Офлайн

#6 Окт. 25, 2014 05:30:00

despair4
Зарегистрирован: 2014-09-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

пре рендер

наткнулся случайно:

The StreamingHttpResponse class is used to stream a response from Django to the browser. You might want to do this if generating the response takes too long or uses too much memory.

правда не понял как им пользоваться

Офлайн

#7 Окт. 28, 2014 05:18:32

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

пре рендер

despair4
наткнулся случайно:The StreamingHttpResponse class is used to stream a response from Django to the browser. You might want to do this if generating the response takes too long or uses too much memory. правда не понял как им пользоваться
Его надо вернуть из вьюхи, вместо HttpResponse. А при создании ему отдается генератор возвращающий строки. Вот пример. Но учтите, вы все равно будете иметь проблемы с производительностью. Приложение обслуживает клиентов в ограниченное число потоков, и если каждый будет ждать по 1-10 секунд ответа от API, в какой-то момент свободные потоки кончатся. Я бы подумал либо о кешировании ответов API, либо о переводе части, работающей со сторонним API, на что нибудь асинхронное, на то же торнадо, например(оно, кстати, и со стримингом лучше справится).



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version