10 - Web-технологии. MVC фреймворки (продолжение)Roman Brovko1. Контроллеры в Django
2. Объекты HttpRequest и HttpResponse
3. Получение GET и POST параметров
4. Работа с HTTP заголовками в Django
5. Декораторы
6. Шаблонизация в Django
7. Наследование шаблонов
8. Context processors
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_PartyВалерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — проблемы и решения.
Конференция Dev Party (http://devparty.ru).
Вологда, 02.04.2016.
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"YandexСуществует большое количество разных HTML-шаблонизаторов, и, зная это, мы написали свой, экзотический! Мы расскажем о том, что получилось в итоге и зачем мы это сделали. А также подробнее остановимся на синтаксисе, семантике, оптимизации и компиляции шаблонов в эффективный JavaScript.
Сергей Максимов — BEMTREE — генерируй деревоYandexРассказ о том, как мы дошли до двухпроходной шаблонизации. Как можно шаблонизировать данные, если не верстка, а структура диктует построение шаблонов. И как мы генерируем БЭМ-дерево с помощью технологии BEMTREE.
11 - Web-технологии. Работа с СУБДRoman Brovko1. Реляционная модель данных
2. Проектирование баз данных
3. Работа с СУБД в Python
4. Работа с СУБД в Django
5. Понятие ORM, модели Django
6. Описание таблиц и связей в модели Django
7. Типы полей в моделях
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"YandexПисать сложный клиентский JavaScript непросто. Каждый, кто пробовал, знает это не понаслышке. Как писать независимые блоки? Как писать блоки, состоящие из других блоков? Как сделать библиотеку блоков? В докладе мы расскажем про то, как упростить себе жизнь и научиться писать клиентский JavaScript в БЭМ-терминах.
Mastering Declarative Database Schema - MageConf 2019Max PronkoMagento Open Source 2.3 gives us a very interesting and powerful tool called Declarative Schema. The declarative database schema allows to re-think our old-fashioned database upgrade scripts into nice and elegant declarative XML files. Let's see what we can do with Declarative Schema.
Продвинутое использование ActiveRecord в Yii2Paul KlimovЗапись лекции "Продвинутое использование ActiveRecord в Yii2" от 24.09.2016, проходившей в Киеве в "Projector"
http://prjctr.com.ua/events/yii2-conference.html
Примеры решения типичных задач за рамками ядра Yii2Paul KlimovРассмотрим сравнительно сложные, и в то же время, часто возникающие, задачи, для которых ядро Yii не дает готового решения. Посмотрим как из отдельных моделей ActiveRecord собирать единые сущности, и как разбивать большие модели на составляющие. Разберем как правильно сохранять файлы и как сэкономить на обработчиках событий и поведениях
- Интернационализация сущностей в базе данных;
- Обработка “ролей” в реляционных базах данных;
- Работа с файлами;
- Вложенные модели;
- Trait вместо Behavior.
Forms 2 - Drupal 6 - Полный контроль над формамиAndrii PodanenkoVlad Savitsky
Forms 2
DrupalCampKyiv 2010
RC3 bassani 2012Marco SiqueiraO documento fornece estatísticas e informações sobre a Stock Car em 2012, incluindo média de público de 35.000 pessoas nos circuitos, recorde de 45.000 em Ribeirão Preto. A maioria do público era homens (77%) entre 26-35 anos (38%). As corridas eram transmitidas ao vivo pela Rede Globo aos domingos e esportv durante a semana. O calendário de 2012 continha 12 etapas em diversas cidades brasileiras.
Measurement & ROI: How to get 1+1=3Tanya GonzalezEmployee wellness programs can provide a significant return on investment. Johnson & Johnson saved $250 million from 2002-2008 with a ROI of $2.71 for every dollar spent on their wellness program. A study found 57% of high-risk individuals converted to low-risk after a 6-month wellness program, saving $1,421 per participant in medical costs. Organizations with highly effective wellness programs report lower voluntary employee attrition. Moving just 10% of employees from high-to-low risk through a wellness program yielded a 6:1 ROI for one company. Lost productivity costs are over twice as high as direct medical costs, so wellness programs aimed at common conditions can boost productivity.
VmwareampdominguezEste documento proporciona instrucciones paso a paso para crear y configurar una máquina virtual en VMware Workstation. Explica cómo aceptar los términos de la licencia, seleccionar opciones preestablecidas para la configuración, elegir Windows XP como el sistema operativo, asignar un nombre y ubicación de almacenamiento, y no conectar la máquina virtual a una red. Finalmente, guía al usuario a través del proceso de instalación de Windows XP de forma virtual insertando el CD y ejecutando la máquina virtual.
Danianddaidguestb280d0The document is a birthday message expressing love and affection for the recipient. The writer tells the recipient that they are so in love with them and cannot explain the depth of their feelings. They hope the recipient dreams of them and is happy they chose to be with the writer, as being with the recipient makes the writer feel like they can fly. The writer signs off by wishing the recipient a happy birthday.
Co0de Magazineguestd6761aThis document contains a table of contents for a commented edition of K.U.'s HDD Filler Special Extra program. The table of contents lists various sections including creating EXE Builder, multiple MSN clients, DOS bot, and a manual for Google SEO in Romanian. The document also contains disclaimers stating that the program is solely for educational purposes and the author is not responsible for any damages caused by using the program. It indicates this is a beta version.
Feudalismo(2)olakease123El documento describe los orígenes y características principales del feudalismo en Europa. Señala que a partir del siglo IX se inició un proceso de feudalización basado en el establecimiento de feudos y señoríos, que generó estrictas relaciones jerárquicas de dependencia y dominó la economía, sociedad y cultura hasta el inicio de la Edad Moderna. También menciona las invasiones germánicas, el papel de Carlomagno, las causas económicas y las nuevas instituciones políticas como factores que contrib
Mastering Declarative Database Schema - MageConf 2019Max PronkoMagento Open Source 2.3 gives us a very interesting and powerful tool called Declarative Schema. The declarative database schema allows to re-think our old-fashioned database upgrade scripts into nice and elegant declarative XML files. Let's see what we can do with Declarative Schema.
Продвинутое использование ActiveRecord в Yii2Paul KlimovЗапись лекции "Продвинутое использование ActiveRecord в Yii2" от 24.09.2016, проходившей в Киеве в "Projector"
http://prjctr.com.ua/events/yii2-conference.html
Примеры решения типичных задач за рамками ядра Yii2Paul KlimovРассмотрим сравнительно сложные, и в то же время, часто возникающие, задачи, для которых ядро Yii не дает готового решения. Посмотрим как из отдельных моделей ActiveRecord собирать единые сущности, и как разбивать большие модели на составляющие. Разберем как правильно сохранять файлы и как сэкономить на обработчиках событий и поведениях
- Интернационализация сущностей в базе данных;
- Обработка “ролей” в реляционных базах данных;
- Работа с файлами;
- Вложенные модели;
- Trait вместо Behavior.
Forms 2 - Drupal 6 - Полный контроль над формамиAndrii Podanenko
Viewers also liked (6)
RC3 bassani 2012Marco SiqueiraO documento fornece estatísticas e informações sobre a Stock Car em 2012, incluindo média de público de 35.000 pessoas nos circuitos, recorde de 45.000 em Ribeirão Preto. A maioria do público era homens (77%) entre 26-35 anos (38%). As corridas eram transmitidas ao vivo pela Rede Globo aos domingos e esportv durante a semana. O calendário de 2012 continha 12 etapas em diversas cidades brasileiras.
Measurement & ROI: How to get 1+1=3Tanya GonzalezEmployee wellness programs can provide a significant return on investment. Johnson & Johnson saved $250 million from 2002-2008 with a ROI of $2.71 for every dollar spent on their wellness program. A study found 57% of high-risk individuals converted to low-risk after a 6-month wellness program, saving $1,421 per participant in medical costs. Organizations with highly effective wellness programs report lower voluntary employee attrition. Moving just 10% of employees from high-to-low risk through a wellness program yielded a 6:1 ROI for one company. Lost productivity costs are over twice as high as direct medical costs, so wellness programs aimed at common conditions can boost productivity.
VmwareampdominguezEste documento proporciona instrucciones paso a paso para crear y configurar una máquina virtual en VMware Workstation. Explica cómo aceptar los términos de la licencia, seleccionar opciones preestablecidas para la configuración, elegir Windows XP como el sistema operativo, asignar un nombre y ubicación de almacenamiento, y no conectar la máquina virtual a una red. Finalmente, guía al usuario a través del proceso de instalación de Windows XP de forma virtual insertando el CD y ejecutando la máquina virtual.
Danianddaidguestb280d0The document is a birthday message expressing love and affection for the recipient. The writer tells the recipient that they are so in love with them and cannot explain the depth of their feelings. They hope the recipient dreams of them and is happy they chose to be with the writer, as being with the recipient makes the writer feel like they can fly. The writer signs off by wishing the recipient a happy birthday.
Co0de Magazineguestd6761aThis document contains a table of contents for a commented edition of K.U.'s HDD Filler Special Extra program. The table of contents lists various sections including creating EXE Builder, multiple MSN clients, DOS bot, and a manual for Google SEO in Romanian. The document also contains disclaimers stating that the program is solely for educational purposes and the author is not responsible for any damages caused by using the program. It indicates this is a beta version.
Feudalismo(2)olakease123El documento describe los orígenes y características principales del feudalismo en Europa. Señala que a partir del siglo IX se inició un proceso de feudalización basado en el establecimiento de feudos y señoríos, que generó estrictas relaciones jerárquicas de dependencia y dominó la economía, sociedad y cultura hasta el inicio de la Edad Moderna. También menciona las invasiones germánicas, el papel de Carlomagno, las causas económicas y las nuevas instituciones políticas como factores que contrib
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...it-peopleБольшинство примеров тестов в книгах, семинарах и презентациях упрощены настолько, что их невозможно применить в реальных проектах. Из-за такого упрощения, сначала получаешь заряд мотивации, но столкнувшись с суровой действительностью быстро бросаешь написание тестов. Мы решили исправить этот пробел, показав тестирование на реальных примерах из нашей практики. Мы расскажем о тестировании баз данных, сетевых взаимодействий и веб-форм. Также расскажем об инструментах, которые мы используем для тестирования.
Вёрстка WordPress тем - WP Kharkiv Meetup #1dima_kuzovlevИз чего состоит тема? Зачем нужна дочерняя тема? Что такое иерархия шаблонов? Какие есть тонкости подключения CSS & JS? Для чего не стоит использовать functions.php?
12 - Web-технологии. Django моделиRoman Brovko1. Создание и изменение объектов
2. Загрузка данных из базы
3. QuerySet
4. ModelManagers
5. Расширение ModelManagers
6. Миграции баз данных
Лекция #6. Введение в Django web-frameworkЯковенко КириллWeb-программирование
Лекция #6. Введение в Django web-framework
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Лекция 11. Вычислительная модель PregelTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 14. Hadoop в Поиске Mail.RuTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 13. YARNTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 12. SparkTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 10. Apache MahoutTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 9. ZooKeeperTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 7. Введение в Pig и HiveTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 6. MapReduce в Hadoop (графы)TechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 5. MapReduce в Hadoop (алгоритмы)TechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 4. MapReduce в Hadoop (введение)TechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 3. Распределённая файловая система HDFSTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 2. Основы HadoopTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 1. Введение в Big Data и MapReduceTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №10 "Нереляционное решение в области баз данных — NoSQL". Лектор - Станислав Ступников.
Вводная часть посвящена определению и истории развития концепции NoSQL. Даются характеристики, рассказывается о способах использования. Рассматриваются виды NoSQL БД, теоретические основы NoSQL, а в конце лекции обсуждаются недостатки NoSQL-решений, а также проводится сравнение разных NoSQL-решений.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №10 "Нереляционное решение в области баз данных — NoSQL". Лектор - Станислав Ступников.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №9 "Безопасность баз данных"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №9 "Безопасность баз данных". Лектор - Павел Щербинин.
Открывается лекция рассказом о резервном копировании (о логических и физических резервных копиях, о выборе данных для копирования). Затем определяется терминология для обсуждения дальнейших вопросов. После этого рассматриваются основы учётных записей: таблицы доступа, привилегии, виды записей. Обсуждаются SQL-injection, список смежных вершин (Adjacency Set), вложенное множество (Nested Set), материализованный путь (Materialized Path) и комбинированный подход.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №8 "Конфигурирование базы данных"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №8 "Конфигурирование базы данных". Лектор - Павел Щербинин.
Сначала объясняются основы конфигурирования и общие принципы настройки. Далее рассказывается об области видимости, о настройке использования памяти, обсуждается размер блока ключей key_cache_block_size. Рассматривается устройство и использование кэша InnoDB, а также кэшей потоков и таблиц. Затем говорится об особенностях ввода/вывода в InnoDB. Далее рассказывается о табличном пространстве, оптимизации файловой сортировки, переменных состояния. Финальная часть лекции посвящена репликации: настройка, синхронизация, топология, планирование пропускной способности, администрирование и обслуживание, проблемы и их решения.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №7 "Оптимизация запросов и индексирование". Лектор - Павел Щербинин.
Вначале рассказывается об оптимизации доступа к данным, о декомпозиции соединения и состоянии запроса. Далее идёт большой блок, посвящённый оптимизатору запросов (изменение порядка соединения, применение алгебраических правил эквивалентности, оптимизации COUNT(), MIN(), MAX(), вычисление и свертка константных выражений, покрывающие индексы, оптимизация подзапросов, раннее завершение, сравнение по списку IN() и распространение равенства). Затем последовательно рассматриваются такие вещи, как соединение (JOIN) в MySQL, оптимизатор сортировки, коррелированные подзапросы, слияние и непоследовательный просмотр индексов, функции SELECT & UPDATE, COUNT(). После этого рассказывается об оптимизации запросов с помощью JOIN, GROUP BY, DISTINCT и LIMIT со смещением. В конце лекции даётся информация о кэшировании запросов, объединённых таблицах и секционировании.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №5 "Определение узких мест"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №5 "Определение узких мест". Лектор - Павел Щербинин.
Вначале рассказывается о подсистемах хранения: MyISAM, InnoDB, Memory, о критериях выбора подсистем хранения, приводятся практические примеры. Затем обсуждается тема индексирования (B-tree, хеш-индексы) и EXPLAIN (столбцы id, table, possible_keys, key, key_len).
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-запросы". Лектор - Павел Щербинин.
Лекция открывается рассказом о том, что такое профилирование запроса, каковы его этапы выполнения в MySQL. Рассказывается о том, как планировать запрос, как осуществляется протоколирование запросов, как собирается статистика. Объясняются основы индексирования, подробно обсуждаются стратегии индексирования для достижения высокой производительности: изоляция столбца, кластерные индексы (преимущества и недостатки), размещение данных в MyISAM и InnoDB, покрывающие индексы. Далее затрагивается тема нормализации и денормализации, а также таблиц счётчиков. В завершении рассказывается о версионировании схемы БД: о методах инкрементных изменений, идемпотентных изменений, уподобления структуры БД исходному коду.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
2. MVC
Model-view-controller – схема использования
нескольких шаблонов проектирования, с
помощью которых модель данных приложения,
пользовательский интерфейс и
взаимодействие с пользователем разделены
на три отдельных компонента так, что
модификация одного из компонентов
оказывает минимальное воздействие на
остальные.
3. Примеры
• Без MVC — в чистом виде PHP, ASP
• Реализации с неполным MVC — CPB
• C MVC — фреймворки CodeIgniter, Yii,
ASP.NET MVC Framework, Django, Pyramid,
Ruby on Rails
10. Подключаем приложение
vim myblog/settings.py
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'blog',
)
python manage.py syncdb
11. Модель
vim blog/models.py
from django.db import models
import datetime
class Category(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(blank=True)
def __unicode__(self):
return self.title
@models.permalink
def get_absolute_url(self):
return ('category_detail', (self.pk,))
12. Панель администрирования
vim myblog/urls.py
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('‘,
# url(r'^', include('blog.urls')),
# Uncomment the next line to enable the admin:
url(/slideshow/web-2012-7/25083547/r&)),
)
13. class Post(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
category = models.ForeignKey(Category)
creation_date = models.DateTimeField(default=datetime.datetime.now)
def previous_post(self):
"""Return the previous entry"""
entries = Post.objects.filter(
creation_date__lt=self.creation_date)[:1]
if entries:
return entries[0]
def next_post(self):
"""Return the next entry"""
entries =
Post.objects.filter( creation_date__gt=self.creation_date).order_
by('creation_date')[:1]
if entries:
return entries[0]
def __unicode__(self):
return self.title
@models.permalink
def get_absolute_url(self):
return ('post_detail', (self.pk,))
class Meta:
ordering = ['-creation_date']
20. Контроллеры
vim blog/views.py
#-*- coding: utf-8 -*-
from django.views.generic.simple import direct_to_template
from django.shortcuts import get_object_or_404
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from blog.models import Category, Post
def category(request, pk):
cat = get_object_or_404(Category, pk=pk)
post_list = Post.objects.filter(category=cat)
return direct_to_template(request, 'blog/category.html', {
'category': cat,
'post_list' : post_list
})
class PostList(ListView):
model = Post
class PostDetail(DetailView):
model = Post
21. Роутинг
vim blog/urls.py
from django.conf.urls import patterns, url
from blog.views import PostList, PostDetail
urlpatterns = patterns('',
(r'^$', PostList.as_view()),
url(/slideshow/web-2012-7/25083547/r&)/$',
PostDetail.as_view(), name='post_detail'),
url(/slideshow/web-2012-7/25083547/r&)/$',
'blog.views.category', name='category_detail'),
)
22. Шаблоны
vim myblog/settings.py
import os
def rel(*x):
return
os.path.join(os.path.abspath(os.path.dirname(__file__)),
* x)
TEMPLATE_DIRS = (
rel('../templates'),
# Put strings here, like "/home/html/django_templates"
or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative
paths.
)
30. Работа с формами
vim blog/forms.py
#-*- coding: utf-8 -*-
from django import forms
class ContactForm(forms.Form):
email = forms.EmailField(label=u'Ваш e-mail', max_length=100)
message = forms.CharField(label=u'Сообщение',
widget=forms.Textarea)
31. Работа с формами
vim blog/views.py
from blog.forms import ContactForm
from django.core.mail import send_mail
from django.http import HttpResponseRedirect
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
subject = u'Сообщение с блога'
message = form.cleaned_data['message']
sender = form.cleaned_data['email']
recipients = ['a.bekbulatov@corp.mail.ru']
send_mail(subject, message, sender, recipients)
return HttpResponseRedirect('/')
else:
form = ContactForm()
return direct_to_template(request, 'blog/contact.html', {
'form': form
})
32. Работа с формами
vim blog/urls.py
urlpatterns = patterns('',
(r'^$', PostList.as_view()),
url(/slideshow/web-2012-7/25083547/r&)/$', PostDetail.as_view(),
name='post_detail'),
url(/slideshow/web-2012-7/25083547/r&)/$', 'blog.views.category',
name='category_detail'),
(r'^contacts/$', 'blog.views.contact'),
)
33. Работа с формами
vim templates/blog/contact.html
{% extends "base.html" %}
{% block content %}
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Отправить" />
</form>
{% endblock %}