Введение в python и django

112
Введение в Python и Django Ляпун Тарас, Хмельницкий, 2014

Upload: taras-lyapun

Post on 24-May-2015

1.276 views

Category:

Software


4 download

DESCRIPTION

Лекция на тему "Введение в Python и Django". Ляпун Тарас Хмельницкий 29 августа 2014

TRANSCRIPT

Page 1: Введение в Python и Django

Введение в Python и Django Ляпун Тарас, Хмельницкий, 2014

Page 2: Введение в Python и Django

Мой опыт

Page 3: Введение в Python и Django

История 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

Page 4: Введение в Python и Django

– 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.”

Page 5: Введение в Python и Django

Основные черты языка

• Высокоуровневый

• Интерпретируемый

• Open Source (Python Software Foundation License)

• Динамическая типизация

• Автоматическое управление памятью

• Полная интроспекция

• Все является объектом

Page 6: Введение в Python и Django

–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.”

Page 7: Введение в Python и Django

Главные преимущества

• Ориентирован на повышение производительности разработчика и на читаемость кода

• Компактный

• Портируемость

• Легко расширяемый с помощью C\C++

Page 8: Введение в Python и Django

Мультипарадигменный язык программирования

• Структурное

• Объектно-ориентированное

• Функциональное

• Императивное

• Аспектно-ориентированное

• Мета

Page 9: Введение в Python и Django

Влияние других языков• 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 — генераторы.

Page 10: Введение в Python и Django

Влияние на другие языки

• Ruby

• Boo

• Groovy

• ECMAScript (JavaScript)

• CoffeeScript

Page 11: Введение в Python и Django

Реализации

PyS60 Pyjamas

Page 12: Введение в Python и Django

Кто использует

Page 13: Введение в Python и Django

Интерактивная консоль 1/3

Page 14: Введение в Python и Django

Интерактивная консоль 2/3

Page 15: Введение в Python и Django

Интерактивная консоль 3/3

Page 16: Введение в Python и Django

Философия Python (PEP - 020)

Page 17: Введение в Python и Django

Синтаксис

Page 18: Введение в Python и Django

Типы и структуры данных 1/4

Page 19: Введение в Python и Django

Типы и структуры данных 2/4

Page 20: Введение в Python и Django

Типы и структуры данных 3/4

Page 21: Введение в Python и Django

Типы и структуры данных 4/4

Page 22: Введение в Python и Django

Приведение типов

Page 23: Введение в Python и Django

Строки

Page 24: Введение в Python и Django

Списки 1/3

Page 25: Введение в Python и Django

Списки 2/3

Page 26: Введение в Python и Django

Списки 3/3

Page 27: Введение в Python и Django

Генераторы списков (List comprehension)

Page 28: Введение в Python и Django

Словари 1/3

Page 29: Введение в Python и Django

Словари 2/3

Page 30: Введение в Python и Django

Словари 3/3

Page 31: Введение в Python и Django

Условные операторы

Нету switch’a

Page 32: Введение в Python и Django

Циклы 1/2

Page 33: Введение в Python и Django

Циклы 2/2

Page 34: Введение в Python и Django

Функции

Page 35: Введение в Python и Django

Обработка исключений

Page 36: Введение в Python и Django

Классы 1/2

Page 37: Введение в Python и Django

Классы 2/2

• Классы являются объектами

• Множественное наследование, mixins

• Полиморфизм

• Перегрузка операторов (например <, >, ==, +, -, *, etc)

• Нету настоящих private методов\атрибутов. По конвенции приватные методы\атрибуты начинаются с _ (нижнего подчеркивания)

• Нет полноценных интерфейсов, но есть абстрактные классы

• ООП без заморочек

• Метапрограммирование

Page 38: Введение в Python и Django

Дескрипторы

Page 39: Введение в Python и Django

Контекст менеджеры

Page 40: Введение в Python и Django

Декораторы

Page 41: Введение в Python и Django

Генераторы

Page 42: Введение в Python и Django

Ленивые вычисления

Page 43: Введение в Python и Django

Функциональное программирование 1/2

Page 44: Введение в Python и Django

Функциональное программирование 2/2

• Функция является объектом

• Функция объект высшего порядка

• Рекурсия (нет оптимизации хвостовой рекурсии)

• Развитая обработка списков

• Замыкания

• Частичное применение функции (partial)

• fn.py (https://github.com/kachayev/fn.py)

Page 45: Введение в Python и Django

Система модулей

# 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()

Page 46: Введение в Python и Django

Стандартная библиотека

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

Page 47: Введение в Python и Django

Пример отличного API - json

Page 48: Введение в Python и Django

Пример отличного API - requests

Page 49: Введение в Python и Django

Где искать библиотеки

• 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

Page 50: Введение в Python и Django

PIP

Page 51: Введение в Python и Django

Virtualenv

• Изолированное  python окружение

• Разные версии библиотек на разных проектах

• virtualenvwrapper

• В Python3 из коробки

Page 52: Введение в Python и Django

PEP (Python Enhancement Proposal)

• PEP - документ предоставляющий общую информацию о языке

• Сначала создается PEP, потом новая фича языка

• PEP-8 - правила оформления кода

• PEP-3000 - описывает переход на Python 3

• PEP-20 - zen of Python

Page 53: Введение в Python и Django

GIL

• Global Interpreter Lock

• Python потоки - родные потоки (POSIX потоки на Unix)

• Может быть только один выполняемый поток в одну единицу времени

• Масштабируем процессами

• Пишем асинхронный код, или используем «зеленые» треды

Page 54: Введение в Python и Django

Debugging

• pdb - встроенный отладчик

• ipdb - ipython для встроенного отладчика

• pudb - визуальный отладчик

Page 55: Введение в Python и Django

Testing

• unittest - стандартная библиотека

• nose - утилиты для тестирования, test discovering

• pytest - новая модная библиотека для тестирования

• mamba - BDD

• pyvows - BDD

• Splinter - обертка над Selenium

• mock - моки (в Python 3 из коробки)

• httpretty - моки для веб ресурсов

• tox - тестирование со всеми версиями Python

Page 56: Введение в Python и Django

Linting

• Flake8 - pep8, pyflakes

• Pylint - analyzer

• Prospector - everything together

Page 57: Введение в Python и Django

Текстовые редакторы \ IDE

• vim + plugins

• emacs + plugins

• Sublime Text + plugins

• PyCharm

• Eclipse + PyDev plugin

Page 58: Введение в Python и Django

Использование Python

Page 59: Введение в Python и Django

«Классическая» веб - разработка

Page 60: Введение в Python и Django

Асинхронные веб\сетевые приложения

Twisted

gevent asyncio

Page 61: Введение в Python и Django

Научные, математические вычисления

Page 62: Введение в Python и Django

Научные, математические вычисления

Page 63: Введение в Python и Django

Machine Learning

scikit-learn

PyBrain

Page 64: Введение в Python и Django

Natural Language Processing

NLTK Pattern

Page 65: Введение в Python и Django

GUI

TkInter

PyQT

Page 66: Введение в Python и Django

Базы данных

peewee

Page 67: Введение в Python и Django

Игры

Page 68: Введение в Python и Django

DevOps

Page 69: Введение в Python и Django

Web scrapping

BeautifulSoupRoboBrowser

MechanicalSoup

Page 70: Введение в Python и Django

Как учить?

https://www.python.org/

Page 71: Введение в Python и Django

Как учить?

Page 72: Введение в Python и Django

Как учить?

http://learnpythonthehardway.org/

Page 73: Введение в Python и Django

Как учить?

http://www.learnpython.org/

Page 74: Введение в Python и Django

Как учить?

http://www.fullstackpython.com/

Page 75: Введение в Python и Django

Как учить?

http://www.checkio.org/

Page 76: Введение в Python и Django

Как учить?

http://www.pythonchallenge.com/

Page 77: Введение в Python и Django

Быть в курсе

Page 78: Введение в Python и Django

Конференции 1/3

• PyCon Ukraine - http://ua.pycon.org (1-2 ноября)

• Kyiv.py (27 сентября #13)

• Kharkiv.py

• Lviv.py

• Odessa.py

• http://meetup.com/uapycon/

Page 79: Введение в Python и Django

Конференции 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

Page 80: Введение в Python и Django

Конференции 3/3

• SciPy

• PyData

• DjangoCon US

• DjangoCon Europe

Page 81: Введение в Python и Django
Page 82: Введение в Python и Django
Page 83: Введение в Python и Django
Page 84: Введение в Python и Django

Кто использует

Page 85: Введение в Python и Django

История Django

• 2003 - появился (Adrian Holovaty, Simon Willison)

• 2005 - первый релиз (лицензия BSD)

• Июнь 2008 - Django Software Foundation

• Текущая версия 1.6

• В сентябре - 1.7

Page 86: Введение в Python и Django

Django MVC

• MVC - Model - View - Controller

• MTV - Model - Template - View

Page 87: Введение в Python и Django

Django CLI

Page 88: Введение в Python и Django

Django ORM

Page 89: Введение в Python и Django

Django ORM

Page 90: Введение в Python и Django

Django ORM

• Поддержка sqlite, mysql, postgresql, oracle

• Active record

• Транзакции

• ForeignKey, OneToOneField, ManyToManyField

• Авто создание базы, миграции (начиная с 1.7)

• JsonField, ArrayField, HstoreField с помощью дополнительных библиотек

• Multidatabase support

Page 91: Введение в Python и Django

Django Routing

Page 92: Введение в Python и Django

Django Views (function based)

Page 93: Введение в Python и Django

Django Views (Class based)

Page 94: Введение в Python и Django

Django Templates

Page 95: Введение в Python и Django

Django Forms

Page 96: Введение в Python и Django

Django Middleware

Page 97: Введение в Python и Django

Django Middleware

Page 98: Введение в Python и Django

Django Admin

Page 99: Введение в Python и Django

Django Admin (Django-Suit)

Page 100: Введение в Python и Django

Security

• Cross site scripting (XSS) protection

• Cross site request forgery (CSRF) protection

• SQL injection protection

• Clickjacking protection

• SSL/HTTPS

• Host header validation

• Session security

Page 101: Введение в Python и Django

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

Page 102: Введение в Python и Django

Django строительные блоки

• pip install django-*

• add to INSTALLED_APPS

• register routing

• ENJOY

• https://www.djangopackages.com/

Page 103: Введение в Python и Django

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 - сжатие и обработка статики

Page 104: Введение в Python и Django

Django готовые решения

• Django CMS (+ Django Shop)

• Mezzanine (+ Mezzanine Cart)

• Oscar

• Pinax

• Djedi-CMS

• Fein-CMS

• Opps-CMS

• Wagtail CMS

• Widgy CMS

Page 105: Введение в Python и Django

WSGI

• Web Server Gateway Interface

• Описывает как веб сервер общается с веб приложением

• И как веб приложение компонуется для обработки запроса

• PEP-3333

Page 106: Введение в Python и Django

Deployment

Page 107: Введение в Python и Django

Как учить?

https://docs.djangoproject.com

Page 108: Введение в Python и Django

Как учить?

http://www.djangobook.com/

Page 109: Введение в Python и Django

Как учить?

http://www.tangowithdjango.com/

Page 110: Введение в Python и Django

Как учить?

Page 111: Введение в Python и Django

Как учить?

Page 112: Введение в Python и Django

Вопросы

• @tlyapun

• github/lyapun

• facebook/taras.lyapun