Язык программирования
Лекция № 8
Владимир Владимирович Руцкий rutsky.vladimir@gmail.com
|
|
Лекция № 8
Владимир Владимирович Руцкий rutsky.vladimir@gmail.com
|
|
Браузер
HTML (https://ru.wikipedia.org/wiki/HTML)
Самоучитель HTML4: http://htmlbook.ru/samhtml/vvedenie-v-html
Самоучитель HTML5: http://htmlbook.ru/samhtml5
CSS (https://ru.wikipedia.org/wiki/CSS)
Самоучитель: http://htmlbook.ru/samcss
JavaScript (https://ru.wikipedia.org/wiki/Javascript)
- Протокол HTTP (https://ru.wikipedia.org/wiki/HTTP).
- Методы GET, POST, HEAD
- Формы
- Cookie
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()
# Точка входа в 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')
# В 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()
При исполнении модуля "расшаривает" текущую директорию:
python -m http.server 8080
Установленный дистрибутив Python в Windows:
C:\Python33\
python.exe - интерпретатор (main)
pythonw.exe - интерпретатор без консоли (WinMain)
Tools\
Scripts\ - Python скрипты (часто добавляется в %PATH%)
2to3.py
...
Lib\ - стандартная библиотека
site-packages\ - сторонние библиотеки
pygame\
pygame-1.9.2a0-py3.3.egg-info
...
...
Установка через инсталлятор (Windows):
C:\>pygame-1.9.2a0-py3.3.msi
Установка через пакетный менеджер (GNU/Linux):
sudo apt-get install python-pygame
Установка из исходных кодов (Setuptools, Distribute — низкоуровневый Python-way):
# 1. скачать и распаковать исходные коды
# 2. запустить из директории с исходными кодами:
python.exe setup.py install
# А можно собрать msi из исходных кодов (или другие "пакеты")
# python.exe setup.py bdist_msi
# python.exe setup.py bdist_rpm
Использовать пакетный менеджер Python (сначала нужно его поставить):
# pip:
C:\Python33\Tools\Scripts\pip install pygame
# setuptools:
C:\Python33\Tools\Scripts\easy_install install pygame
В Python существует проблема с конфликтами версий библиотек при установке "в систему"
В качестве решения можно использовать virtualenv — виртуальная установка Python:
C:\scripts> C:\Python33\python.exe C:\Python33\Tools\Scripts\pyvenv.py env
или
C:\scripts> C:\Python33\python.exe -m venv env
Директория env будет содержать виртуальную установку Python:
C:\scripts\env
Include\
Lib\
site-packages\
...
...
Scripts\
python.exe
activate.bat
...
pyenv.cfg
В сессии shell можно "активировать" виртуальный Python:
C:\scripts> env\Scripts\activate.bat
(env) C:\scripts> python.exe # - будет использовать "виртуальный" python.exe
(env) C:\scripts> pip install Django # сначала нужно поставить pip, в Python 3.4 он уже есть
Или можно запускать скрипты, используя C:\scripts\env\Scripts\python.exe:
C:\pygame-src> C:\scripts\env\Scripts\python.exe setup.py install
Обычно для каждого проекта делается отдельный virtualenv с зависимостями только этого проекта
В PyCharm можно ставить библиотеки через кнопку Install в том же меню
Клиентов много. Очень много
Один сервер может обрабатывать десятки тысяч "холостых" запросов в секунду
Реальных запросов — на порядки меньше
Один сервер имеет ограниченный сетевой канал
Отклик сервера (или задержка, latency) зависит от взаимного географического положения сервера и клиента
Один сервер может сломаться — сложно реализовать отказоустойчивость
Вывод: одного сервера недостаточно
Таблица классов:
| ID класса | Название | Специализация |
|---|---|---|
| 1 | "11-1" | "физико-математический" |
| 2 | "11-2" | "математико-физический" |
Таблица учеников:
| ID ученика | Имя | Фамилия | ID класса |
|---|---|---|---|
| 1 | "Вася" | "Петров" | 1 |
| 2 | "Маша" | "Иванова" | 2 |
| 3 | "Коля" | "Сидоров" | 1 |
На основе туториала https://docs.djangoproject.com/en/1.6/
Создайте новый проект в PyCharm
Создайте virtualenv для этого проекта
Установите Django в virtualenv
Создайте проект Django в командной строке:
C:\scripts> env\Scripts\activate.bat
(env) C:\scripts> env\Scripts\django-admin.py startproject mysite
Запускаем сервер разработчика:
(env) C:\scripts> cd mysite
(env) C:\scripts\mysite> python.exe manage.py runserver
Validating models...
0 errors found
April 26, 2014 - 08:31:31
Django version 1.6.3, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Сервер доступен по адресу http://127.0.0.1:8000/
В интерактивных приложениях часто используют паттерн Model-View-Controller (Модель-Представление-Контроллер, MVC) или его производные
Приложение структурно и логически делится на: