Введение в python и django
DESCRIPTION
Лекция на тему "Введение в Python и Django". Ляпун Тарас Хмельницкий 29 августа 2014TRANSCRIPT
Введение в Python и Django Ляпун Тарас, Хмельницкий, 2014
Мой опыт
История Python• Появился в 1991 году
• Автор - Гвидо Ван Россум
• Назван в честь телешоу «Летающий цирк Монти Пайтона»
• Python 1.0 - January 1994
• Python 2.0 - October 16, 2000
• Python 3.0 - December 3, 2008
• Текущие версии:
• Python 2.7.8
• Python 3.4.1
– JAMES IRY «A Brief, Incomplete, and Mostly Wrong History of Programming Languages»
http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html
“1991 - Dutch programmer Guido van Rossum travels to Argentina for a mysterious operation.
He returns with a large cranial scar, invents Python, is declared Dictator for Life by legions of followers, and announces to the world that
"There Is Only One Way to Do It." Poland becomes nervous.”
Основные черты языка
• Высокоуровневый
• Интерпретируемый
• Open Source (Python Software Foundation License)
• Динамическая типизация
• Автоматическое управление памятью
• Полная интроспекция
• Все является объектом
–http://python.org/
“Python is a programming language that lets you work more quickly and integrate your systems more effectively. You can learn to use Python and see almost immediate gains
in productivity and lower maintenance cost.”
Главные преимущества
• Ориентирован на повышение производительности разработчика и на читаемость кода
• Компактный
• Портируемость
• Легко расширяемый с помощью C\C++
Мультипарадигменный язык программирования
• Структурное
• Объектно-ориентированное
• Функциональное
• Императивное
• Аспектно-ориентированное
• Мета
Влияние других языков• ABC — отступы для группировки операторов, высокоуровневые структуры данных (map)
• Modula-3 — пакеты, модули, использование else совместно с try и except, именованные аргументы функций
• С, C++ — некоторые синтаксические конструкции
• Smalltalk — объектно-ориентированное программирование;
• Lisp — отдельные черты функционального программирования (lambda, map, reduce, filter и другие);
• Fortran — срезы массивов, комплексная арифметика;
• Miranda — списочные выражения;
• Java — модули logging, unittest, threading, xml.sax стандартной библиотеки, совместное использование finally и except при обработке исключений, использование @ для декораторов;
• Icon — генераторы.
Влияние на другие языки
• Ruby
• Boo
• Groovy
• ECMAScript (JavaScript)
• CoffeeScript
Реализации
PyS60 Pyjamas
Кто использует
Интерактивная консоль 1/3
Интерактивная консоль 2/3
Интерактивная консоль 3/3
Философия Python (PEP - 020)
Синтаксис
Типы и структуры данных 1/4
Типы и структуры данных 2/4
Типы и структуры данных 3/4
Типы и структуры данных 4/4
Приведение типов
Строки
Списки 1/3
Списки 2/3
Списки 3/3
Генераторы списков (List comprehension)
Словари 1/3
Словари 2/3
Словари 3/3
Условные операторы
Нету switch’a
Циклы 1/2
Циклы 2/2
Функции
Обработка исключений
Классы 1/2
Классы 2/2
• Классы являются объектами
• Множественное наследование, mixins
• Полиморфизм
• Перегрузка операторов (например <, >, ==, +, -, *, etc)
• Нету настоящих private методов\атрибутов. По конвенции приватные методы\атрибуты начинаются с _ (нижнего подчеркивания)
• Нет полноценных интерфейсов, но есть абстрактные классы
• ООП без заморочек
• Метапрограммирование
Дескрипторы
Контекст менеджеры
Декораторы
Генераторы
Ленивые вычисления
Функциональное программирование 1/2
Функциональное программирование 2/2
• Функция является объектом
• Функция объект высшего порядка
• Рекурсия (нет оптимизации хвостовой рекурсии)
• Развитая обработка списков
• Замыкания
• Частичное применение функции (partial)
• fn.py (https://github.com/kachayev/fn.py)
Система модулей
# main.py from .utils import something from utils.date import something2 from utils import * # не рекомендуется, но можно from any_lib import something3 import utils.helpers as helpers something() helpers.something()
Стандартная библиотека
socket, select, SocketServer, BaseHTTPServer, asyncore, asynchat, xmlrpclib, SimpleXMLRPCServer, urllib, httplib, ftplib, smtpd, poplib, impalib, json, getopt, optparse, argparse, fileimput, cmd, readline, subprocess, threading, multiprocessing, Queue, anydbm, pickle, csv, shelve, sqlite3, etc
Пример отличного API - json
Пример отличного API - requests
Где искать библиотеки
• https://pypi.python.org/pypi - the Python Package Index
• http://guide.python-distribute.org/ - The Hitchhiker’s Guide to Packaging
• https://github.com/vinta/awesome-python - A curated list of awesome Python frameworks, libraries and software.
• Bonus: https://github.com/bayandin/awesome-awesomeness
PIP
Virtualenv
• Изолированное python окружение
• Разные версии библиотек на разных проектах
• virtualenvwrapper
• В Python3 из коробки
PEP (Python Enhancement Proposal)
• PEP - документ предоставляющий общую информацию о языке
• Сначала создается PEP, потом новая фича языка
• PEP-8 - правила оформления кода
• PEP-3000 - описывает переход на Python 3
• PEP-20 - zen of Python
GIL
• Global Interpreter Lock
• Python потоки - родные потоки (POSIX потоки на Unix)
• Может быть только один выполняемый поток в одну единицу времени
• Масштабируем процессами
• Пишем асинхронный код, или используем «зеленые» треды
Debugging
• pdb - встроенный отладчик
• ipdb - ipython для встроенного отладчика
• pudb - визуальный отладчик
Testing
• unittest - стандартная библиотека
• nose - утилиты для тестирования, test discovering
• pytest - новая модная библиотека для тестирования
• mamba - BDD
• pyvows - BDD
• Splinter - обертка над Selenium
• mock - моки (в Python 3 из коробки)
• httpretty - моки для веб ресурсов
• tox - тестирование со всеми версиями Python
Linting
• Flake8 - pep8, pyflakes
• Pylint - analyzer
• Prospector - everything together
Текстовые редакторы \ IDE
• vim + plugins
• emacs + plugins
• Sublime Text + plugins
• PyCharm
• Eclipse + PyDev plugin
Использование Python
«Классическая» веб - разработка
Асинхронные веб\сетевые приложения
Twisted
gevent asyncio
Научные, математические вычисления
Научные, математические вычисления
Machine Learning
scikit-learn
PyBrain
Natural Language Processing
NLTK Pattern
GUI
TkInter
PyQT
Базы данных
peewee
Игры
DevOps
Web scrapping
BeautifulSoupRoboBrowser
MechanicalSoup
Как учить?
Быть в курсе
Конференции 1/3
• PyCon Ukraine - http://ua.pycon.org (1-2 ноября)
• Kyiv.py (27 сентября #13)
• Kharkiv.py
• Lviv.py
• Odessa.py
• http://meetup.com/uapycon/
Конференции 2/3
• PyCon US (2003 год - 200 участников, 2013-2014 - 2500)
• EuroPython (с 2002 года)
• New Zealand, Singapore, Argentina, Australia, Bangladesh, Brazil, Canada, China, Germany, Finland, France, India, Ireland, Italy, Japan, Philippines, Poland, South Africa, Taiwan, United Kingdom, Ukraine Venezuela Python
Конференции 3/3
• SciPy
• PyData
• DjangoCon US
• DjangoCon Europe
Кто использует
История Django
• 2003 - появился (Adrian Holovaty, Simon Willison)
• 2005 - первый релиз (лицензия BSD)
• Июнь 2008 - Django Software Foundation
• Текущая версия 1.6
• В сентябре - 1.7
Django MVC
• MVC - Model - View - Controller
• MTV - Model - Template - View
Django CLI
Django ORM
Django ORM
Django ORM
• Поддержка sqlite, mysql, postgresql, oracle
• Active record
• Транзакции
• ForeignKey, OneToOneField, ManyToManyField
• Авто создание базы, миграции (начиная с 1.7)
• JsonField, ArrayField, HstoreField с помощью дополнительных библиотек
• Multidatabase support
Django Routing
Django Views (function based)
Django Views (Class based)
Django Templates
Django Forms
Django Middleware
Django Middleware
Django Admin
Django Admin (Django-Suit)
Security
• Cross site scripting (XSS) protection
• Cross site request forgery (CSRF) protection
• SQL injection protection
• Clickjacking protection
• SSL/HTTPS
• Host header validation
• Session security
MISC• Development server
• Authentication, Authorization
• Caching system
• Testing Framework
• RSS, Atom
• Static pages
• i18n, l10n
• Pagination
• Timezone
• GeoDjango
• Logging
• Sending emails
• Messages framework
• Serialization
• Sitemaps
• Static file management
• Signals
• Sites framework
• Context processors
• Custom tags, filters
Django строительные блоки
• pip install django-*
• add to INSTALLED_APPS
• register routing
• ENJOY
• https://www.djangopackages.com/
Best apps
• Sentry - logging exceptions
• Haystack - integrate search engines (ElasticSearch, Solr)
• Tastypie, Django-Rest-Framework - REST
• django-extensions - a lot of cool stuff
• Celery - background jobs
• sorl-thumbnail - thumbnails
• django-storages - s3, gridfs, etc
• django-debug-toolbar - кол-во запросов к базе, время загрузки, и т.д.
• django-compressor - сжатие и обработка статики
Django готовые решения
• Django CMS (+ Django Shop)
• Mezzanine (+ Mezzanine Cart)
• Oscar
• Pinax
• Djedi-CMS
• Fein-CMS
• Opps-CMS
• Wagtail CMS
• Widgy CMS
WSGI
• Web Server Gateway Interface
• Описывает как веб сервер общается с веб приложением
• И как веб приложение компонуется для обработки запроса
• PEP-3333
Deployment
Как учить?
Как учить?
Вопросы
• @tlyapun
• github/lyapun
• facebook/taras.lyapun