SlideShare a Scribd company logo
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
Л8 Django. Дополнительные темы
Сценарии использования
Обработка запроса
Статистика
Аутентификация
Защита отCSRF
Редиректы
Кеширование
Л8 Django. Дополнительные темы
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 (18)

PPTX
Web осень 2013 лекция 7
Technopark
 
PDF
Web осень 2013 лекция 6
Technopark
 
PDF
Web осень 2013 лекция 2
Technopark
 
PPTX
Тестирование на проникновение в сетях Microsoft (v.2)
Dmitry Evteev
 
PPTX
Sql инъекции в тестировании
ISsoft
 
PPT
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
Dmitry Evteev
 
PPTX
Web осень 2013 лекция 9
Technopark
 
PPTX
Application security? Firewall it!
Positive Hack Days
 
PPT
176023
whitepawn2012
 
PPT
Мобильный офис глазами пентестера
Dmitry Evteev
 
PPTX
Web осень 2013 лекция 8
Technopark
 
PDF
Максим Кочкин (Wamba)
Ontico
 
PPTX
Сессии и авторизация
Noveo
 
KEY
Безопасность веб-приложений: starter edition
Andrew Petukhov
 
PPT
Введение в тему безопасности веб-приложений
Dmitry Evteev
 
PPTX
тестирование защищенности веб приложений
Zestranec
 
PPTX
Тестирование на проникновение в сетях Microsoft
Dmitry Evteev
 
PPTX
Тестирование уязвимостей веб приложений
SQALab
 
Web осень 2013 лекция 7
Technopark
 
Web осень 2013 лекция 6
Technopark
 
Web осень 2013 лекция 2
Technopark
 
Тестирование на проникновение в сетях Microsoft (v.2)
Dmitry Evteev
 
Sql инъекции в тестировании
ISsoft
 
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
Dmitry Evteev
 
Web осень 2013 лекция 9
Technopark
 
Application security? Firewall it!
Positive Hack Days
 
Мобильный офис глазами пентестера
Dmitry Evteev
 
Web осень 2013 лекция 8
Technopark
 
Максим Кочкин (Wamba)
Ontico
 
Сессии и авторизация
Noveo
 
Безопасность веб-приложений: starter edition
Andrew Petukhov
 
Введение в тему безопасности веб-приложений
Dmitry Evteev
 
тестирование защищенности веб приложений
Zestranec
 
Тестирование на проникновение в сетях Microsoft
Dmitry Evteev
 
Тестирование уязвимостей веб приложений
SQALab
 

Viewers also liked (20)

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

More from Technosphere1 (20)

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

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