6. String
encode(): Unicode -> Specific Encoding
decode(): Specific Encoding -> Unicode
Python uses Ascii & Unicode
>>> a = 'this is an ASCII string'
>>> b = u'This is a Unicode string'
>>> a = b.encode('utf8')
7. List
list is not array, is more like container
mutable container
>>> a = [1, 2, 3]
>>> print type(a)
<type 'list'>
>>> a.append(8)
>>> a.insert(2, 7)
>>> del a[0]
>>> print a
[2, 7, 3, 8]
>>> print len(a)
4
8. List - Iteration
List is iterable, you can loop over it
>>> a = [1, 2, 3]
>>> for i in a:
print i
1
2
3
9. Tuple
immutable version of List
>>> a = (1, 2, 3)
>>> print a[1]
2
>>> a[1] = 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
10. Dictionary
store a mapping between a set of keys and a set of values
>>> d = {'user':'bozo', 'pswd':1234}
!
>>> d['user']
'bozo'
!
>>> d['pswd']
1234
!
>>> d['bozo']
!
Traceback (innermost last):
File '<interactive input>' line 1, in ?
KeyError: bozo
11. whlie
>>> i = 0
>>> while i < 10:
i = i + 1
>>> print i
10
12. if ... elif ... else
>>> for
>>>
>>>
>>>
>>>
>>>
>>>
zero
one
other
i in range(3):
if i == 0:
print 'zero'
elif i == 1:
print 'one'
else:
print 'other'
13. try ... except ... else ... finally
>>> try:
>>>
a = 1 / 0
>>> except Exception, e:
>>>
print 'oops: %s' % e
>>> else:
>>>
print 'no problem here'
>>> finally:
>>>
print 'done'
oops: integer division or modulo by zero
done
>>> try:
>>>
raise SyntaxError
>>> except ValueError:
>>>
print 'value error'
>>> except SyntaxError:
>>>
print 'syntax error'
syntax error
all statement for exception handling
exception can be vary
15. Functions - default value
>>> def f(a, b=2):
return a + b, a - b
>>> x, y = f(5)
>>> print x
7
>>> print y
3
16. Function Argument Packaging
arguments could be packaged into list or dictionary
* - position based arguments
** - name based arguments
>>> def f(*a, **b):
return a, b
>>> x, y = f(3, 'hello', c=4, test='world')
>>> print x
(3, 'hello')
>>> print y
{'c':4, 'test':'world'}
17. Function Argument Unpackaging
Vice versa, arguments could be extracted for functions
>>> def f(a, b):
return a + b
>>> c = (1, 2)
>>> print f(*c)
3
>>> def f(a, b):
return a + b
>>> c = {'a':1, 'b':2}
>>> print f(**c)
3
19. Class
__init__ as constructor
>>> class MyClass(object):
>>>
z = 2
>>>
def __init__(self, a, b):
>>>
self.x = a
>>>
self.y = b
>>>
def add(self):
>>>
return self.x + self.y + self.z
>>> myinstance = MyClass(3, 4)
>>> print myinstance.add()
9
20. Class - Special Attributes, Methods, Operators
__len__ for len()
__getitem__ for indexing retrieve
__setitem__ for indexing setting
>>>
>>>
>>>
>>>
>>>
>>>
>>>
4
>>>
>>>
[3,
class MyList(object):
def __init__(self, *a): self.a = list(a)
def __len__(self): return len(self.a)
def __getitem__(self, i): return self.a[i]
def __setitem__(self, i, j): self.a[i] = j
b = MyList(3, 4, 5)
print b[1]
b.a[1] = 7
print b.a
7, 5]
21. import
import which, use which
>>> import random
>>> print random.randint(0, 9)
!
5
import all
>>> from random import *
>>> print randint(0, 9)
!
import renaming
>>> import random as myrand
>>> print myrand.randint(0, 9)
22. Datetime
library for dealing with time-related operation
>>> import datetime
>>> print datetime.datetime.today()
2008-07-04 14:03:90
>>> print datetime.date.today()
2008-07-04
28. Pre-installed Applications
admin - the one you're using right now
examples - documentation and a replica of official website
welcome - referred as the skeleton of applications
29. Let's Create a New Application
"New simple application" -> Create
30. Components In a Application
Models: the data representation
Controllers: application logic and workflow
Views: the data presentation, the interface to users
Languages: i18n, internalization
Modules: Python modules belongs to this application
Static files: image files, CSS files, JavaScript files...
Plugins: extensions of applications
35. Code Lab 0: Make Your Own Controller
Create codelab_first.py in Controllers
Create codelab_first/index.html in Views
GO EDITING!
36. Return a Dictionary
Try to return a customized dictionary
Click "exposes: index"
codelab_first.py
!
def index():
my_dict = {
"message": "this is message",
"massage": "this is massage"
}
return my_dict
37. Now Template's Turn
Print your variables out by {{=var}}
codelab_first/index.html
!
{{extend 'layout.html'}}
<h2>
{{=message}}
</h2>
<h3>
{{=massage}}
</h3>
39. Code Lab 1: Say My Name
codelab_saymyname.py in Controllers
codelab_saymyname/ask.html in Views
codelab_saymyname/say.html in Views
40. The Cleanest Controller Ever!
Directly return {} since we don't deal with it
codelab_saymyname.py
!
def ask():
return {}
!
def say():
return {}
!
41. Create a Form
"action" points to "say"
with a <input> named "visitor_name"
codelab_saymyname/ask.html
!
{{extend 'layout.html'}}
<h1>
What's Your Name?
</h1>
<form action="say">
<input name="visitor_name" />
<input type="submit" />
</form>
!
42. Let it go say
Get POST parameters by request.vars.var_name
codelab_saymyname/say.html
!
{{extend 'layout.html'}}
<h1>
Hello {{=request.vars.visitor_name}}
</h1>
!
!
!
44. web2py Libraries
are exposed to the handlers as global objects
Ex. request, response, BEAUTIFY...
source code files are in gluon folder
web2py/gluon
gluon/__init__.py
gluon/admin.py
gluon/cache.py
gluon/cfs.py
gluon/compileapp.py
gluon/contenttype.py
gluon/dal.py
gluon/decoder.py
gluon/fileutils.py
gluon/globals.py
!
gluon/highlight.py
gluon/restricted.py
gluon/html.py
gluon/rewrite.py
gluon/http.py
gluon/rocket.py
gluon/import_all.py gluon/sanitizer.py
gluon/languages.py
gluon/serializers.py
gluon/main.py
gluon/settings.py
gluon/myregex.py
gluon/shell.py
gluon/newcron.py
gluon/sql.py
gluon/portalocker.py gluon/sqlhtml.py
gluon/reserved_sql_keywords.py
gluon/streamer.py
gluon/template.py
gluon/storage.py
gluon/tools.py
gluon/utils.py
gluon/validators.py
gluon/widget.py
gluon/winservice.py
gluon/xmlrpc.py
45. web2py APIs - Global Objects
request - all configuration in HTTP request
response - all configuration in HTTP response
session
cache
46. request Object
extends Python dict class
basically a dictionary, but can be accessed as attributes
request.vars or request['vars']
if an attribute does not exist, it returns None instead of an exception
read-only dictionary
50. Session
also the Storage class (same of request, response)
the same user + the same time of login session
51. Operating Sessions
storing into session
Python
!
!
session.myvariable = "hello"
!
retrieving from session
Python
!
a = session.myvariable
52. Operating Sessions
Drops off all sessions
Python
!
!
session.forget(response)
!
Made sessions only be transferred under HTTPS protocol
Python
!
session.secure()
53. Caching
cache has two attributes: cache.ram, cache.disk
format: cache(<name>, <function>)
54. Caching in Memory
Python
!
def cache_in_ram():
import time
t = cache.ram('time', lambda: time.ctime(), time_expire=5)
return dict(time=t, link=A('click me', _href=request.url))
the output of lambda: time.ctime() is cached for 5 secs
'time' is used as the caching key
56. HTTP()
It's an exception, need to be raised
determine the http responding status code
e.g. 404, 500
HTTP(<status code>, <message>)
Python
!
def page_not_found():
raise HTTP(404, 'my message')
61. HTML Helpers
generate any HTML tag in Python format
_ prefixed argument as html attribute
Template
!
{{=DIV('thisisatest', _id='123', _class='myclass')}}
!
-> <div id="123" class="myclass">thisisatest</div>
62. Template Basic Syntax
for ... in
while
if ... elif ... else
try ... except ... else ... finally
def .... return
63. for ... in
{{pass}} as ending
Template
Rendered
!
!
{{items = ['a', 'b', 'c']}}
<ul>
{{for item in items:}}<li>{{=item}}</li>{{pass}}
</ul>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
!
64. while
the condition expression needs to be given
Template
Rendered
!
!
{{k = 3}}
<ul>
{{while k > 0:}}<li>{{=k}}{{k = k - 1}}</
li>{{pass}}
</ul>
<ul>
<li>3</li>
<li>2</li>
<li>1</li>
</ul>
!
65. if ... elif ... else
Template
Rendered
!
!
{{
import random
k = random.randint(0, 100)
}}
<h2>
{{=k}}
{{if k % 4 == 0:}}is divisible by 4
{{elif k % 2 == 0:}}is even
{{else:}}is odd
{{pass}}
</h2>
<h2>
64 is divisible by 4
</h2>
!
!
66. try ... except ... else ... finally
Template
Rendered
!
!
{{try:}}
Hello {{= 1 / 0}}
{{except:}}
division by zero
{{else:}}
no division by zero
{{finally}}
<br />
{{pass}}
Hello
division by zero
<br />
!
69. Abstraction Layer
In web2py, database operation has been abstracted into Python objects
No SQL needed, but the conception of SQL is still important
define your models in Models files
70. Connection
SQLite is file-based database which is widely used in development
scheme: sqlite://<filename>
Python
!
db = DAL('sqlite://storage.db')
!
75. Transaction Example
commit one more time to make changes to database
Python
!
db.commit()
try:
db.person.insert(name="bob")
except:
db.rollback()
else:
db.commit()
!
81. Git
version control system
coding history
distributed version control
Github
http://www.slideshare.net/littleq0903/introduction-to-git-10706480
82. Google Summer of Code
Sahana is the accepted organization again and again and again....
Google pays you if you spend your summer for coding
Idea Page
Idea -> Proposal -> get a mentor -> coding
https://developers.google.com/open-source/soc/