Основные типы данных
boolean = True/False
integer = 10
float = 10.01
string = "123abc"
list = [ value1, value2, ... ]
dict = { key1: value1, key2: value2, ... }
Операции со строками
Слайсы в строках
Строки
my_string[0]
my_string = "Awesome"
my_string * 2
's' in my_string
my_string + "skypro"
Условия
Логические операторы
and
логическое И
or
логическое ИЛИ
not
логическое НЕ
Возвращает символ на позиции i
Объявляет строку
Повторяет строку дважды
Проверяет вхождение подстроки
Прибавляет строку к строке
my_string[1:3]
Выбирает элементы на позиции 1 и до 3
my_string[1:]
Выбирает элементы на позиции 1 и дальше
alien = { "color": "green", "points": 5 }
print("The alien’s color is " + alien["color"])
alien["x_position"] = 0
fav_number = {"eric": 17, "ever": 4}
for name, number in fav_number.items():
print(name + " loves " + str(number))
fav_number = {"eric": 17, "ever": 4}
for name in fav_number.keys():
print(name + " loves a number")
fav_number = {"eric": 17, "ever": 4}
for name in fav_number.values():
print(str(number) + ‘ is a favorite’)
Словари
if
in
<значение>
<список>:
<блок кода>
if
not in
<значение>
<список>:
<блок кода>
Вывод
Простой вывод
print("Hello world!")
Hello world с переменной
msg = "Hello world!"
print(msg)
По умолчанию всегда строка
Ввод
Подсказка для ввода строки
name = input("What’s your name? ")
Подсказка для ввода чисел
age = input("How old are you? ")
age = int(age)
pi = input("What’s the value of pi? ")
pi = float(pi)
print("Hello, " + name + "!")
Переменные и типы данных
Python Basics
Перебор списка
Циклы
i = 0
while i > 5:
➡i++
Управление циклами
break
Мгновенное прерывает цикл
continue
Переходт к след. итерации
pass
Ничего не делает
Диапазон
range(5)
Возвращает последовательность от 0 до 4
range(2000,2018)
Возвращает последовательность от 2000 до 2017
range(0,11,2)
Возвращает последовательность от 0 до 10, с шагом в 2
range(0,-10,-1)
Возвращает последовательность от 0 до -10, с шагом в -1
for item in ["a", "b", "c"]
➡print(item)
for item in range (0, 5):
➡️print(item)
Операции с числами
+
сложение
-
вычитание
*
умножение
/
деление
**
возведение в степень
%
остаток от деления
//
целочисленное деление
game_active
= True
can_edit
= False
If условие
if age >= 18:
print("You can vote!")
If - Elif - Else условие
if age < 4:
elif age < 18:
else:
ticket_price = 0
ticket_price = 10
ticket_price = 15
Типы и преобразование типов
str(a)
В строку
‘5’, ‘3.45’, ‘True’
int(a)
В число
5, 3, 1
float(a)
В число с пл. точкой
5.0, 1.0
bool(a)
В булево значение
True, True, True
Списки
Операции над списками
Переменные и многоуровневые списки
list = []
создать пустой список
list[i] = x
записывает x на позиции i
list[i]
возвращает элемент на позиции i
list[-1]
возвращает последний элемент
del list[i]
удаляет элемент с индексом i
Слайсы
Методы списков
list.append(x)
Добавляет значение x в конец списка
list.extend(L)
Добавляет список L в конец списка
list.insert(i,x)
Добавить x на позицию i
list.remove(x)
Удаляет элементы, равные x
list.pop(i)
Удаляет элемент на позиции i, возвращает его значение
list.clear()
Удаляет все элементы списка
list.index(x)
Возвращает позицию элементов = x
list.count(x)
Сколько в списке элементов = х
list.sort()
Сортирует элементы (есть опции)
list.reverse()
Инвертирует порядок элементов
list.copy()
Создает копию списка
a = "is"; b = "nice"; my_list = [a, b]
my_list2 = [[4,5,6,7],[3,4,5,6]]
my_list[1:3]
Выбирает элементы на позиции 1 и до 3
my_list[1:]
Выбирает элементы на позиции 1 и дальше
my_list[:3]
Выбирает элементы на позиции до 3
my_list[:]
Создает копию списка
Простой словарь
Получение значения
Добавление новой пары
Итерация по парам ключ-значение
Итерация по всем ключам
Итерация по значениям
Операции над словарями
dict = {}
Объявляет пустой словарь
dict[k] = x
Присваивает значение по ключу k
dict[k]
Получает значение по ключу k
del dict[k]
Удаляет пару по ключу k
Методы словарей
dict.keys()
Возвращает список ключей
dict.values()
Возвращает список значений
dict.items()
Возвращает пару (key,value)
dict.get(k)
Получает значение по ключу k
dict.pop(k)
Удаляет элемент c ключом k, возвращает его значение
dict.update(D)
Добавляет пары (D) в словарь
dict.clear()
Удаляет все пары из словаря
dict.copy()
Создает копию словаря
Операторы сравнения
==
равно
!=
отличается
>
больше
<
меньше
>=
больше или равно
<=
меньше или равно
Методы строк
string.upper()
Переводит в верхний регистр
string.lower()
Переводит в нижний регистр
string.count(x)
Сколько раз встречается х
string.find(x)
Позиция первого вхождения х или -1
string.replace(x,y)
Заменить в строке x на y
string.strip(x)
returns a list of values determited by x
string.join(L)
склеить коллекцию L c помощью string
"Привет {} !".format("Вася")
Заменяет {} на Вася
Условия со списками
HTML
<!DOCTYPE html>
<html lang=ru>
<head>
➡<meta charset="UTF-8">
➡<title>Название вкладки</title>
</head>
<body>
➡<h1> Красивое</h1>
➡<p> Для начала норм</p>
</body>
</html>
<ul>
➡<li>раз</li>
➡<li>раз</li>
➡<li>раз</li>
</ul>
<form action="https://httpbin.org/get">
➡<input name="email" />
➡<input type="submit" />
</form>
action = "/endpoint"
method = “GET”
value = "100500"
placeholder = "Телефон"
name = "phone"
type = "email"
radio
checkbox
text
password
Значение поля
Текст подсказки
Под каким именем отправим
Тип поля ввода
action = "http://сайт/путь"
method = “POST”
<ol>
➡<li>раз</li>
➡<li>раз</li>
➡<li>раз</li>
</ol>
<h1> Самый крутой </h1>
<h6> Самый мелкий </h6>
<p> Я параграф текста </p>
<p> Я тоже параграф текста </p>
<br /> Перенос строки
<main>
<strong> ✴️</strong> Полужирненький
<em> ✴️</em> Курсивненький
<u> ✴️</u> С подчеркиванием
<s> ✴️</s> С зачеркиванием
<hr /> Горизонтальный разделитель
<header>
<footer>
<nav>
<section>
<article>
<aside>
Шесть разных вариантов
<a href='/внутренняя'> видимый текст </a>
<img src="/внутренняя.png" />
<img src="http://site.com/внешняя.png" />
<a href='site.com/внешняя'> видимый текст </a>
<a href='#якорь'> видимый текст </a>
<div for='якорь'> Перейдет сюда</div>
Сайдбар (боковая колонка)
Блок статьи, например
Блок подвальчика
Блок шапочки
Блок основного контента
Блок контента с заголовком
Блок навигации
...
Настраиваем
Показываем
ru.wikipedia.org/wiki/Мнемоники_в_HTML
# Якорная
Внутренняя
Минимальная форма
Куда отправлять
Как отправлять
Внутренняя
Внешняя
Внешняя
Поля ввода <input>
Теги с атрибутами
Парные теги
Одиночные теги
Грамматика
<открылизакрыли свойство="значение" />
<открылизакрыли>
<открылизакрыли />
<открыли инструкция> ага </закрыли>
<открыли свойство="значение"> ага </закрыли>
<открыли> написали </закрыли>
Заголовки
Парарафы
Форматирование
Разделители
Семантическая разметка
Ссылки
Картинки
Списки
<table>
➡<tr> <td> 1️⃣ </td> <td> 2️⃣ </td></tr>
➡<tr> <td> 3️⃣</td> <td> 4️⃣ </td></tr>
</table>
Таблицы
Формы
Типы полей input
Минимальный документ
Правила
⚠️ Проверяем парность
⚠️ Закрываем кавычки у атрибутов
⚠️ Следим за отступами
⚠️ Проверяем тип ссылок у ссылок и картинок
⚠️ Весь текст контента храним в парарафах
Спецсимволы
CSS
Цвет текста
Фон любого блока
Какой шрифт
Какого размера
Поля снаружи
Ширина
Высота
Отступы внутри
Считать отступы частью ширины
Или
Толщина
Стиль линии
Цвет линии
Подчеркнем?
Какое выравнивание?
<link rel="stylesheet" href="css/style.css">
.class {
font-weight: bold;
}
h2 { color: red; }
<div class=”myclass”>
Текст тут
</div>
<h2>Заголовок тут</h2>
background-color: fuchsia;
color: #fc3;
font-family: Arial
border-width: 1px;
border: 1px solid red;
border-style: solid / dotted / dashed;
border-color: red;
font-size: 20px
text-decoration: none / underline /
text-align: left / right / center
margin-left: 10px;
padding-left: 10px;
margin-right: 10px;
padding-right: 10px;
margin-top: 10px;
padding-top: 10px;
margin-bottom: 10px;
padding-bottom: 10px;
width: 200px;
height: 200px;
box-sizing: border-box;
content
padding
border
margin
.row {display: flex;}
.row {display: flex;}
.col {flex: auto;}
h1 {
свойство : значение ;
свойство : значение ;
}
Селектор выбирает теги
Двоеточие отделяет свойство от значения
Точка с запятой разделяет правила
HTML
CSS
.col {flex: auto;}
.col {flex: auto;}
<div class="row">
<div class="col">Я первая</div>
<div class="col">Я вторая</div>
</div>
Размеры
Отступы и поля
Подключение стилей
Селекторы
Цвет и фон
Границы и рамки
Шрифты
Пример кнопки
a.button {
color: white;
background-color: #444;
padding: 4px;
margin: 16px;
border-radius: 10px;
}
Сетка
Пример формы
input {
border: 1px solid #ddd;
padding: 8px 4px;
border-radius: 10px;
background-color: #eee;
}
Простое приложение
Эндпоинт с квери параметром
from flask import Flask, request

...

@app.route('/search')

def search():
➡query = request.values.get("s")
➡return f“Выполняем поиск по {query}”

from flask import Flask, request

...

@app.route('/filter')

def search():
➡from = request.values.get("from")
➡to = request.values.get("to")
➡return f"Фильтруем {from} + {to}"

abc.com/?s=greeting=hello
abc.com/?from=3&to=6
@app.route('/')
def main():
➡return 'Здесь будет главная'
@app.route('/numbers/')
def working_with_numbers(num):
➡return 'Вы выбрали номер {num}'
Flask Basics
<form action="receive">
<input name="phone">
<input type="submit">
</form>
<form action="receive" method="POST">
<input name="phone">
<input type="submit">
</form>
Получение данных из GET форм
from flask import Flask, request

...

@app.route('/receive')
def page_enroll():
➡phone = request.form.get("phone")
➡return f"{phone}"

Обработка данных
Форма GET
Форма POST
@app.route('/', methods=['GET','POST'])
def upload_file():
➡if request.method == "POST":
➡➡ f = request.files['attachment']
➡➡ f.save(f.filename)
➡➡return 'Файлы загружены'
➡return render_template("index.html")
Обработка файлов
from flask import Flask, request

...

@app.route('/gojson')
def json_data():
➡title = request.json.get('title')
➡weeks = request.json.get('weeks')
➡return f'{title} {weeks}'

POST /gojson
{
"title": "Изучаем Flask",
"weeks": 4
}
Пример запроса
Получение JSON
from flask import Flask, jsonify

...

@app.route('/gojson')
def json_data():
➡data = {'title': 'Изучаем Flask', 'weeks': 4}
➡return jsonify(data)

Content-Type: application/json
{
"title": "Изучаем Flask",
"weeks": 4
}
Возвращает
Возвращение JSON
@app.errorhandler(404)
def not_found(e):
➡return "Ничего не нашлось!"
Обработка ошибок
Минимальное приложение
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
➡return 'Hello, World!'

app.run('0.0.0.0', 8000)
from flask import Flask, render_template

app = Flask (__name__)

@app.route('/')
def get_page():
➡return render_template ('index.html')
from flask import Flask , render_template

app = Flask(__name__)

@app.route("/")
def get_page():
➡title = "Страничка про нас"
➡return render_template("index.html", title=title)
Рендер шаблона
Установка
$ pip install Flask
Без данных
С данными
Эндпоинт без параметра
Эндпоинт с переменной
Jinja 2
Flask шаблоны
Рендер шаблона с данными
from flask import Flask , render_template

app = Flask(__name__)

@app.route("/")
def get_page():
➡title = "Страничка про нас"
➡return render_template("index.html", title=title)
Вывод переменной в шаблон
# templates/hello.html

<title>Привет, {{ name }}!</title>

<h1>Привет, {{ name }}!</h1>
Вывод словаря в шаблон
# templates/item.html

<h2>{{ item.title }}</h2>

<p class="price">{{ item.price }}</p>

<p class="cat">{{ item.category }}</p>
Условия в шаблоне
{% if is_in_store %}
➡Этот продукт доступен
{% endif %}
Циклы в шаблоне
{% if is_in_store %}
➡Этот продукт доступен
{% else %}
➡Этот продукт недоступен
{% endif %}
{% for item in items %}
➡<li>{{ item.href }}</li>
{% endfor %}
Вывод словаря в шаблон
# templates/item.html

<h2>{{ item.title }}</h2>

<p class="price">{{ item.price }}</p>

<p class="cat">{{ item.category }}</p>
{% for item in navigation %}
➡<a href="{{ item.href }}">{{ item.caption }}</a>
{% endfor %}
Сериализация
Создание API
Схема
Типы полей для сериализации
Импорт
Выполнение сериализации
Обработка GET запроса
Обработка ошибок
Обработка POST запроса
Наследуем от Schema
Строка
Указываем поля
Число
Булев тип
Десятичное число
Число с точкой
Указываем верный код
pip3 install marshmallow
from marshmallow import Schema, fields
user = db.session.query(User).get(1)
book_schema = BookSchema()
json_string = book_schema.dumps(user))
user = db.session.query(User).get(1)
book_schema = BookSchema()
book_data= book_schema.dump(user))
user = db.session.query(User).all()
book_schema = BookSchema()
book_data= book_schema.dumps(user, many=True))
user = db.session.query(User).all()
book_schema = BookSchema()
book_data= book_schema.dump(user, many=True))
@app.route('/users/<int:id>')
def get_users(uid):
➡data = {'name': 'Ivan'}
➡return jsonify(data)
@app.route('/hello)
def hello():
➡if ...:
➡➡return {“error”: “something s wrong”}, 400
@app.route('/test’, methods=['POST'])
def add_user():
➡data = request.json
➡print(“Данные обрабатываются ”, data )
➡return jsonify({“status”:”Данные обрабатываются”})
@app.route('/users')
def get_users():
➡data = [{'name': 'Ivan'} , {'name': 'Daria'}]
➡return jsonify(data)
# Импорт
from marshmallow import Schema, fields

# Это модель, в ней мы ничего не меняем
class Book(db.Model):
➡__tablename__ = 'books'
➡id = db.Column(db.Integer, primary_key=True)
➡name = db.Column(db.String)


# Описать сложную модель в виде класса схемы
class BookSchema(Schema):
➡id = fields.Int(dump_only=True)
➡name = fields.Str()

book = Book(id=1, name="Kolobok", author="people")

# Создать экземпляр схемы
book_schema = BookSchema()

# Выполнить метод схемы
json_string = book_schema.dumps(user))

print(json.string)
class BookSchema(Schema):
➡# список полей
➡name = fields.Str()
a = fields.Str()



a = fields.Int()
a = fields.Float()
a = fields.Decimal()
a = fields.Bool()
HTTP(S) Статус коды
200: OK

201: Created

204: No Content
300: Multiple Choices

301: Moved Permanently
400: Bad Request

401: Unauthorized

403: Forbidden

404: Not Found

405: Method Not Allowed
500: Internal Server Error

503: Service Unavailable
Установка
Стартовый код
Одну запись в строку
Одну запись в словарь
Список записей в строку
Одна запись
Несколько записей
Список записей в список словарей
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website