LINUX.ORG.RU

Недостатки Flask, Pyramid, bottle.py и Django

 , , ,


1

4

Перечислите недостатки Flask, Pyramid, bottle.py и Django. До Ruby/Java/Scale я ещё не дорос.

Я порылся по интернету, очень много споров на тему выбора Python-ориентированных CMS и баз данных к ним. В частности, много споров на Хабре про NoSQL и отсутствие «серебряной пули» (в контексте CAP-теоремы).

Что нужно:
- сессии (тут я нуб, хотелось бы некая устойчивость к DDoS, защита от взлома и надёжная быстрая БД для паролей: какое тут обычно решение применяют - не знаю),
- отзывчивость (хочу сделать за счёт разделения контента по location в зависимости от веса и статичности; скорее всего, nginx+хэш),
- легкое создание гибкой самописной админки (тут не знаю, что лучше из приведённых в заголовке каркасов),
- хочется максимально быстрый парсер шаблонов + грамотное кэширование результатов с разделением по юзерам (или другому динамически изменяемому идентификатору), если нужно [я имею ввиду в том числе подготовку предварительно вычислимых результатов для кэша - аналогично предвыборке в CPU/RAM],
- workers на epoll или аналог,
- масштабируемость (хотя бы на 2-3 сервера).

Что подскажете?

Ответ на: комментарий от anonymous

Друпал - жутко сложная, тормозная, написанная внутри чёрти как фигя... это ж как надо не любить ТСа чтобы это советовать)))

stevejobs ★★★★☆
()

Pyramid, bottle.py и Django

всё это доказавшие временем своё качество инструменты.

вопросы которые ты тут задал, это элементарные вопросы, рассматриваемые в туториалах этих проектов. за сим, встань и идииди и читай.

anonymous
()

Перечислите недостатки Flask, Pyramid, bottle.py и Django

не PHP

Что подскажете?

PHP

anonymous
()
Ответ на: комментарий от stevejobs

Друпал - жутко сложная, тормозная, ...

Это да. Я её смотрел лет пять назад - и положил обратно на полочку. Drupal почти эквивалентен Jooml'е по костыльности, imho.

Если у кого-то будут конкретные ответы на перечисленные выше конкретные вопросы - welcome.

... это ж как надо не любить ТСа чтобы это советовать

Он просто по себе других людей меряет. ;)
А это в корне неправильный подход.
Как говорил известный персонаж фильма: «мягше к людям надо быть, а на вещи смотреть ... ширше» (c)

NeProfessor
() автор топика

Если ты собираешься куда-то устраиваться на работу питонистом-бекендовщиком в перспективе то начинай с Django, потом добавь Flask по вкусу.

До Ruby/Java/Scala я ещё не дорос.

а что до них расти? берешь и используешь.

- сессии (тут я нуб, хотелось бы некая устойчивость к DDoS, защита от взлома и надёжная быстрая БД для паролей: какое тут обычно решение применяют - не знаю),

Django и встроенной ORM тебе хватит выше крыши.

отзывчивость (хочу сделать за счёт разделения контента по location в зависимости от веса и статичности; скорее всего, nginx+хэш)

наверное ты имел ввиду кэш? ну кэш он везде кэш, да и любимой фреймворк «отзывчив» из этих, проблем с производительностью у тебя никогда(almost) не будет

- легкое создание гибкой самописной админки (тут не знаю, что лучше из приведённых в заголовке каркасов)

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

хочется максимально быстрый парсер шаблонов + грамотное кэширование результатов с разделением по юзерам (или другому динамически изменяемому идентификатору), если нужно [я имею ввиду в том числе подготовку предварительно вычислимых результатов для кэша - аналогично предвыборке в CPU/RAM],

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

масштабируемость (хотя бы на 2-3 сервера).

масштабируемость это вопрос архитектуры, а не фреймворка, все масштабируется прекрасно

Что подскажете?

Начинай с Django, еще один жирный плюс это неплохая документация на оф. сайте

umren ★★★★★
()
Ответ на: комментарий от NeProfessor

Если у кого-то будут конкретные ответы на перечисленные выше конкретные вопросы - welcome

А «конкретные вопросы» у тебя под конкретную задачу возникли, или так, «для понту»?

hint:

В 90% случаев достаточно PHP.

Из них в 90% случаев PHP окажется лучшим выбором.

И да, PHP — говно.

anonymous
()
Ответ на: комментарий от umren

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

нарицательное полное говнище то есть? генеренные вьюхи, монолитные куски кода внутри админки - чтобы писать админку нужно копипастать ядро, и когда версия джанги меняется на 1 минорную циферку всё ломается? Помойму создатели Джанги эту админку делали на коленке не больше месяца, за месяц можно написать свою такую же, только в 100 раз лучше. Либо они вообще не шарили ни в ООП, ни в ФП, но это вряд ли. Глянь тот же Вордпресс - до чего уж там лапша, но там хотя бы должное количество хуков есть и код разделен на мелкие части.

масштабируемость это вопрос архитектуры, а не фреймворка,

купил ниссан - ебись с ним сам

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

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

stevejobs ★★★★☆
()

В Django не понравился orm и шаблонизатор, jinja и mako более лучше, но удобно сделан роутинг, во Flask'e бы так(хотя надо бы по гуглить на эту тему).

ggrn ★★★★★
()
Ответ на: комментарий от stevejobs

Админки в ПХП? Они есть, именно непосредственно в пхп?

Речь, собственно, о том, что 80 до 90% рынка вебдева — это пхп, и никаких тенденций к изменению не предвидится. Ключевое слово тут — рынок.

anonymous
()
Ответ на: комментарий от ggrn

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

anonymous
()
Ответ на: комментарий от anonymous

Хотя сейчас так и есть. в applications/__init__.py



from flask import Flask, render_template, session, g, redirect, url_for

................
app = Flask(__name__)
app.config.from_object('app_cfg')
app.template_folder = "templates"
db = SQLAlchemy(app)
csrf = CsrfProtect()
csrf.init_app(app)
app.debug = True

...............


from applications.controllers.index import mod as login
from applications.controllers.home.index import mod as home_index
from applications.controllers.home.profile import mod as profile
app.register_blueprint(login)
app.register_blueprint(home_index, url_prefix='/home')
app.register_blueprint(profile, url_prefix='/home/profile')

ggrn ★★★★★
()
Ответ на: комментарий от anonymous

пхп - это Symfony и Yii, в крайнем случае Вордпресс и Друпал

Ключевое слово тут — рынок.

а не насрать ли, что там куча быдлокодеров продаёт, скучковавшись вместе в стаю? Покупают-то у тебя, а не у них

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

пхп - это Symfony и Yii, в крайнем случае Вордпресс и Друпал

Судя по статистике — это Битрикс, HostCMS, NetCat, UMI.CMS и WebAsyst; и только потом уже Joomla, MODX, WordPress и Drupal.

А еще — это несколько тысяч т.н. «студийных» CMS.

а не насрать ли, что там куча быдлокодеров продаёт, скучковавшись вместе в стаю? Покупают-то у тебя, а не у них.

В принципе, да, насрать на маргиналов. У меня покупают, потому что я предлагаю лучшее решение за меньшие деньги и в более короткие сроки. Понятно, что в 90% случаев это будет, так или иначе, решение_на_пхп.

anonymous
()
Ответ на: комментарий от Komintern

чо, битрикс правда такой популярный? популярнее чем Magento?

С разморозкой!

Magento — 149 позиция в этом списке. Лично я вообще впервые слышу.

anonymous
()
Ответ на: комментарий от x3al

Мягко говоря, спорно.

Только если ты споришь сам с собой. Ну да, всем хорошо известно, что буржуи полюбляют asp.net. Но у них несколько другии историческии реалии, и, судя по вторым диаграммам, они активно мечутся между asp.net и ПХП.

Ну и спрос есть на кодеров всех технологий.

Если брать в седнем по больнице, то да, кол-во вакансий и средняя з/п будут сопоставимы для пхп и питон кодеров. Но если брать вебдев, то питона тут очень мало. И это правильно.

anonymous
()
Ответ на: комментарий от x3al

Упс, ошибочка.

Судя по вторым диаграммам, они активно валят с asp.net на ПХП

anonymous
()
Ответ на: комментарий от x3al

СНГ объясняет 10% ошибку в навскидочной оценке. Это конечно эпикфейл и какдальшыжыть, но так и в чем принципиальная разница?

anonymous
()

советовать ничего не буду, но вот из свежего: flask (и соответственно werkzeug) не обрабатывают множественные слеши в пути. бутылка самая адекватная имхо, если тебе ее достаточно — пользуйся.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

бутылка самая адекватная имхо,

Окей, их тогда и сравню.

NeProfessor
() автор топика
Ответ на: комментарий от val-amart

flask (и соответственно werkzeug) не обрабатывают множественные слеши в пути

Можно поподробнее?

anonymous
()
Ответ на: комментарий от anonymous

если зарегистрировать обработчик на URL '/some/path' то если пользователь постучиться на '/some//path' ты этого запроса не получишь.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

если пользователь постучиться на '/some//path' ты этого запроса не получишь.

Если постучаться на //some/path/ - то всё ок. То есть, слеш первый дублироваться может, он отошлёт обратно в корень.

anonymous
()
Ответ на: комментарий от val-amart

бутылка самая адекватная имхо, если тебе ее достаточно — пользуйся.

Я померял бутылку через ApacheBench/ab/, см. ниже ответ обычного hello.py. Я что-то делаю не так?

$ ab -n 10000 -c 100 -H "Accept-Encoding: gzip" http://127.0.0.1:8080/
...
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
apr_poll: The timeout specified has expired (70007)

$ ab -n 10000 -c 100 -H "Accept-Encoding: gzip" http://127.0.0.1:8080/
... Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
apr_socket_recv: Connection reset by peer (104)
Total of 2353 requests completed
hello.py:
from bottle import route, run, template

@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

P.S. С flask-werkzeug такого не происходит, там молотит достаточно быстро.

anonymous
()
Ответ на: комментарий от anonymous

Вот что сыплется в логи:

----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 38931)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 651, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 704, in finish
    self.wfile.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------

anonymous
()
Ответ на: комментарий от val-amart

в общем, вот что говорят люди [Андрей Усов/ownport] на эту тему:
«bottle.py удобно использоваться в качестве development сервера или как основу для небольшого фронтеда, внутреннего сервиса не ориентированного на большие нагрузки»

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.