Slide 1

Slide 1 text

http://creativecommons.org/licenses/by-nc-sa/3.0/ Leganés, 11 y 12 de febrero José Manuel Ortega Leganés, 11 y 12 de febrero José Manuel Ortega @jmortegac Python para desarrolladores web

Slide 2

Slide 2 text

2 Python para desarrolladores web https://speakerdeck.com/jmortega

Slide 3

Slide 3 text

 Stack,Django,Flask,Pyramid  Requests  Scraping(BeautifulSoap,Scrapy)  Bokeh  API Rest (Django-Rest-Framework)  Twitter API 3 Python para desarrolladores web Agenda

Slide 4

Slide 4 text

4 Python para desarrolladores web Python Zen

Slide 5

Slide 5 text

Stack 5 Python para desarrolladores web

Slide 6

Slide 6 text

Django 6 Python para desarrolladores web

Slide 7

Slide 7 text

Django 7  Most popular Python web framework  Full stack web framework  Django-ORM  Template Engine  HTTP Request/Response  URL Routing Mechanism  Testing  Dev Server (WSGI) Python para desarrolladores web

Slide 8

Slide 8 text

Django 8  Model Template View  Model → modelo de datos (models.py)  View →vistas de datos (views.py): qué datos se presentan  Template → plantillas HTML:cómo se presentan los datos Python para desarrolladores web

Slide 9

Slide 9 text

Django 9  django.contrib.auth Un sistema de autenticación  django.contrib.contenttypes  Un framework para tipos de contenidos  django.contrib.sessions  Un framework para manejar sesiones DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'mysite.db', } } Python para desarrolladores web

Slide 10

Slide 10 text

Django ORM 10 Python para desarrolladores web

Slide 11

Slide 11 text

Django Templates 11  Templates are composed by Blocks Python para desarrolladores web

Slide 12

Slide 12 text

Django example project 12 Python para desarrolladores web

Slide 13

Slide 13 text

Django example project 13 Python para desarrolladores web

Slide 14

Slide 14 text

Django-oscar 14 http://oscarcommerce.com https://github.com/django-oscar/django-oscar Python para desarrolladores web

Slide 15

Slide 15 text

Flask 15  Microframework  Built in development server and debugger  Oriented to small applications with simpler requirements. Python para desarrolladores web

Slide 16

Slide 16 text

Flask example 16 Python para desarrolladores web

Slide 17

Slide 17 text

Flask 17 Python para desarrolladores web

Slide 18

Slide 18 text

Flask 18 Python para desarrolladores web http://httpbin.org

Slide 19

Slide 19 text

Pyramid 19  Python3 compatible  Templates with Chamaleon  Like django has his own bootstraping toolpcreate Python para desarrolladores web

Slide 20

Slide 20 text

Pyramid 20 pcreate -s starter hello_pyramid ├── CHANGES.txt ├── development.ini ├── MANIFEST.in ├── production.ini ├── hello_pyramid │ ├── __init__.py │ ├── static │ │ ├── pyramid-16x16.png │ │ ├── pyramid.png │ │ ├── theme.css │ │ └── theme.min.css │ ├── templates │ │ └── mytemplate.pt │ ├── tests.py │ └── views.py ├── README.txt └── setup.py Python para desarrolladores web

Slide 21

Slide 21 text

Pyramid Learn REST API with Python in 90 minutes 21

Slide 22

Slide 22 text

Pyramid 22 Python para desarrolladores web Pserve development.ini

Slide 23

Slide 23 text

Pyramid 23 https://badges.fedoraproject.org https://github.com/fedora-infra/tahrir Python para desarrolladores web

Slide 24

Slide 24 text

Comparing web frameworks 24 Django Pyramid Flask ORM Django- ORM Bootstrapping django- admin pcreate Templates Chameleon Migrations Admin interface Visual debug Python para desarrolladores web

Slide 25

Slide 25 text

Requests Module  Python’s standard urllib2,httplib module provides most of the HTTP capabilities you need, but the API is thoroughly broken.  Python HTTP: Requests. Beautiful, simple, Pythonic. 25 http://www.python-requests.org Python para desarrolladores web

Slide 26

Slide 26 text

Use requests module  Install requests module (pip install requests) http://docs.python-requests.org/en/latest/user/install/#install  Use it interactive mode $ python >>> import requests >>> r = requests.get("http://httpbin.org/get") 26 Python para desarrolladores web

Slide 27

Slide 27 text

Use requests module 27 Python para desarrolladores web

Slide 28

Slide 28 text

Use requests module 28 Python para desarrolladores web

Slide 29

Slide 29 text

Beautiful Soup 29  Librería que permite el parseo de páginas web  Soporta parsers como lxml,html5lib  Instalación  pip install lxml  pip instlal html5lib  pip install beautifulsoup4 Python para desarrolladores web

Slide 30

Slide 30 text

Obtain links with bs4 30 Python para desarrolladores web

Slide 31

Slide 31 text

Obtain links with bs4 31 Python para desarrolladores web

Slide 32

Slide 32 text

Extract images with lxml 32 import requests from lxml import html Python para desarrolladores web

Slide 33

Slide 33 text

Extract program 33 Python para desarrolladores web

Slide 34

Slide 34 text

JSON in python 34  import json  json_dumps(data, sort_keys=True)  Maybe allow human readable output  json_dumps(data, sort_keys=True, indent=4) Python para desarrolladores web

Slide 35

Slide 35 text

Scrapy 35 Python para desarrolladores web

Slide 36

Slide 36 text

Scrapy / pip install scrapy Learn REST API with Python in 90 minutes 36

Slide 37

Slide 37 text

Scrapy shell 37 scrapy shell from scrapy. import Selector hxs = Selector(response) Info = hxs.select(‘//div[@class=“slot-inner”]’) Python para desarrolladores web

Slide 38

Slide 38 text

Scrapy shell 38 Python para desarrolladores web

Slide 39

Slide 39 text

Scrapy spiders 39 Python para desarrolladores web

Slide 40

Slide 40 text

Scrapy spiders 40 $ scrapy crawl $ scrapy crawl -o items.json -t json $ scrapy crawl -o items.csv -t csv $ scrapy crawl -o items.xml -t xml Python para desarrolladores web

Slide 41

Slide 41 text

Twisted 41  Event-driven networking engine  Procesar eventos de forma asíncrona  https://twistedmatrix.com Python para desarrolladores web

Slide 42

Slide 42 text

Bokeh 42  Interactive, browser-based visualization for big data, driven from Python  http://bokeh.pydata.org  Rich interactivity over large datasets  HTML5 Canvas  Integration with Google Maps  http://bokeh.pydata.org/en/latest/docs/gallery.html Python para desarrolladores web

Slide 43

Slide 43 text

Bokeh 43 Python para desarrolladores web

Slide 44

Slide 44 text

Bokeh Google maps 44 Python para desarrolladores web

Slide 45

Slide 45 text

Bokeh Google maps 45 Python para desarrolladores web

Slide 46

Slide 46 text

Javascript code generation 46 Python para desarrolladores web

Slide 47

Slide 47 text

Bokeh charts 47 Python para desarrolladores web

Slide 48

Slide 48 text

API Rest in Python 48  Django Rest Framework (DRF) pip install djangorestframework Python para desarrolladores web

Slide 49

Slide 49 text

Django Rest Framework 49 Serializers & Views Python para desarrolladores web class PostSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Post fields = ('author', 'title', 'text', 'created_date','published_date') class PostViewSet(viewsets.ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer from rest_framework import routers, serializers, viewsets

Slide 50

Slide 50 text

Django Rest Framework 50 Urls Python para desarrolladores web

Slide 51

Slide 51 text

Django Rest Framework 51 Python para desarrolladores web

Slide 52

Slide 52 text

Twitter API 52  https://apps.twitter.com  Oauth2  Consumer API (API KEY)  Consumer Secret (API Secret)  Access Token  Access Token Secret Python para desarrolladores web

Slide 53

Slide 53 text

Twitter API 53  Python-twitter  https://github.com/bear/python-twitter  Tweepy  https://github.com/tweepy/tweepy Python para desarrolladores web

Slide 54

Slide 54 text

Tweepy 54 import tweepy from tweepy import OAuthHandler consumer_key = 'YOUR-CONSUMER-KEY' consumer_secret = 'YOUR-CONSUMER-SECRET' access_token = 'YOUR-ACCESS-TOKEN' access_secret = 'YOUR-ACCESS-SECRET' auth = OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_secret)  api = tweepy.API(auth) Python para desarrolladores web

Slide 55

Slide 55 text

Tweepy Learn REST API with Python in 90 minutes 55  Timeline  Tweet list  Trending topic for status in tweepy.Cursor(api.home_timeline).items(10): print(status.text) for tweet in tweepy.Cursor(api.user_timeline).items(): process_or_store(tweet._json) def getTrends(): trends = api.trends_place(1)[0]['trends'] return trends

Slide 56

Slide 56 text

Python-twitter 56 import twitter apiTwitter = twitter.Api(consumer_key="xxx", consumer_secret="xxx", access_token_key="xxx", access_token_secret="xxx") query = apiTwitter.GetSearch("#T3chFest2016“,count=50) for result in query: tweet = {} tweet['text'] = result.text.encode('utf-8') tweet['date'] = result.created_at.encode('utf-8') tweet['favorite_count'] = result.favorite_count tweet['lang'] = result.lang.encode('utf-8') tweet['retweet_count'] = result.retweet_count tweet['account'] = result.user.screen_name.encode('utf-8') twitter_results.append(tweet) Python para desarrolladores web

Slide 57

Slide 57 text

57 Python para desarrolladores web Python-twitter

Slide 58

Slide 58 text

Python-twitter 58 outfile = open('twitter.json','wb') for twitter_result in twitter_results: line = json.dumps(twitter_result) + "\n" outfile.write(line) Python para desarrolladores web

Slide 59

Slide 59 text

Python in the cloud 59 Python para desarrolladores web

Slide 60

Slide 60 text

Python in the cloud 60 Python para desarrolladores web

Slide 61

Slide 61 text

Python in the cloud 61 Python para desarrolladores web

Slide 62

Slide 62 text

Git  https://github.com/jmortega/t3chfest_python_examples 62 Python para desarrolladores web

Slide 63

Slide 63 text

References  Django project: http://www.djangoproject.com  Flask: http://flask.pocoo.org  Pyramid: http://www.pylonsproject.org  Requests python module: http://www.python-requests.org  BeautifulSoup: http://www.crummy.com/software/BeautifulSoup  Bokeh:http://bokeh.pydata.org  Django Rest:http://www.django-rest-framework.org  https://www.pythonanywhere.com 63 Python para desarrolladores web

Slide 64

Slide 64 text

Thank you! José Manuel Ortega <@jmortegac>