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

Post on 24-May-2015

1.326 Views

Category:

Software

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Введение в 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

Как учить?

https://www.python.org/

Как учить?

Как учить?

http://learnpythonthehardway.org/

Как учить?

http://www.learnpython.org/

Как учить?

http://www.fullstackpython.com/

Как учить?

http://www.checkio.org/

Как учить?

http://www.pythonchallenge.com/

Быть в курсе

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

Как учить?

https://docs.djangoproject.com

Как учить?

http://www.djangobook.com/

Как учить?

http://www.tangowithdjango.com/

Как учить?

Как учить?

Вопросы

• @tlyapun

• github/lyapun

• facebook/taras.lyapun

top related