Devconf Svarga
Devconf Svarga
Александр Соловьëв
Кто здесь?
• Детерминированность окружения
• Модульность приложений
• Документация
Ложки дëгтя
• ORM
• Templates
• URLs
• Forms
• Команды
Django ORM
• Скорость — низкая
• Деградирует от вложенности (extends/include)
• Ограниченность синтаксиса
• Прячет Exception’ы
• Низкоуровневый парсер
Jinja2
{% macro render_post(post) %}
<time>{{ post.time }}</time> {{ post.title }}
{% endmacro %}
{% block content %}
<h1>{{ render_post(posts[0]) }}</h1>
{% for p in posts[1:] %}
<p>{{ render_post(p) }}</p>
{% endfor %}
{% endblock %}
urlresolvers vs Werkzeug
• Простой пример
url(r'(?P<name>\w{3,})', view)
Rule('<name(minlength=3)>', view)
options:
-l --listen ip to listen on (default: localhost)
-p --port port to listen on (default: 5000)
Выводы
@as_html('hello.html')
def hello():
return {'name': env.request.args['name']}
Глобальное окружение
app/__init__.py:
template:
{% extends "blog/base.html" %}
Модели
class Card(Model):
number = models.IntegerColumn()
class Question(Model):
card = models.ForeignKeyColumn(Card, backref='questions')
number = models.IntegerColumn()
class Answer(Model):
question = models.ForeignKeyColumn(Question, backref='answers')
SQLAlchemy FTW
q = (Question.objects
.eager(Question.card, Question.answers)
.filter_by(number=number)
.join(Card).filter_by(number=card)
.one())
Батарейки
• Сессии
• Аутентификация
• Админка (в процессе)
• Bundle'ы
Bundle
class TestBundle(bundle.Bundle):
@bundle.expose('/')
@as_html('test/entry.html')
def entry(self):
return {'param': 'eter'}
Bundle
urls = Map(
TestBundle('name1', '/prefix1'),
TestBundle('name2', '/prefix2'),
)
Админка
• Основана на bundle'ах
• Требует декларации
class SampleAdmin(ModelAdmin):
class Meta:
menu = ['Sample Admin', 'Test']
model = Sample
• Легко расширяется
Небезупречно
• Нас мало
• И документации тоже
(но библиотеки документированы)
• Тестов нет :(
• Готового кода немного
• Нет крупного коммерческого проекта за плечами
Утешение
• Нет застоя
• Использовать не страшно — кода немного
• Я рассказал не про все плюшки
(не забывайте об отладчике из Werkzeug ;-)
Welcome
• http://svarga.piranha.org.ua/
• irc://freenode.net/#svarga
• [email protected]