Язык программирования

Лекция № 8

Владимир Владимирович Руцкий rutsky.vladimir@gmail.com

_images/cgsg.png _images/pml30.png
1

План занятия

2

Чат на Python

3

Основы web-программирования

4

HTML

5

CSS

6

JavaScript

7

HTTP

8

Веб-сервер на Python

import http.server
import socketserver

class MyHandler(http.server.BaseHTTPRequestHandler):
    def do_HEAD(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

        self.wfile.write("""\
            <!DOCTYPE html>
            <html>
            <head>
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
              <title>Заголовок окна</title>
            </head>
            <body>
              <h1>Заголовок страницы</h1>
              <p>Параграф с <b>жирным</b> и <i>наклонным</i> текстом.</p>
            </body>
            </html>
            """.encode('utf-8'))

if __name__ == "__main__":
    server = http.server.HTTPServer(('localhost', 8080), MyHandler)
    print('Started http server')
    server.serve_forever()
9

WSGI

10

Пример клиента WSGI

# Точка входа в web-приложение на Python — Python модуль
# Модуль должен создать глобальный объект `application',
# который будет вызываться при поступлении запроса

def application(environ, start_response):
    # В качестве объекта используем просто функцию

    # Вызываемый объект принимает словарь с специально сформированными
    # переменными окружения (содержит запрашиваемый путь, переданные параметры
    # в GET и POST и т.п.)

    # В соответствии с тем, какой ресурс или действие были запрошены,
    # подготавливаем ответ.

    # Выводим заголовки ответа
    start_response('200 OK', [('Content-Type', 'text/plain')])

    # Выводим ответ
    yield b'Hello World!\n'

    # Выводим доступные переменные
    import pprint
    yield pprint.pformat(environ).encode('utf-8')
11

Пример сервера WSGI

# В Python есть реализация WSGI-совместимого сервера
# Также можно использовать модули Apache/Nginx/IIS для запуска WSGI клиентов
from wsgiref.validate import validator
from wsgiref.simple_server import make_server

# "Запускаем" клиента
import wsgi_client

# Получаем из клиента объект application и оборачиваем его в валидатор
validator_app = validator(wsgi_client.application)

# Создаём и запускаем сервер
httpd = make_server('', 8010, validator_app)
print("Listening on port 8010...")
httpd.serve_forever()
12

HTTP клиенты на Python

13

http.server

14

Назначение директорий Python

15

Установка библиотек в Python

16

Конфликты версий библиотек

17

Virtualenv

18

Установка библиотек в Virtualenv

19

Virtualenv в PyCharm

В PyCharm можно ставить библиотеки через кнопку Install в том же меню

20

Назначение веб-приложений

21

Серверов должно быть много

22

Масштабирование

23

Статический контент

24

Динамический контент

25

Базы данных

26

Кеширование

27

Реляционные БД

Таблица классов:

ID класса Название Специализация
1 "11-1" "физико-математический"
2 "11-2" "математико-физический"

Таблица учеников:

ID ученика Имя Фамилия ID класса
1 "Вася" "Петров" 1
2 "Маша" "Иванова" 2
3 "Коля" "Сидоров" 1
28

Введение в Django

29

Туториал Django

На основе туториала https://docs.djangoproject.com/en/1.6/

30

Структура проекта на Django

31

Паттерн MVC

32

MVC в Django

33