Pull to refresh
  • by relevance
  • by date
  • by rating

Flask-Admin

Python *Flask *
Доброе время суток.

Хочу представить проект, над которым работал в последнее время: Flask-Admin. Если в двух словах, это расширение для фреймворка Flask, которое позволяет быстро создавать административный интерфейс в стиле Django.
Читать дальше →
Total votes 46: ↑45 and ↓1 +44
Views 44K
Comments 22

Вышло обновление PyCharm до версии 2.6 с диаграммами классов, Flask, Python 3.3 и улучшенным редактором CSS/Sass/LESS

JetBrains corporate blog Python *Django *
Даже находясь частично на проходящем сейчас в Вашингтоне DjangoCon'е (а может и благодаря этому) мы смогли таки выпустить сегодня большое обновление самой мощной среды разработки для Python & Django — PyCharm 2.6.

С прошлого релиза в апреле мы сделали следующее:
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 8.6K
Comments 29

PyGA: использование трекинга Google Analytics в бекенде, написанном на Python

Python *Programming *
Для недавно сделанного мной в рамках изучения Flask микросервиса shares.datagreed.ru мне захотелось отслеживать переходы по разным адресам API. Как это сделать, если Google Analytics интегрируется в страницу посредством JS?

Вот и я тоже не знал. Поиск привел меня к официальной библиотеке на PHP для мобильных сайтов, на которых не предполагалось (когда-то) использовать JavaScript.

Дальнейшие мои изыскания вылились в небольшой модуль для питона, который позволяет использовать трекинг страниц (ивенты, увы, не поддерживаются) Google Analytics со стороны сервера. Штатно в библиотеку влючены классы для Django и Flask. Класс для Flask в данный момент развернут и обкатывается у меня на shares.datagreed.ru, а класс для Django я пока что не тестировал, так что багрепорты приветствуются.

Читать дальше →
Total votes 24: ↑20 and ↓4 +16
Views 6.2K
Comments 8

DneprPy #1 — Great Python Web Framework Showdown (Днепропетровск)

Ciklum corporate blog
Близится тот волнительный миг, когда 23 февраля гостеприимный офис Ciklum распахнет свои двери перед участниками DneprPy#1.

Мы проведём Great Python Web Framework Showdown, где на примере одного проекта участники расскажут про свой любимый фреймворк:
 за команду Django будут играть Андрей Ткаченко и Иван Колодяжный
 знамя Pyramid будет нести Николай Скрыпник
 честь Flask будет защищать Егор Назаркин

DneprPy#1
Total votes 3: ↑2 and ↓1 +1
Views 2.6K
Comments 0

Новые версии Flask и Werkzeug с поддержкой питона 3.3

«NetAngels» corporate blog Website development *Python *


Армин Ронахер опубликовал в своем блоге новость об обновлении популярных веб-фреймоворков для питона: Flask и лежащего в его основе Werkzeug. Самым главным изменением стала поддержка питона 3 версии (начиная с 3.3 и выше). Также низкоуровнеый API Werkzeug был несколько изменен, чтобы с одной стороны реализовать поддержку спецификации из PEP 3333, а с другой — не потерять в производительности. С новой версией теряется поддержка питона версии 2.5.

Если вы используете Werkzeug, то, с обновленной версией, возможно, придется повозиться. Что касается Flask — то тут все несколько проще, т.к. API не сильно изменился.

Важно заметить, что Flask и Werkzeug в определенном смысле несколько затянули обновлением, ведь наиболее популярные компоненты, составляющие стандартный стек фласк-приложения: шаблонный движок Jinja2 и ORM SQLAlchemy уже достаточно продолжительное время поддерживают питон третьей версии. К слову, в свое время, Армин критиковал у себя в блоге слишком радикальные изменения языка, и довольно холодно отзывался о третьей версии.
Пара слов о других изменениях
Total votes 36: ↑35 and ↓1 +34
Views 11K
Comments 49

Расширенный «Hello! World» на микрофреймворке Flask

Lumber room
Sandbox
image

Добрый день, хабраюзер.

Не так давно мы с другом начали делать небольшую текстовую игрушку в рамках фантастического проекта «Версум». В статье я хочу рассказать о тех проблемах, с которыми нам пришлось столкнутся, а так же о том, какие пути решения нами были выбраны.

Мы используем Python, в частности микрофреймворк Flask.
Читать дальше →
Total votes 40: ↑37 and ↓3 +34
Views 6.2K
Comments 7

Thunderargs: практика использования. Часть 2

Abnormal programming *Python *Programming *
Tutorial
История создания
Часть 1

Добрый день. Вкратце напомню, что thunderargs — библиотека, которая даёт использовать аннотации для обработки входящих аргументов.

Кроме того, она даёт возможность достаточно просто накидать гейт, который будет эти самые аргументы для функции вытаскивать откуда-нибудь ещё. Например, из объекта request во фласке. И в итоге мы вместо

@app.route('/ugly_calc', dont_wrap=True)
def ugly_calc():
    x, y = int(request.args['x']), int(request.args['y'])
    op_key = request.args.get('op')
    if not op_key:
        op_key = '+'
    op = OPERATION.get(op_key)
    return str(op(x, y))

делаем
@app.route('/calc')
def calc(x:Arg(int), y:Arg(int), op:Arg(str, default='+')):
    return str(OPERATION[op](x, y))


Думаю, все хотя бы примерно поняли о чём будет речь в статье. Всё, что в ней описано — размышления о будущем проекта и примерная расстановка «майлстоунов» по нему. Ну и, разумеется, первые наброски всяких-разных фич.

В этой части


  • Рассмотрим структурные изменения в проекте и пару критических ошибок в изначальной структуре
  • Разберёмся как работают валидаторы и как можно кастомизировать выдаваемые ими ошибки
  • Создадим зачатки специализированных аргументов (IntArg, StrArg, ListArg и так далее)
  • Подготовим класс, который будет автоматически вытаскивать объект из базы по id, поступившему в запросе
  • Будем генерировать точки входа по классу модели
  • Реализуем листенеры и посмотрим как можно сделать валидатор для нескольких аргументов
  • Убедимся, что информацию о структуре аргументов можно смело переносить в БД, и ничего нам за это не будет
  • И, наконец, порассуждаем о мелких интересностях, так и не реализованных в рамках этих экспериментов

Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Views 2.8K
Comments 4

Кэширование фронтэнда: Flask, Nginx+Memcached+SSI

High performance *Website development *Python *Flask *
Достаточно давно мне на глаза попались следующие статьи по этой тематике:

С PHP я дружу, поэтому попробовал примеры и убедился, что это работает. Но всё это имело «фатальные недостатки» :) — PHP, а я фанат Python и по работе занимаюсь в основном бэкендом. Серьёзно говоря, применить на практике это не представлялось возможным.

Однако в начале года поступило предложение поучаствовать в одном амбициозном проекте, изначально подразумевающий HiLoad и прочие плюшки из этой оперы. Пока составлялись бизнес-планы, искались инвесторы и тому подобные дела, я решил изучит вопросы которые на мой взгляд пригодились бы в этой работе, в том числе и вопросы кэширования.

В первую очередь было реализовано черновое решение для моего любимого фрэймворка Flask использующее для кэширования стек Varnish+ESI. Это заработало и даже показало неплохие результаты. Позже пришло понимание, что возможно Varnish «лишний игрок» и всё тоже и даже гибче можно получить на связке Nginx+Memcached+SSI. Был сделан и этот вариант, по производительности особых отличий замечено не было, но последний показался более гибким и управляемым.

Тот проект не вырулил даже на взлетную полосу, или вырулил но без меня. Подумав, я решил «причесать код» и выложить его в OpenSource и на суд общественности.
Читать дальше →
Total votes 31: ↑28 and ↓3 +25
Views 16K
Comments 30

Мега-Учебник Flask, Часть 1: «Привет, Мир!»

Website development *Python *Flask *
Translation
Tutorial
Это первая статья в серии, где я буду документировать мой опыт написания веб-приложения на Python, используя микрофреймворк Flask.

Здесь список всех статей в серии:
Часть 1: Привет, Мир!
Часть 2: Шаблоны
Часть 3: Формы
Часть 4: База данных
Часть 5: Вход пользователей
Часть 6: Страница профиля и аватары
Часть 7: Unit-тестирование
Часть 8: Подписчики, контакты и друзья
Часть 9: Пагинация
Часть 10: Полнотекстовый поиск
Часть 11: Поддержка e-mail
Часть 12: Реконструкция
Часть 13: Дата и время
Часть 14: I18n and L10n
Часть 15: Ajax
Часть 16: Отладка, тестирование и профилирование
Часть 17: Развертывание на Linux (даже на Raspberry Pi!)
Часть 18: Развертывание на Heroku Cloud

Моя предыстория


Я разработчик ПО с двузначным числом лет опыта разработки комплексных приложений на нескольких языках. Впервые я познакомился с Python для создания привязок к C++ библиотеке на работе. Вдобавок к Python, я писал веб-приложения на PHP, Ruby, Smalltalk и, верите вы или нет, еще на С++. Из всего этого, я нахожу комбинацию Python/Flask самой гибкой.
Я хочу начать это долгое и удивительное путешествие
Total votes 63: ↑60 and ↓3 +57
Views 439K
Comments 31

Мега-Учебник Flask, Часть 2: Шаблоны

Website development *Python *
Translation
Tutorial
Это вторая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение


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

microblog\
  flask\
    <файлы виртуального окружения>
  app\
    static\
    templates\
    __init__.py
    views.py
  tmp\
  run.py


Для запуска приложения вы запускаете скрипт run.py, затем открываете url http://localhost:5000 в вашем браузере.
Читать дальше →
Total votes 41: ↑39 and ↓2 +37
Views 144K
Comments 6

Мега-Учебник Flask, Часть 3: Формы

Website development *Python *Flask *
Translation
Tutorial
Это третья статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение


В предыдущей части мы определили простой шаблон для домашней страницы и использовали мнимые объекты в качестве прототипов вещей, которых у нас еще нет. К примеру пользователи или записи.

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

Формы являются одними из самых основных блоков в любом веб-приложении. Использование форм позволит пользователям оставлять записи в блоге, а также логиниться в приложение.

Чтобы следовать этой части, ваше приложение микроблога должно быть таким, каким мы оставили его в конце предыдущей. Пожалуйста, убедитесь, что прилолжение установлено и работает.
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 112K
Comments 6

Мега-Учебник Flask, Часть 4: База данных

Website development *Python *Flask *
Translation
Tutorial
Это четвертая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение


В предыдущей части мы создали нашу форму входа в комплекте с представлением и валидацией.

В этой статье мы намереваемся создать нашу базу данных и поднять ее, чтобы мы могли записывать туда наших пользователей.

Чтобы следовать этой части, ваше приложение микроблога должно быть таким, каким мы оставили его в конце предыдущей. Пожалуйста, убедитесь, что прилолжение установлено и работает.
Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Views 125K
Comments 13

Flask и загрузка файлов: success story

Website development *Python *

Добрый вечер, Хабраюзер. Хочу поделиться небольшим опытом ограничения размера загружаемого файла. Весь опыт получен эмпирическим путем.

Как выглядело ТЗ:
  1. В шаблоне создаем формочку с полем для файлов
  2. На сервере проверяем расширение файла и его размер
  3. Если все условия удовлетворяются — загружаем файл и сохраняем ссылку в БД

Все выглядит просто, но печаль настигла меня при проверке размера файла. Как я решил эту проблему? Добро пожаловать под хабракат.
Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Views 27K
Comments 5

Peewee – лёгкая, гибкая и очень быстрая ORM на Python

Website development *Python *
Tutorial
image

Предлагаю всем джангистам/алхимистам немного отвечься и почитать вольную интерпретацию вводного туториала и частично документации по Peewee – stand-alone ORM, обязательной к ознакомлению любому питонщику и, в особенности, фласкеру. Пишут о ней мало, а зря. С Peewee очень просто подружиться, особенно если вы уже знакомы с какой-нибудь ORM на ActiveRecord. Что более важно – с ней приятно дружить :) Ну, начнём.


Установка
С pip:
pip install peewee


Из репозитория:
git clone https://github.com/coleifer/peewee.git cd peewee python setup.py install


Тесты:
python setup.py test


Есть обвязка для flask:
pip install flask-peewee



Определение моделей или «попахивает джангой»


Весь нижеследующий код можно повторить один к одному в интерактивном интерпретаторе или отдельном скрипте.

from peewee import *

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()

    class Meta:
        database = db  # модель будет использовать базу данных 'people.db'


Типов полей много, на все случаи жизни. Peewee берёт на себя преобразование питоновских объектов в значения, подходящие для базы данных, и наоборот.
Читать дальше →
Total votes 50: ↑48 and ↓2 +46
Views 77K
Comments 46

Мега-Учебник Flask, Часть 5: Вход пользователей

Website development *Python *Flask *
Translation
Tutorial

Предисловие от переводчика.
Переводом предыдущих частей этого руководства занимался wiygn. С его согласия я продолжаю это дело.


Это пятая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.



Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.





Краткое повторение


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



В этой статье мы объединим наши знания о веб-формах и базах данных и напишем свою систему для входа пользователей. В конце данного руководства наше небольшое приложение будет регистрировать новых пользователей и проводить их авторизацию.



Для работы с этой главой ваше приложение должно быть таким, каким мы оставили его в конце предыдущей главы. Пожалуйста, убедитесь, что приложение установлено и работает.



Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Views 85K
Comments 10

Один вариант использования аннотаций

Abnormal programming *Python *Programming *
Сразу хочу объявить, что здесь под аннотациями подразумеваются НЕ декораторы. И я не знаю по какой причине декораторы иногда именуют аннотациями.

Недавно я открыл для себя что в питоне есть фишка, которую я очень давно искал — аннотации к функциям. Это — возможность пихнуть в декларацию функции какую-либо информацию по каждому отдельному её параметру.

Вот каноничный пример из PEP:

def compile(source: "something compilable",
            filename: "where the compilable thing comes from",
            mode: "is this a single statement or a suite?"):
    ...


Там же, чуть ниже, приводятся примеры, которые дают понять, что комментирование параметров — не единственное возможное использование данной фичи. Это натолкнуло меня на мысль об одной старой беде, которая досаждала моей нервной системе уже приличное время. А именно — получение данных из форм во Flask.

Читать дальше →
Total votes 26: ↑24 and ↓2 +22
Views 13K
Comments 7

Мега-Учебник Flask, Часть 6: Страница профиля и аватарка

Website development *Python *
Sandbox
Tutorial
Это шестая статья в серии, где я буду документировать мой опыт написания веб-приложения на Python, используя микрофреймворк Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение

В прошлой статье мы создали систему авторизации, сейчас пользователи могут авторизоваться на сайте используя OpenID.

Сегодня мы будем работать с профилем пользователя. Сперва, создадим страницу профиля, на которой будет показываться информация о пользователе, и его постах, так же мы научимся показывать аватарку. А потом мы создадим форму редактирования личных данных.
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Views 28K
Comments 0

Мега-Учебник Flask, Часть 7: Unit-тестирование

Website development *Python *
Translation
Tutorial
Это седьмая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение


В предыдущих частях этого руководства мы постепенно развивали наш микроблог, шаг за шагом добавляя новые возможности. К этому времени наше приложение умеет использовать базу данных, может регистрировать и авторизовывать пользователей, а также позволяет им редактировать собственные данные в профиле.

Сегодня мы не будем добавлять новых возможностей. Вместо этого мы постараемся сделать уже написанный код более устойчивым, а также создадим свой фреймворк, который в будущем поможет нам предотвратить возможные сбои.

Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 30K
Comments 3

Thunderargs: практика использования. Часть 1

Website development *Python *Programming *
Tutorial
Недавно я писал пост про то, как был придуман и написан thunderargs. Сегодня я раccкажу о том, как его можно применять.

Напомню, что эта штука предназначена для обработки параметров функции при помощи аннотаций. Например, так:

OPERATION = {'+': lambda x, y: x+y,
             '-': lambda x, y: x-y,
             '*': lambda x, y: x*y,
             '/': lambda x, y: x/y,
             '^': lambda x, y: pow(x,y)}

@Endpoint
def calculate(x:Arg(int), y:Arg(int),
                       op:Arg(str, default='+', expander=OPERATION)):
    return str(op(x,y))


Постараемся по ходу тутора решать вполне определённые проблемы, а не какие-то эфемерные задачки. Ну а теперь — к делу.

Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Views 5.5K
Comments 2

Как создать легенду

Open source *OpenStreetMap *Geoinformation services *
Много лет назад я участвовал в бреветах: велосипедных марафонах, где поодиночке и неспеша (но с ограничением по времени) нужно проехать от 200 до 1200 километров. Медитативное занятие, когда есть время насладиться природой, напеть все песни, рассмотреть легенду и карту маршрута… Которые удручают: часто это обычная таблица из экселя с беспорядочным оформлением, а карта факультативна. Петербуржский клуб «Балтийская звезда» продвинутее многих: участники его бреветов всегда получали карту — правда, тёмно-серую, с тёмно-серым маршрутом и КП на чёрных выносках. Не очень удобно. А поскольку я увлёкся OpenStreetMap, я почувствовал, что в силах улучшить дизайн легенд. И приступил ко второй попытке (первую, шестилетней давности, стыдно вспоминать).


Читать дальше →
Total votes 99: ↑96 and ↓3 +93
Views 33K
Comments 20