Вы находитесь на странице: 1из 17

RobSanderson azaroth42@gmail.com @azaroth42 EdSummers ehs@pobox.

com @edsu
http://www.flickr.com/photos/42311564@N00/2355590274/

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Overview

Python Dojo
Python Introduction Web Programming Kata: Find bands on Wikipedia Find nationality of band Find population of nation Create chart of bands normalized by population

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Python: Data Types


>>> string string # strings are immutable >>> uunicode: \xe4 # >>> string that can have multiple lines >>> 1 >>> 1L >>> 1.0 # int # long int # float # mutable # immutable

>>> [list, of, items] >>> (tuple, of, items)

>>> {key : value, key2 : value2, } >>> None >>> True, False # booleans

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Python: Flow Control


>>> for x in iterable: ... # process x >>> if test or test2 and not test3: ... # do something ... elif test4: ... # do something else ... else: ... # otherwise do this >>> while test: ... # do something >>> try: ... # try something ... except ExceptionType: ... # recover
Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Python: Classes, Functions


>>> def functionName(arg1, arg2=default): ... # do something >>> class ClassName (ParentClass): ... property = value ... ... def __init__(self): ... # initialize ... ... def method(self, arg1, arg2=default): ... # do something >>> what = ClassName() >>> what.method(arg1, arg2=arg2)

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Python: Other Important Stuff


>>> break >>> continue >>> raise Exception >>> return value >>> pass # no operation

>>> import module >>> from module import something >>> from module import *

# import everything

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Python Master Class: Basics


>>> abcd[0] = z >>> .join([list of strings]) >>> var = [x for x in iterable] >>> a, b, c = (a, b, c) >>> var = a if test else b >>> anonFn = lambda x: x+1 >>> var = Function >>> var = Class # error, as strings are immutable # create string from list # list comprehension # scattered assignment # ternary operator (test ? a : b) # anonFn(1) 2 # var() run Function # var() new instance of Class

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Python Master Class: Iterators


class Reverse: "Iterator for looping over a sequence backwards" def __init__(self, data): self.data = data self.index = len(data) def __iter__(self): return self def next(self): if self.index == 0: raise StopIteration self.index = self.index - 1 return self.data[self.index] >>> for char in Reverse('spam'): ... print char m a p s
Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Python Master Class: Generators


def reverse(data): for index in range(len(data)-1, -1, -1): yield data[index]

>>> for char in reverse('golf'): ... print char ... f l o g

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

urllib
>>> import urllib >>> urllib.quote('~azaroth/s?q=http://foo.com/') '%7Eazaroth/s%3Fq%3Dhttp%3A//foo.com/' >>> urllib.unquote('%7Eazaroth/s%3Fq%3Dhttp%3A//foo.com/') '~azaroth/s?q=http://foo.com/' >>> fh = urllib.urlopen('http://www.google.com/') >>> html = fh.read() >>> fh.close() >>> fh.getcode() 200 >>> fh.headers.dict['content-type'] 'text/html; charset=ISO-8859-1'
Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

urllib2
>>> >>> >>> >>> >>> import urllib2 ph = urllib2.ProxyHandler( {'http' : 'http://proxyout.lanl.gov:8080/'}) opener = urllib2.build_opener(ph) urllib2.install_opener(opener) # From now on, all requests will go through proxy

>>> >>> >>> >>> >>>

r = urllib2.Request('http://www.google.com/') r.add_header('Referrer', 'http://www.somewhere.net') fh = urllib2.urlopen(r) html = fh.read() fh.close()

>>> # fh is the same as urllib's for headers/status

Dojo: Python for Web Interaction Rob Sanderson, Ed Summerrs Dev8D, Feb 24-27 2010, London

urlparse
>>> import urlparse >>> pr = urlparse.urlparse( 'https://www.google.com/search?q=foo&bar=bz#frag') >>> pr.scheme 'https' >>> pr.hostname 'www.google.com' >>> pr.path '/search' >>> pr.query 'q=foo&bar=bz' >>> pr.fragment 'frag'

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

httplib
>>> >>> >>> >>> import httplib cxn = httplib.HTTPConnection('www.google.com') hdrs = {'Accept' : 'application/rdf+xml'} path = "/search?q=some+search+query"

>>> cxn.request("HEAD", path, headers=hdrs) >>> resp = cxn.getresponse() >>> resp.status 200 >>> resp_hdrs = dict(resp.getheaders()) >>> resp_hdrs['content-type'] 'text/html; charset=ISO-8859-1' >>> data = resp.read() >>> cxn.close()

# :(

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

lxml
$ easy_install lxml >>> from lxml import etree >>> et = etree.XML('<a b="B"> A <c>C</c> </a>') >>> et.text ' A ' >>> et.attrib['b'] 'B' >>> for elem in et.iterchildren(): ... print elem <Element c at 16d1ed0> >>> html = etree.parse(StringIO.StringIO("<html><p>hi"), parser=etree.HTMLParser()) >>> html.xpath('/html/body/p') [<Element p at 16e00f0>]

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

rdflib
$ easy_install rdflib >>> >>> >>> >>> >>> import rdflib as rdf inp = rdf.URLInputSource( 'http://xmlns.com/foaf/spec/20100101.rdf') inp2 = rdf.StringInputSource("<a> <b> <c> .") graph = rdf.ConjunctiveGraph() graph.parse(inp)

>>> sparql = "SELECT ?l WHERE {?w rdfs:label ?l . }" >>> res = graph.query(sparql, initNs={'rdfs':rdf.RDFS.RDFSNS})) >>> res.selected[0] rdf.Literal(u'Given name') >>> nt = graph.serialize(format='nt')

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

json / simplejson
>>> try: import simplejson as json ... except ImportError: import json >>> data = {'o' : (True, None, 1.0), "ints" : [1,2,3]} >>> json.dumps(data) '{"o": [true, null, 1.0], "ints": [1, 2, 3]}' >>> json.dumps(data, separators=(',', ':')) '{"o":[true,null,1.0],"ints":[1,2,3]}' >>> json.loads('[1,2,"foo",null]') [1, 2, u'foo', None] # compact

Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

mod_python, mod_wsgi
import cgitb from mod_python import apache from mod_python.util import FieldStorage def handler(req): try: form = FieldStorage(req) # dict-like object for query path = req.uri req.status = 200 req.content_type = "text/plain" req.send_http_header() req.write(path) except: req.content_type = "text/html" cgitb.Hook(file=req).handle() return apache.OK
Dojo: Python for Web Interaction Rob Sanderson, Ed Summers Dev8D, Feb 24-27 2010, London

Вам также может понравиться