close

Вход

Забыли?

вход по аккаунту

?

ОСНОВЫ ВЕБ-РАЗРАБОТКИ. ЛЕКЦИЯ 3

код для вставкиСкачать
4
Основы webтехнологий
Стыценко Илья, Исаев Денис
Азы Django
1.  Краткое содержание предыдущих серий
2.  Django
2
Что такой фреймворк?
•  А правда, что это?
•  А зачем так?
3
Почему Django?
•  А правда, почему?
•  Особенности Django
•  MVC
4
Роли компонентов MVC
• 
• 
• 
• 
Router - выбор конкретного controller по URL
Model - реализация бизнес-логики приложения
Controller - работа с HTTP, связь controller и view
View - генерация HTML или другого
представления
5
MVC
6
Структура проекта django
manage.py - скрипт управления проектом
settings.py - настройки
urls.py - роутер
wsgi.py - точка входа
остальное - в приложениях
7
Django приложения
Приложения - способ распространения кода в
Django инфраструктуре.
Либо просто способ логической организации
кода.
./manage.py startapp questions - создание нового
приложения
используемые приложения добавляются в
settings.py (в INSTALLED_APPS)
8
MVC в django приложениях
MVC
Django
Model
models.py
Router
urls.py
Controller
views.py
View
templates/
9
Основные файлы приложения
• 
• 
• 
• 
• 
models.py - модели, бизнес-логика
views.py - контроллеры
urls.py - URL роутер данного приложения
templates - директория с шаблонами
management/commands - консольные команды
приложения
•  static - CSS, JavaScript, картинки
•  migrations - миграции для обновления базы
данных
10
Очень коротко о моделях
models.py
from django.db.models import *
class Article(models.Model):
title = models.CharField(max_length=255)
text = models.TextField()
./manage.py makemigrations
./manage.py migrate
11
Очень коротко об админке
./manage.py createsuperuser
from django.contrib import admin
from .models import Article
admin.site.register(Article)
12
Контроллеры в Django
Контроллеры в Django - это обычные функции,
которые:
•  принимают объект django.http.HttpRequest
первым параметром
•  возвращают объект django.http.HttpResponse
13
HttpRequest
• 
• 
• 
• 
• 
• 
• 
• 
request.method - метод запроса
request.GET - словарь с GET параметры
request.POST - словарь с POST параметрами
request.COOKIES - словарь c Cookie
request.FILES - загруженныe файлы
request.META - CGI-like переменные
request.session - словарь-сессия (*)
request.user - текущий пользователь (*)
14
HttpResponse
Преподаватель: А давайте посмотрим на
примере?
Аудитория: Давайте, давайте, здоровско вы
придумали!
15
Роутинг в Django
•  ROOT_URLCONF
•  urlpatterns
•  если ничего не нашлось - 404 Not Found
16
Захват параметров из URL
неименованным параметром
url(r'^blabla/(\d+)/$', ’view_name')
именованным параметром
url(r'^blabla/(?P<pk>\d+)/$', ’view_name')
17
Разнесение роутеров по приложениям
urlpatterns = [
url(r'^$', 'blog.views.home', name='home'),
url(r’^blogs/', include('blog.urls')),
url(r'^admin/', include('admin.site.urls')),
]
18
Правила хорошего тона
•  Можно и нужно разносить роуты по
приложениям
•  Можно и нужно создавать именованые роуты
•  Одно действие – один роут – один контроллер
19
Специальные типы ответов
from django.http import (
HttpResponseRedirect, HttpResponseNotFound,
HttpResponseForbidden,
HttpResponsePermanentRedirect
)
redirect = HttpResponseRedirect("/")
# 302
redirect = HttpResponsePermanentRedirect("/") # 301
response = HttpResponseNotFound()
# 404
response = HttpResponseForbidden()
# 403
20
Получение GET и POST параметров
request.GET
request.POST
оба - объекты класса QueryDict
21
class-based views
Невероятно облегчают жизнь при описании
рутинных задач
from django.views.generic import View
class MyView(View):
def get(request):
…
22
QueryDict
/path/?id=3&id=4&id=5
Получение множественных значений
id = request.GET.get('id') # id is 5
id = request.GET.getlist('id') # id is [3,4,5]
Сериализация
qs = request.GET.urlencode()
# qs is 'id=3&id=4&id=5'
23
Представления в Django,
шаблонизаторы
•  Разделение работы web-мастера и
программиста
•  Повторное использование HTML кода
•  Более чистый python код
24
Вызов шаблонизатора
from django.shortcuts import render
render(request, 'questions/question.html', {
'question': question,
'answers': answers,
})
25
Подход через TemplateView
from django.views.generic.base import TemplateView
class HomePageView(TemplateView):
template_name = "home.html"
def get_context_data(self, **kwargs):
context = super(HomePageView, self).get_context_data(**kwargs)
context[’name'] = ‘vasya’
return context
26
Синтаксис шаблонов
<html>
<head>...</head>
<body>
<h1>Questions</h1>
<p>{{ tag.title }}></p>
{% for question in questions %}
{% include "questions/question.html" %}
{% endfor %}
</body>
</html>
27
Возможности шаблонизатора
•  {% for item in list %}{% endfor %} - итерация по
списку
•  {% if var %}{% endif %} - условное отображение
•  {% include "tpl.html" %} - включение подшаблона
•  {{ var }} - вывод переменной
•  {{ var | truncatechars:9 }} - применение фильтров
•  {# comment #}, {% comment %}{% endcomment %}
- комментарии
28
Доступ к свойствам и методам
Через точку можно получить свойство, метод,
ключ либо индекс объекта:
•  {{ object.content }}
•  {{ name.strip }}
•  {{ info.avatar }}
•  {{ post_list.0 }}
Передавать параметры методам запрещено:
•  {{ post_list.order_by('id') }} <!-- ошибка -->
•  {{ post_list.delete }}
29
Наследование шаблонов
30
Базовый шаблон base.html
<!DOCTYPE HTML>
<html>
<head>
<title>{% block title %}Q&A{% endblock %}</title>
{% block extrahead %}{% endblock %}
</head>
<body>
<h1>Вопросы и ответы</h1>
{% block content %}{% endblock %}
</body>
</html>
31
Шаблон главной страницы
{% extends "base.html" %}
{% block title %}
{{ block.super }} – главная
{% endblock %}
{% block content %}
{% for obj in post_list %}
<div class="question">
<a href="{{ obj.build_url }}">{{ obj }}</a>
{{ obj.created_date|date:"d.m.Y" }}
</div>
{% endfor %}
{% endblock %}
32
Спасибо за
внимание!
Стыценко Илья, Исаев Денис
skype: sat2707
mailto: stycenko@corp.mail.ru
Не стесняемся спрашивать!
Автор
tekhnostrim
Документ
Категория
Без категории
Просмотров
805
Размер файла
512 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа