SlideShare a Scribd company logo
1 of 44
Download to read offline
Django. Дополнительные
темы.
Django Views
СергейЛихобабин
Техносфера.2014
Еще несколько слов о manage.py
Middleware
Сессии
Приложение auth
Class Based Views
Расширение фильтров итэгов в шаблонизаторе
Другие приложения из коробки
Оптимизация производительности
Management команды
Standalone скрипты
Задачидля cron'а
Пример команды
classCommand(BaseCommand):
help='Filldatabasewithtestdata'
defhandle(self,*args,**options):
foriinxrange(USER_COUNT):
user=User(
name=get_random_string(10),
email=get_random_email()
)
user.save()
self.stdout.write(
'Imported%dusers'%USER_COU
)
Middleware
Сценарии использования
Обработка запроса
Статистика
Аутентификация
Защита отCSRF
Редиректы
Кеширование
CSRF в Django
«Небезопасные» методы POST, PUTиDELETE
Установка cookie (csrftoken)
Установка hidden поля (csrfmiddlewaretoken) или
заголовка (X-CSRFToken)
Важные моменты
Для установкикукистраница должна отдаваться
динамически
Кука можетне ставиться, еслипередача
контекста идетчерез Contextвместо
RequestContext
Скрытое поле ставится тегом {%csrf_token %},
используйте RequestContext(функция render)
Токенв ajax запросахудобнее передавать
заголовком
Сессии
Сессиив БД
Фаиловые сессии
Сессиив куках
Использование сессий
deflogin(request):
username=request.POST.get('username')
try:
user=User.objects.get(username=username)
exceptUser.DoesNotExist:
returnHttpResponse("Nosuchuser")
ifuser.check_password(request.POST.get('password')
request.session['user_id']=user.id
returnHttpResponse("You'reloggedin.")
else:
returnHttpResponse("Wrongcredentials.")
Использование сессий
deflogout(request):
try:
delrequest.session['user_id']
exceptKeyError:
pass
returnHttpResponse("You'reloggedout.")
Декораторы
Пример декоратора
defmakebold(fn):
defwrapped():
return"<b>"+fn()+"</b>"
returnwrapped
defmakeitalic(fn):
defwrapped():
return"<i>"+fn()+"</i>"
returnwrapped
Пример декоратора
@makebold
@makeitalic
defhello():
return"helloworld"
//hello=makebold(makeitalic(hello))
printhello()##returns<b><i>helloworld</i></b>
Декораторы для Django
views
@require_POST
defvote_view(request):
#onlyPOSTmethodisallowed
pass
либо
url(r"^vote/",require_POST(vote)),
Декораторы для Django
views
Проверка HTTP-методов
Проверка прав доступа
Кеширование
Django auth
Возможности Django auth
Пользователи
Проверка прав доступа
Обработчикиlogin/logout
Интеграция с админкой
Кастомизация моделипользователя
Проверка авторизации во
views
defmy_view(request):
ifnotrequest.user.is_authenticated():
returnredirect(
'/login/?next=%s'%request.pa
)
user=request.user
@login_required
defmy_view(request):
...
Проверка авторизации в
шаблонах
{%ifuser.is_authenticated%}
Welcome,{{user.username}}
{%else%}
Pleaselogin.
{%endif%}
Class based views
Функция-обработчик.
Пример 1
defpost_detail(request,pk):
try:
object=Post.objects.get(pk=pk)
exceptPost.DoesNotExist:
raiseHttp404
returnrender(
request,'blog/post_detail.html',
{'object':object}
)
urlpatterns=patterns('',
url(
r'^post/(?P<pk>d+)/$',
post_detail,name= 'post_detail'
),
)
Класс-обработчик. Пример 1
classPostDetail(generic.DetailView):
model=Post
urlpatterns=patterns('',
url(
r'^post/(?P<pk>d+)/$',
PostDetail.as_view(),name= 'post_detai
),
)
Функция-обработчик.
Пример 2
defpost_list(request):
paginator=Paginator(Post.objects.all(),25)
page=request.GET.get('page')
try:
posts=paginator.page(page)
exceptPageNotAnInteger:
posts=paginator.page(1)
exceptEmptyPage:
posts=paginator.page(paginator.num_pages)
returnrender(
request,'blog/post_list.html',
{'object_list':posts}
)
Класс-обработчик. Пример
2
classPostList(generic.ListView):
model=Post
paginate_by=25
Функция-обработчик.
Пример 3
@login_required
defcategory(request,pk):
cat=get_object_or_404(Category,pk=pk)
post_list=Post.objects.filter(category=cat)
returnrender(request,'blog/category.html',{
'category':cat,
'post_list':post_list
})
Класс-обработчик. Пример
3
classCategoryListView(generic.ListView):
template_name='blog/category.html'
defget_queryset(self):
self.cat=get_object_or_404(
Category,pk=self.kwargs['pk']
)
returnPost.objects.filter(category=self.cat)
@method_decorator(login_required)
defdispatch(self,*args,**kwargs):
returnsuper(CategoryListView,self).dispatch(*
defget_context_data(self,**kwargs):
context=super(CategoryListView,self).get_con
context['category']=self.cat
Полезный справочник по
CBV
http://ccbv.co.uk/
Фильтры и теги в
шаблонизаторе
Построение урлов
classPost(models.Model):
@models.permalink
defget_absolute_url(self):
return('post_detail',(self.pk,))
#либо
defget_absolute_url(self):
returnreverse('post_detail',args=(self.pk,))
Построение урлов
<ahref="{{post.get_absolute_url}}">{{post}}</a>
<ahref="{%url'post_detail'post.pk%}">{{post}}</a
Фильтры и теги
Фильтры и теги
Тэг присваивания
Блочныйтэг
{%get_current_time
"%Y-%m-%d%I:%M%p"asthe_time%}
{%switch%}{%endswitch%}
Пример регистрации тэга
fromdjangoimporttemplate
fromblog.modelsimportPost
register=template.Library()
@register.inclusion_tag('blog/tags/lastposts.html')
deflast_posts():
return{'post_list':Post.objects.all()[:5]}
Использование в шаблонах
{%loadblog_tags%}
{%last_posts%}
<ul>
{%forobjectinpost_list%}
<li>
<ahref="{{object.get_absolute_url}}">
{{object}}
</a>
</li>
{%endfor%}
</ul>
Оптимизация
производительности
Особенности кэша
Быстрыйдоступк кешу
Высокая вероятность использования кеша
Временное хранилище
Кэш-бэкенды в Django
Memcached
База данных
Файловая система
Локальная память
Dummy(для разработки)
Уровни кэширования
Весь сайт
Контроллер
Часть шаблона
Часть данных(ручное управление)
Performance Best-practice
Профилируйте страницы с Django DebugToolbar
Используйте правильные индексы (db_index)
Делайте выборкипо тем полям, которые вам
нужны (методы only, values and values_list)
Доставайте только те объекты, которые будут
использованы
Не делайте лишнихзапросов к БД
Python не долженделать работуза БД(методы
count, exist)
DRY
KISS
Спасибо за внимание
СергейЛихобабин
s.lihobabin@corp.mail.ru

More Related Content

What's hot

Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7
Technopark
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark
 
Sql инъекции в тестировании
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестировании
ISsoft
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
Technopark
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
Technopark
 
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Ontico
 
Тестирование на проникновение в сетях Microsoft
Тестирование на проникновение в сетях MicrosoftТестирование на проникновение в сетях Microsoft
Тестирование на проникновение в сетях Microsoft
Dmitry Evteev
 

What's hot (18)

Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)
 
Sql инъекции в тестировании
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестировании
 
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условияхАнализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
Application security? Firewall it!
Application security? Firewall it!Application security? Firewall it!
Application security? Firewall it!
 
176023
176023176023
176023
 
Мобильный офис глазами пентестера
Мобильный офис глазами пентестераМобильный офис глазами пентестера
Мобильный офис глазами пентестера
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter edition
 
Введение в тему безопасности веб-приложений
Введение в тему безопасности веб-приложенийВведение в тему безопасности веб-приложений
Введение в тему безопасности веб-приложений
 
тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложений
 
Тестирование на проникновение в сетях Microsoft
Тестирование на проникновение в сетях MicrosoftТестирование на проникновение в сетях Microsoft
Тестирование на проникновение в сетях Microsoft
 
Тестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложенийТестирование уязвимостей веб приложений
Тестирование уязвимостей веб приложений
 

Viewers also liked

L13: Заключительная
L13: ЗаключительнаяL13: Заключительная
L13: Заключительная
Technosphere1
 

Viewers also liked (20)

Лекция 8
Лекция 8Лекция 8
Лекция 8
 
Поиск похожих изображений при помощи нейросетей. Виктор Лемпицкий, Артем Баб...
 Поиск похожих изображений при помощи нейросетей. Виктор Лемпицкий, Артем Баб... Поиск похожих изображений при помощи нейросетей. Виктор Лемпицкий, Артем Баб...
Поиск похожих изображений при помощи нейросетей. Виктор Лемпицкий, Артем Баб...
 
L13: Заключительная
L13: ЗаключительнаяL13: Заключительная
L13: Заключительная
 
Интегрировать сторонний продукт или пилить самим? К вопросу о выборе системы ...
Интегрировать сторонний продукт или пилить самим? К вопросу о выборе системы ...Интегрировать сторонний продукт или пилить самим? К вопросу о выборе системы ...
Интегрировать сторонний продукт или пилить самим? К вопросу о выборе системы ...
 
Петрова Ксения - Data mining на практике - dmlabs.org
Петрова Ксения - Data mining на практике - dmlabs.orgПетрова Ксения - Data mining на практике - dmlabs.org
Петрова Ксения - Data mining на практике - dmlabs.org
 
Webdev7 (2)
Webdev7 (2)Webdev7 (2)
Webdev7 (2)
 
Оценка потенциала игрового продукта по косвенным признакам / Борис Cиницкий д...
Оценка потенциала игрового продукта по косвенным признакам / Борис Cиницкий д...Оценка потенциала игрового продукта по косвенным признакам / Борис Cиницкий д...
Оценка потенциала игрового продукта по косвенным признакам / Борис Cиницкий д...
 
Web лекция 1
Web   лекция 1Web   лекция 1
Web лекция 1
 
Self Service BI. Как перейти от Excel к визуализации / Иван Климович для Data...
Self Service BI. Как перейти от Excel к визуализации / Иван Климович для Data...Self Service BI. Как перейти от Excel к визуализации / Иван Климович для Data...
Self Service BI. Как перейти от Excel к визуализации / Иван Климович для Data...
 
Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"
 
Лекция №1 "Задачи Data Mining"
Лекция №1 "Задачи Data Mining" Лекция №1 "Задачи Data Mining"
Лекция №1 "Задачи Data Mining"
 
Владивосток, форум "Рост". 20 ноября 2015
Владивосток, форум "Рост". 20 ноября 2015 Владивосток, форум "Рост". 20 ноября 2015
Владивосток, форум "Рост". 20 ноября 2015
 
Лекция №8 "Методы снижения размерности пространства"
Лекция №8 "Методы снижения размерности пространства" Лекция №8 "Методы снижения размерности пространства"
Лекция №8 "Методы снижения размерности пространства"
 
L11: Метод ансамблей
L11: Метод ансамблейL11: Метод ансамблей
L11: Метод ансамблей
 
Руководство по обучению сверточной нейронной сети для поиска ключевых точек о...
Руководство по обучению сверточной нейронной сети для поиска ключевых точек о...Руководство по обучению сверточной нейронной сети для поиска ключевых точек о...
Руководство по обучению сверточной нейронной сети для поиска ключевых точек о...
 
Как построить стратегию интернет-маркетинга
Как построить стратегию интернет-маркетингаКак построить стратегию интернет-маркетинга
Как построить стратегию интернет-маркетинга
 
Введение в искусственные нейронные сети
Введение в искусственные нейронные сетиВведение в искусственные нейронные сети
Введение в искусственные нейронные сети
 
Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение" Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение"
 
Лекция №11 "Основы нейронных сетей"
Лекция №11 "Основы нейронных сетей" Лекция №11 "Основы нейронных сетей"
Лекция №11 "Основы нейронных сетей"
 
Мастер-класс: Особенности создания продукта для мобильного веб
Мастер-класс: Особенности создания продукта для мобильного вебМастер-класс: Особенности создания продукта для мобильного веб
Мастер-класс: Особенности создания продукта для мобильного веб
 

Similar to Л8 Django. Дополнительные темы

Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Dmitry Andreev
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
Zestranec
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
Technopark
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Ilya Shalyapin
 

Similar to Л8 Django. Дополнительные темы (20)

Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
бегун
бегунбегун
бегун
 
бегун
бегунбегун
бегун
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Django Rest Framework vs Graph Ql
Django Rest Framework vs Graph QlDjango Rest Framework vs Graph Ql
Django Rest Framework vs Graph Ql
 
Приемочные тесты на огурце
Приемочные тесты на огурцеПриемочные тесты на огурце
Приемочные тесты на огурце
 
Как легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облакеКак легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облаке
 
API backend за несколько минут
API backend за несколько минутAPI backend за несколько минут
API backend за несколько минут
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Плюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизниПлюсы и минусы автоматизации, пример из жизни
Плюсы и минусы автоматизации, пример из жизни
 
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010Microsoft Visual Studio 2010
Microsoft Visual Studio 2010
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 

More from Technosphere1

More from Technosphere1 (20)

Лекция №13 "Глубокие нейронные сети"
Лекция №13 "Глубокие нейронные сети" Лекция №13 "Глубокие нейронные сети"
Лекция №13 "Глубокие нейронные сети"
 
Лекция №12 "Ограниченная машина Больцмана"
Лекция №12 "Ограниченная машина Больцмана" Лекция №12 "Ограниченная машина Больцмана"
Лекция №12 "Ограниченная машина Больцмана"
 
Лекция №9 "Алгоритмические композиции. Начало"
Лекция №9 "Алгоритмические композиции. Начало"Лекция №9 "Алгоритмические композиции. Начало"
Лекция №9 "Алгоритмические композиции. Начало"
 
Лекция №7 "Машина опорных векторов"
Лекция №7 "Машина опорных векторов" Лекция №7 "Машина опорных векторов"
Лекция №7 "Машина опорных векторов"
 
Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии" Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии"
 
Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes" Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes"
 
Лекция №4 "Задача классификации"
Лекция №4 "Задача классификации"Лекция №4 "Задача классификации"
Лекция №4 "Задача классификации"
 
Лекция №2 "Задача кластеризации и ЕМ-алгоритм"
Лекция №2 "Задача кластеризации и ЕМ-алгоритм"Лекция №2 "Задача кластеризации и ЕМ-алгоритм"
Лекция №2 "Задача кластеризации и ЕМ-алгоритм"
 
Л9: Взаимодействие веб-приложений
Л9: Взаимодействие веб-приложенийЛ9: Взаимодействие веб-приложений
Л9: Взаимодействие веб-приложений
 
Мастер-класс: "Интеграция в промышленную разработку"
Мастер-класс: "Интеграция в промышленную разработку"Мастер-класс: "Интеграция в промышленную разработку"
Мастер-класс: "Интеграция в промышленную разработку"
 
L10: Алгоритмы кластеризации
L10: Алгоритмы кластеризацииL10: Алгоритмы кластеризации
L10: Алгоритмы кластеризации
 
Webdev7: Обработка HTTP запросов. Django Views
Webdev7: Обработка HTTP запросов. Django ViewsWebdev7: Обработка HTTP запросов. Django Views
Webdev7: Обработка HTTP запросов. Django Views
 
L8: Л7 Em-алгоритм
L8: Л7 Em-алгоритмL8: Л7 Em-алгоритм
L8: Л7 Em-алгоритм
 
L7:Задача кластеризации. Метрики качества
L7:Задача кластеризации. Метрики качестваL7:Задача кластеризации. Метрики качества
L7:Задача кластеризации. Метрики качества
 
L6: Метод опорных векторов
L6: Метод опорных векторовL6: Метод опорных векторов
L6: Метод опорных векторов
 
L5: Л5 Байесовские алгоритмы
L5: Л5 Байесовские алгоритмыL5: Л5 Байесовские алгоритмы
L5: Л5 Байесовские алгоритмы
 
L4: Решающие деревья
L4: Решающие деревьяL4: Решающие деревья
L4: Решающие деревья
 
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессия
 
L2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибокL2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибок
 
L1 Вводная лекция. Обзор основных задач Data Science (Лекция №1)
L1 Вводная лекция. Обзор основных задач Data Science (Лекция №1)L1 Вводная лекция. Обзор основных задач Data Science (Лекция №1)
L1 Вводная лекция. Обзор основных задач Data Science (Лекция №1)
 

Л8 Django. Дополнительные темы