занятие

Содержание

Слайд 2

Проверка присутствия

Проверка присутствия

Слайд 3

КАКОЙ ТЭГ НУЖЕН ДЛЯ ...?

КАКОЙ ТЭГ НУЖЕН ДЛЯ ...?

Слайд 4

Параграф

Параграф


Слайд 5

Заголовки

Заголовки








Слайд 6

Перевод строки

Перевод строки

Слайд 7

Выделение жирным

Выделение жирным


Слайд 8

Универсальный блочный

Универсальный блочный


Слайд 9

Универсальный строчный

Универсальный строчный


Слайд 10

Выделение курсивом

Выделение курсивом


Слайд 11

Таблица - строки - заголовочные ячейки - ячейки данных

Таблица


- строки
- заголовочные ячейки
- ячейки данных

Слайд 12

ЗАЧЕМ НУЖЕН ...?

ЗАЧЕМ НУЖЕН ...?

Слайд 13

Заголовок страницы (окна браузера) Находится в тэге head


Заголовок страницы (окна браузера)
Находится в тэге head

Слайд 14

… title=“***” … Подсказка при наведении на элемент

… title=“***” …

Подсказка при наведении на элемент

Слайд 15

Привязка стилей, шрифтов, ... Находится в тэге head Атрибуты href rel type (до html5)


Привязка стилей, шрифтов, ...
Находится в тэге head
Атрибуты
href
rel
type (до html5)

Слайд 16

Изображение Атрибуты src width height


Изображение
Атрибуты
src
width
height

Слайд 17

Ссылка на другую страницу или якорь Атрибуты href


Ссылка на другую страницу или якорь
Атрибуты
href

Слайд 18

ЗАЧЕМ НУЖНО CSS СВОЙСТВО ...?

ЗАЧЕМ НУЖНО CSS СВОЙСТВО ...?

Слайд 19

display тип блока block inline inline-block …

display

тип блока
block
inline
inline-block

Слайд 20

padding-top: 10px; верхний внутренний отступ в 10 пикселей

padding-top: 10px;

верхний внутренний отступ в 10 пикселей

Слайд 21

margin-bottom: 15px; нижний внешний отступ в 15 пикселей

margin-bottom: 15px;

нижний внешний отступ в 15 пикселей

Слайд 22

КАКОЕ СВОЙСТВО НУЖНО ДЛЯ ...?

КАКОЕ СВОЙСТВО НУЖНО ДЛЯ ...?

Слайд 23

Ширина блочного контейнера width width: 50px; width: 25%;

Ширина блочного контейнера

width
width: 50px;
width: 25%;

Слайд 24

Фон с картинкой background-image background-image: url(‘../images/pic.jpg’); background background: #FFF url(‘../images/pic.jpg’) no-repeat;

Фон с картинкой

background-image
background-image: url(‘../images/pic.jpg’);
background
background: #FFF url(‘../images/pic.jpg’) no-repeat;

Слайд 25

Рамка border Черная сплошная толщиной в 1 пиксель border: solid 1px

Рамка

border
Черная сплошная толщиной в 1 пиксель
border: solid 1px #000;
Белая пунктиром толщиной

в 5 пикселей
border: dashed 5px #FFF;
Слайд 26

Высота блочного контейнера height height: 250px; height: 100%;

Высота блочного контейнера

height
height: 250px;
height: 100%;

Слайд 27

Внутренний отступ padding padding: 5px; padding: 5px 10px; padding: 5px 10px 15px 20px;

Внутренний отступ

padding
padding: 5px;
padding: 5px 10px;
padding: 5px 10px 15px 20px;

Слайд 28

Размер текста font-size font-size: 14px; font-size: 12pt; font-size: 1.2em; font-size: 110%;

Размер текста

font-size
font-size: 14px;
font-size: 12pt;
font-size: 1.2em;
font-size: 110%;

Слайд 29

Внешний отступ margin margin: 5px; margin: 5px 10px; margin: 5px 10px 15px 20px;

Внешний отступ

margin
margin: 5px;
margin: 5px 10px;
margin: 5px 10px 15px 20px;

Слайд 30

Цвет текста color color: white; color: #FFF; color: rgb(255, 255, 255);

Цвет текста

color
color: white;
color: #FFF;
color: rgb(255, 255, 255);

Слайд 31

Цвет фона background-color background-color: black; background-color: #000; background-color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0.5);

Цвет фона

background-color
background-color: black;
background-color: #000;
background-color: rgb(0, 0, 0);
background-color: rgba(0, 0, 0, 0.5);

Слайд 32

Какова реальная ширина блока? width: 100px; margin: 5px 15px; padding: 5px;

Какова реальная ширина блока?

width: 100px;
margin: 5px 15px;
padding: 5px;
Реальная ширина:
15 + 5

+ 100 + 5 + 15 = 140
Слайд 33

Какова реальная высота блока? height: 200px; margin: 10px 15px 20px 40px;

Какова реальная высота блока?

height: 200px;
margin: 10px 15px 20px 40px;
padding: 15px 10px;
border:

solid 2px black;
Реальная высота:
10 + 2 + 15 + 200 + 15 + 2 + 20 = 264
Слайд 34

WEB ПРОГРАММИРОВАНИЕ С FLASK

WEB ПРОГРАММИРОВАНИЕ С FLASK

Слайд 35

216.109.112.135 209.73.168.74 216.109.112.135 209.73.168.74 site.com GET http://site.com/posts/index.html Статические страницы

216.109.112.135

209.73.168.74

216.109.112.135
209.73.168.74
site.com
GET http://site.com/posts/index.html

Статические страницы

Слайд 36

216.109.112.135 209.73.168.74 216.109.112.135 209.73.168.74 site.com GET http://site.com/posts/ Список пользователей Главная |

216.109.112.135

209.73.168.74

216.109.112.135
209.73.168.74
site.com
GET http://site.com/posts/





Список пользователей

href="/static/styles/style.css">














Фамилия Имя Отчество
Яровая Мария Ивановна





Динамические страницы

Слайд 37

Задание Создать папку проекта Создать папку files Скопировать файлы в папку files Создать python файл app.py

Задание

Создать папку проекта
Создать папку files
Скопировать файлы в папку files
Создать python файл

app.py
Слайд 38

from flask import Flask app = Flask(__name__) @app.route("/") def home(): return

from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Привет, мир!"
@app.route("/about")
def about():

return "О нас"
if __name__ == "__main__":
app.run(debug=True)

# импортировать Flask
# создать объект сервера
# прописать путь для этой функции
# создать функцию главной страницы
# что вернуть браузеру
# прописать путь
# создать функцию страницы
# вернуть браузеру
# если запущен отсюда
# запустить сервер

Слайд 39

@app.route(“ПУТЬ_К_СТРАНИЦЕ”) def НАЗВАНИЕ_ФУНКЦИИ_СТРАНИЦЫ(): # обработка данных return ЧТО_ВЕРНУТЬ_КЛИЕНТУ

@app.route(“ПУТЬ_К_СТРАНИЦЕ”)
def НАЗВАНИЕ_ФУНКЦИИ_СТРАНИЦЫ():
# обработка данных
return ЧТО_ВЕРНУТЬ_КЛИЕНТУ

Слайд 40

Задание Запустить сервер (файл app.py) Открыть сайт в Chrome Открыть «/about»

Задание

Запустить сервер (файл app.py)
Открыть сайт в Chrome
Открыть «/about»

Слайд 41

Марина Карина Маша Оля names.txt Марина Карина Маша Оля

Марина
Карина
Маша
Оля

names.txt

Марина
Карина
Маша
Оля

Слайд 42

Задание Вернуть в функции home данные из файла names.txt names =

Задание

Вернуть в функции home данные из файла names.txt
names = list() with

open("files/names.txt", encoding="utf-8") as f: for raw_line in f: names.append(raw_line.strip())
return "
".join(names)
Слайд 43

Названия файлов и папок пробелы (“my new shoes.jpg”) русские (“фото.jpg”) lower_case

Названия файлов и папок

пробелы (“my new shoes.jpg”)
русские (“фото.jpg”)
lower_case (нижний регистр

без пробелов)
Windows – style.css = Style.css
UNIX – style.css ≠ Style.css
Слайд 44

MVC

MVC

Слайд 45

Задание Создать папку templates (именно ее!) Создать в ней файл index.html

Задание

Создать папку templates (именно ее!)
Создать в ней файл index.html
Добавить в импорт

render_template
from flask import Flask, render_template
Вернуть index.html в home
return render_template('index.html')
Слайд 46

Шаблонизатор Тэги (открывающие и закрывающие) {% tag_name %} Значения {{ var_name }}

Шаблонизатор

Тэги (открывающие и закрывающие)
{% tag_name %}
Значения
{{ var_name }}

Слайд 47

Задание Создать html файл names.html Добавить код страницы names, прописать путь

Задание

Создать html файл names.html
Добавить код страницы names, прописать путь «/names», вернуть

names.html
@app.route("/names") def names(): return render_template('names.html')
Слайд 48

Передача значений в шаблон #app.py name = "Владимир" return render_template(‘names.html', name=name)

Передача значений в шаблон

#app.py
name = "Владимир"
return render_template(‘names.html', name=name)
#names.html

Имя пользователя: {{ name

}}


Слайд 49

#app.py entities = list() with open("files/names.txt", encoding="utf-8") as f: for raw_line

#app.py
entities = list() with open("files/names.txt", encoding="utf-8") as f: for raw_line in f:

entities.append(raw_line.strip())
return render_template('names.html', entities=entities)
#names.html
{% for name in entities %}

{{ name }}


{% endfor %}
Слайд 50

Задание Создать папку static (именно ее!) папку css файл style.css папку

Задание

Создать папку static (именно ее!)
папку css
файл style.css
папку images
Прописать стили в head
/static/css/style.css

Слайд 51

Наследование шаблонов menu side bar content 1 контент главной страницы menu

Наследование шаблонов

menu

side
bar

content 1

контент главной страницы

menu

side
bar

content 2

page2.html

контент со списком пользователей

контент со списком

пользователей

контент главной страницы

контент c таблицей

контент c таблицей

index.html

index.html

users_list.html

table.html

Слайд 52

Задание Создать в папке templates html файл base.html и сделать шаблон

Задание

Создать в папке templates html файл base.html и сделать шаблон
Добавить блоки:
В

тэге title (head):
{% block title %}{% endblock %}
В body:
{% block content %}{% endblock %}
Слайд 53

{% block title %}Мой сайт{% endblock %} Главная | Таблица |






{%</div></h2><div class="slides-content">block title %}Мой сайт{% endblock %}





{% block content %}{% endblock %}




Слайд 54

Задание Наследоваться от base.html {% extends 'base.html' %} Переписать блоки: {%

Задание

Наследоваться от base.html
{% extends 'base.html' %}
Переписать блоки:
{% block title %}
{% block

content %}
Слайд 55

{% extends 'base.html' %} {% block title %}Главная{% endblock %} {%

{% extends 'base.html' %} {% block title %}Главная{% endblock %} {% block content

%}

Это контент главной страницы!

{% endblock %}
Слайд 56

Задание Создать страницу table: функцию table путь /table table.html, наследованный от

Задание

Создать страницу table:
функцию table
путь /table
table.html, наследованный от base.html
вернуть table.html
Скопировать код чтения

из файла. Заменить names.txt на humans.txt
Слайд 57

Бакарюк;Иван;Петрович Васильева;Марина;Львовна Иванова;Светлана;Петровна Петров;Максим;Витальевич Яровая;Мария;Ивановна humans.txt

Бакарюк;Иван;Петрович Васильева;Марина;Львовна Иванова;Светлана;Петровна Петров;Максим;Витальевич Яровая;Мария;Ивановна

humans.txt

Слайд 58

data = raw_line.strip().split(';') entities.append({'last_name': data[0], 'name': data[1], 'surname': data[2]}) data =

data = raw_line.strip().split(';')
entities.append({'last_name': data[0],
'name': data[1], 'surname': data[2]})
data = raw_line.strip().split(';')
keys

= ['last_name', 'name', ‘surname']
item = dict()
for i in range(len(data)):
item[keys[i]] = data[i]
entities.append(item)
Слайд 59

@app.route("/table") def table(): entities = list() with open('humans.txt', encoding="utf-8") as f:

@app.route("/table")
def table():
entities = list()
with open('humans.txt', encoding="utf-8") as f:
for

raw_line in f:
data = raw_line.strip().split(';')
entities.append({'last_name': data[0],
'name': data[1], 'surname': data[2]})
return render_template('table.html', entities=entities)

Код функции table

Слайд 60

{% extends 'base.html' %} {% block title %}Список пользователей{% endblock %}

{% extends 'base.html' %}
{% block title %}Список пользователей{% endblock %}
{% block

content %}






{% for item in entities %}





{% endfor %}
Фамилия Имя Отчество
{{ item.last_name }} {{ item.name }} {{ item.surname }}

{% endblock %}
Слайд 61

ДИНАМИЧЕСКИЙ URL

ДИНАМИЧЕСКИЙ URL

Слайд 62

Динамический url slug https://rc-like.ru/dji-spreading-wings-s900-kit http://www.pro-smm.com/kak-polzovatsya-sniply/ id https://habrahabr.ru/post/38434/ https://vk.com/id17022311

Динамический url

slug
https://rc-like.ru/dji-spreading-wings-s900-kit
http://www.pro-smm.com/kak-polzovatsya-sniply/
id
https://habrahabr.ru/post/38434/
https://vk.com/id17022311

Слайд 63

slug @app.route("/users/ ") id @app.route("/users/ ") slug @app.route("/posts/ ") id @app.route("/posts/ ")

slug
@app.route("/users/")
id
@app.route("/users/")
slug
@app.route("/posts/")
id
@app.route("/posts/")

Слайд 64

@app.route('/users/ ') def show_user_profile(username): # показывает профиль пользователя return 'User %s'

@app.route('/users/')
def show_user_profile(username):
# показывает профиль пользователя
return 'User %s' % username
@app.route('/posts/')
def

show_post(post_id):
# показывает статью по её id (int)
return 'Post %d' % post_id
Слайд 65

master129;Малахов;Арсений;Викторович;25/01/1993;+7(918)646-55-91 airfix;Мадатов;Василий;Евгеньевич;30/11/1995;+7(951)345-83-17 kr0ff;Малинин;Петр;Степанович;18/12/1996;+7(938)044-15-18 users.txt login;last_name;name;surname;birth_date;phone

master129;Малахов;Арсений;Викторович;25/01/1993;+7(918)646-55-91 airfix;Мадатов;Василий;Евгеньевич;30/11/1995;+7(951)345-83-17 kr0ff;Малинин;Петр;Степанович;18/12/1996;+7(938)044-15-18

users.txt

login;last_name;name;surname;birth_date;phone

Слайд 66

Задание Создать страницу users_list: функцию users_list путь /users users_list.html, наследованный от

Задание

Создать страницу users_list:
функцию users_list
путь /users
users_list.html, наследованный от base.html
вернуть users_list.html
Скопировать код чтения

файла из table.
Заменить humans.txt на users.txt
Добавить элементы (login, birth_date, phone)
Слайд 67

@app.route("/users") def users_list(): entities = list() with open('users.txt', encoding="utf-8") as f:

@app.route("/users")
def users_list():
entities = list()
with open('users.txt', encoding="utf-8") as f:
for

raw_line in f:
data = raw_line.strip().split(';')
entities.append({'login': data[0], 'last_name': data[1],
'name': data[2], 'surname': data[3],
'birth_date' : data[4], 'phone': data[5]})
return render_template('users_list.html', entities=entities)
Слайд 68

{% extends 'base.html' %} {% block title %}Список пользователей{% endblock %}

{% extends 'base.html' %} {% block title %}Список пользователей{% endblock %} {% block

content %} {% for item in entities %} {% endfor %}
Логин Фамилия Имя Отчество Дата рождения Номер телефона
{{ item.login }} {{ item.last_name }} {{ item.name }} {{ item.surname }} {{ item.birth_date }} {{ item.phone }}
{% endblock %}
Слайд 69

Задание Скопировать users_list в user_item: функцию user_item путь /users/ user_item.html, наследованный

Задание

Скопировать users_list в user_item:
функцию user_item
путь /users/
user_item.html, наследованный от base.html
вернуть user_item.html
+ код

чтения файла из users_list.
Слайд 70

Основные коды состояний 200 Ok (все норм) 403 Forbidden (доступ запрещен)

Основные коды состояний

200 Ok (все норм)
403 Forbidden (доступ запрещен)
404 Not Found

(не найден)
500 Server Error (ошибка сервера)
http://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP
Слайд 71

Задание Добавить к импорту abort from flask import Flask, render_template, abort

Задание

Добавить к импорту abort
from flask import Flask, render_template, abort
Выбрать пользователя

по login’у
Если такого login’а нет, то вызвать abort(404)
В шаблоне вывести данные о пользователе
Слайд 72

@app.route("/users/ ") def user_info(login): item = None with open('users.txt', encoding="utf-8") as

@app.route("/users/")
def user_info(login):
item = None
with open('users.txt', encoding="utf-8") as f:
for

raw_line in f:
data = raw_line.strip().split(';')
if data[0] == login:
item = {'login': data[0], 'last_name': data[1], 'name': data[2],
'surname': data[3], 'birth_date' : data[4], 'phone': data[5]}
break
if item is None:
abort(404)
return render_template('user_info.html', item=item)
Слайд 73

{% extends 'base.html' %} {% block title %}Пользователь {{ item.login }}{%

{% extends 'base.html' %}
{% block title %}Пользователь {{ item.login }}{% endblock

%}
{% block content %}

Фамилия: {{ item.last_name }}


Имя: {{ item.name }}


Отчество: {{ item.surname }}


Дата рождения: {{ item.birth_date }}


Номер телефона: {{ item.phone }}


{% endblock %}
Слайд 74

Слайд 75

Слайд 76