Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2013-02-27

Flask and static files

Flask это такой микро веб-фреймворк на Python. Его задача генерировать контент а не обслуживать HTTP доступ к статичным файлам типа CSS/JavaScript/картинки. Однако, бывают случаи, как у меня, например, в Картобонус ака Cartobonus, когда приложение на Flask это лишь часть, подсистема веб-решения. В этом случае веб-страницы на Flask используют CSS/JavaScript из внешних по отношению к аппликухе папок. Ну и какие проблемы? Проблема вылезает при отладке Flask-приложения, когда используется его собственный HTTP сервер, который ничего не знает про внешние папки с файлами. Если без CSS еще можно жить, то без JavaScript уже невозможно.

Итак, как научить Flask отдавать статику из любой папки
@app.route('/cartobonus/<path:path>')
def sendStatic(path):
 pth = os.path.abspath(os.path.join(app.root_path, "..", path))
 return send_from_directory(os.path.dirname(pth), os.path.basename(pth))
В данном случае, корень /cartobonus/ ведет в папку c:\Inetpub\wwwroot\Apps\app5\
где в подпапках лежат всякие компоненты.
Фласк приложение сидит в файле c:\Inetpub\wwwroot\Apps\app5\wsgi\servlets_controller.py
посему переменная app.root_path ведет в папку c:\Inetpub\wwwroot\Apps\app5\wsgi\
Об остальном несложно догадаться.

Получается вполне удобно. При отладке используется отдача статики Flask, в продакшене этот метод никогда не работает. Для особой безопасности можно добавить проверку типа
if __name__ == '__main__':
    отправлять статику

Источник знания

Ой, чуть не забыл, фигня эта ваша Editra. Подсветки совпадений нет, автодополнение кривое, фактически не работает. Кодировка вывода в консоль не регулируется.

original post http://vasnake.blogspot.com/2013/02/flask-and-static-files.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) Klaipeda (13) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)