SlideShare a Scribd company logo
Code Lab
+Colin Su
@littleq0903
Python Fundamentals
Installing Python
http://python.org/downloads/
Python 2.7.x
Mac OS X & Linux - no installation needed, it's built-in
Hidden Documentation
help()
dir()
Types
str - String
list - List
tuple - Tuple
dict - Dictionary
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')
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
List - Iteration
List is iterable, you can loop over it
>>> a = [1, 2, 3]
>>> for i in a:
print i
1
2
3
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
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
whlie
>>> i = 0
>>> while i < 10:
i = i + 1
>>> print i
10
if ... elif ... else
>>> for
>>>
>>>
>>>
>>>
>>>
>>>
zero
one
other

i in range(3):
if i == 0:
print 'zero'
elif i == 1:
print 'one'
else:
print 'other'
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
Functions
>>> def f(a, b):
return a + b
>>> print f(4, 2)
6
Functions - default value
>>> def f(a, b=2):
return a + b, a - b
>>> x, y = f(5)
>>> print x
7
>>> print y
3
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'}
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
Lambda
anonymous function
Python features that function as first-class object
>>> a = lambda b: b + 2
>>> print a(3)
5
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
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]
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)
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
Web2py Overview
Download web2py
http://www.web2py.com/init/default/download
Windows & Mac OS X - Packaged Executive
Linux - python web2py.py
Admin Panel
Choose admin password every time
Start server
Keep it open
Your First web2py Website
Application
Administrative interface
Administrative Interface
Installed Application Management
Install & Create New Application
Deployment
Debug
Code Editing
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
Let's Create a New Application
"New simple application" -> Create
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
URL Mapping
http://localhost:8000/<application>/<controller>/<handler>
Example
http://localhost:8000/mywebsite/default/index

Application
"mywebsite"

Controller
"default.py"

Handler
"def index(): ..."
Templates
Python Dictionary
!

{
}

"first_name": "Colin",
"last_name" : "Su"

HTML Template
<!DOCTYPE html>
<html>
<head>
<title>Hello Title</title>
</head>
<body>
<h1>Hello, I'm {{=first_name }} {{=last_name }}</h1>
</body>
</html>

Rendered HTML
<!DOCTYPE html>
<html>
<head>
<title>Hello Title</title>
</head>
<body>
<h1>Hello, I'm Colin Su</h1>
</body>
</html>
Default Template
controllers/default.py -> index() <=> views/default/index.html
You can change it by response.view = 'default/something.html'
Code Labs
Code Lab 0: Make Your Own Controller
Create codelab_first.py in Controllers
Create codelab_first/index.html in Views
GO EDITING!
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
Now Template's Turn
Print your variables out by {{=var}}
codelab_first/index.html
!

{{extend 'layout.html'}}
<h2>
{{=message}}
</h2>
<h3>
{{=massage}}
</h3>
Debugging a View
{{=BEAUTIFY(response._vars)}} to print out all variables
{{=response.toolbar()}} to enable a debug tool bar
Code Lab 1: Say My Name
codelab_saymyname.py in Controllers
codelab_saymyname/ask.html in Views
codelab_saymyname/say.html in Views
The Cleanest Controller Ever!
Directly return {} since we don't deal with it

codelab_saymyname.py
!

def ask():
return {}
!

def say():
return {}
!
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>
!
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>
!
!
!
Core Components
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
web2py APIs - Global Objects
request - all configuration in HTTP request
response - all configuration in HTTP response
session
cache
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
Key Attributes in request Object
Dictionary-liked


Boolean


request.cookies


request.is_local


request.env


request.is_https


request.vars


request.ajax

request.get_vars

request.post_vars

Datetime

request.now


String


request.utcnow

request.application

request.controller

request.function

request.extension

(more...)
response Object
extends the same super class of request
it's a read-write dictionary (request is read-only)
usually affects the browser behavior
Key Attributes in response Object
Dictionary-liked


Functions


response.cookies


response.flash()


response.headers


response.toolbar()


response.meta


response.write()

response._vars

!

Strings

response.title

response.js

response.delimiters []

response.view

response.status


(more...)
Session
also the Storage class (same of request, response)
the same user + the same time of login session
Operating Sessions
storing into session
Python

!

!

session.myvariable = "hello"
!

retrieving from session
Python
!

a = session.myvariable
Operating Sessions
Drops off all sessions
Python

!

!

session.forget(response)
!

Made sessions only be transferred under HTTPS protocol
Python
!

session.secure()
Caching
cache has two attributes: cache.ram, cache.disk
format: cache(<name>, <function>)
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
Responding
HTTP()
redirect()
URL()
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')
redirect()
redirect(<URL to redirect>)

Python
!

def index():
redirect("http://www.google.com")
URL()
generates internal URL path for actions or static files
all arguments will be parsed automatically
Python
!

URL('f')
>>> "/[application]/[controller]/f"
!

URL('f', args=['x', 'y'], vars=dict(z='t'))
>>> "/[application]/[controller]/f/x/y?z=t"
If you want to redirect to any application

Python
!

redirect(URL('f', args=['x', 'y'], vars=dict(z='t')))
The Views
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>
Template Basic Syntax
for ... in
while
if ... elif ... else
try ... except ... else ... finally
def .... return
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>
!
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>
!
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>
!
!
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 />
!
def ... return

Template

Rendered

!

!

{{def itemize(link):}}
<li><a href="http://{{=link}}">{{=link}}</a></li>
{{return}}
<ul>
{{itemize('www.google.com')}}
</ul>

<ul>
<li><a href="http:/www.google.com">www.google.com</
a></li>
</ul>
Database
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
Connection
SQLite is file-based database which is widely used in development
scheme: sqlite://<filename>
Python
!

db = DAL('sqlite://storage.db')
!
Creating Tables
db.define_table(table_name, field1, field2 ... )

Python
!

db.define_table(
'purchase',
Field('buyer_id', db.person),
Field('product_id', db.product),
Field('quantity', 'integer'),
format = '%(quantity)s %(product_id)s -> %(buyer_id)s')
!
Query
conditions as query, connected with a "|"

Python
!

my_query = (db.mytable.myfield != None) | (db.mytable.myfield > 'A')
rows = db(my_query).select()
!

for row in rows:
print row.myfield
!
!
Insert
db.<table>.insert
db.<table>.bulk_insert

Python
!

>>> db.person.insert(name="Alex")
1
>>> db.person.insert(name="Bob")
2
!

>>> db.person.bulk_insert([{'name':'Alex'}, {'name':'John'}, {'name':'Tim'}])
[3,4,5]
Transaction
db.commit()
db.rollback()
rollback will ignore all operations since the last commit
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()
!
Practice & Resource of Web2py
Practices
From the online web2py book
03 Overview
04 The core
05 The views
06 The database abstraction layer
07 Forms and validators
Resources
Quick Examples (Snippets)

http://www.web2py.com/examples/default/examples
Online Book (free)

http://web2py.com/books/default/chapter/29/00/preface
Python Cheat-sheet

http://rgruet.free.fr/PQR26/PQR2.6_modern_a4.pdf
Open Source Project Contribution
Discussion is important
mailing list
documentation
IRC Channel
STFW & RTFM & GIYF
Git
version control system
coding history
distributed version control
Github
http://www.slideshare.net/littleq0903/introduction-to-git-10706480
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/
Thanks
Good luck to your development

More Related Content

PDF
Web2py tutorial to create db driven application.
PDF
Using web2py's DAL in other projects or frameworks
PDF
Web2py
PDF
web2py:Web development like a boss
PDF
Advanced Querying with CakePHP 3
PPT
Quebec pdo
PDF
Quebec pdo
PDF
New in cakephp3
Web2py tutorial to create db driven application.
Using web2py's DAL in other projects or frameworks
Web2py
web2py:Web development like a boss
Advanced Querying with CakePHP 3
Quebec pdo
Quebec pdo
New in cakephp3

What's hot (19)

KEY
Php 101: PDO
PDF
Doctrine for NoSQL
PDF
Doctrine and NoSQL
PDF
Advanced Django
PDF
PHP Data Objects
PPT
JavaScript
PPTX
Slick: Bringing Scala’s Powerful Features to Your Database Access
PDF
international PHP2011_Bastian Feder_jQuery's Secrets
PDF
Php unit the-mostunknownparts
PDF
Future of HTTP in CakePHP
PDF
Web 11 | AJAX + JSON + PHP
PDF
Filling the flask
PDF
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
PDF
Agile database access with CakePHP 3
KEY
Symfony2 Building on Alpha / Beta technology
PDF
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
PDF
Flask - Backend com Python - Semcomp 18
PDF
Doctrine fixtures
PPT
PHP - PDO Objects
Php 101: PDO
Doctrine for NoSQL
Doctrine and NoSQL
Advanced Django
PHP Data Objects
JavaScript
Slick: Bringing Scala’s Powerful Features to Your Database Access
international PHP2011_Bastian Feder_jQuery's Secrets
Php unit the-mostunknownparts
Future of HTTP in CakePHP
Web 11 | AJAX + JSON + PHP
Filling the flask
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Agile database access with CakePHP 3
Symfony2 Building on Alpha / Beta technology
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Flask - Backend com Python - Semcomp 18
Doctrine fixtures
PHP - PDO Objects
Ad

Similar to Web2py Code Lab (20)

PDF
Quick python reference
PPT
Pythonintroduction
PPTX
Python and You Series
PDF
Intermediate python
ODP
Programming Under Linux In Python
PDF
Tutorial on-python-programming
PPTX
Introduction to python programming 1
PPTX
Python PPT by Sushil Sir.pptx
PDF
web programming UNIT VIII python by Bhavsingh Maloth
ODP
An Intro to Python in 30 minutes
PDF
Python Orientation
PDF
Python Foundation – A programmer's introduction to Python concepts & style
PPTX
Python for dummies
ODP
Hands on Session on Python
PPTX
Docketrun's Python Course for beginners.pptx
PPT
PYTHON
PPT
Python ppt
PPT
Master Python Basics Easily – From Zero to Real-World Applications for UG Stu...
PPT
FALLSEM2022-23_ITA3007_ETH_VL2022230100613_Reference_Material_I_23-09-2022_py...
PPT
python within 50 page .ppt
Quick python reference
Pythonintroduction
Python and You Series
Intermediate python
Programming Under Linux In Python
Tutorial on-python-programming
Introduction to python programming 1
Python PPT by Sushil Sir.pptx
web programming UNIT VIII python by Bhavsingh Maloth
An Intro to Python in 30 minutes
Python Orientation
Python Foundation – A programmer's introduction to Python concepts & style
Python for dummies
Hands on Session on Python
Docketrun's Python Course for beginners.pptx
PYTHON
Python ppt
Master Python Basics Easily – From Zero to Real-World Applications for UG Stu...
FALLSEM2022-23_ITA3007_ETH_VL2022230100613_Reference_Material_I_23-09-2022_py...
python within 50 page .ppt
Ad

More from Colin Su (20)

PDF
Introduction to Google Compute Engine
PDF
Introduction to Google Cloud Endpoints: Speed Up Your API Development
PDF
Functional programming in Python
PDF
A Tour of Google Cloud Platform
PDF
Introduction to Facebook JavaScript & Python SDK
PDF
Introduction to MapReduce & hadoop
PDF
Introduction to Google App Engine
PDF
Django Deployer
PDF
Introduction to Google - the most natural way to learn English (English Speech)
PDF
How to Speak Charms Like a Wizard
PDF
房地產報告
PDF
Introduction to Git
PDF
Introduction to Facebook Javascript SDK (NEW)
PDF
Introduction to Facebook Python API
PDF
Facebook Python SDK - Introduction
PDF
Web Programming - 1st TA Session
PDF
Nested List Comprehension and Binary Search
PDF
Python-List comprehension
PDF
Python-FileIO
KEY
Python Dictionary
Introduction to Google Compute Engine
Introduction to Google Cloud Endpoints: Speed Up Your API Development
Functional programming in Python
A Tour of Google Cloud Platform
Introduction to Facebook JavaScript & Python SDK
Introduction to MapReduce & hadoop
Introduction to Google App Engine
Django Deployer
Introduction to Google - the most natural way to learn English (English Speech)
How to Speak Charms Like a Wizard
房地產報告
Introduction to Git
Introduction to Facebook Javascript SDK (NEW)
Introduction to Facebook Python API
Facebook Python SDK - Introduction
Web Programming - 1st TA Session
Nested List Comprehension and Binary Search
Python-List comprehension
Python-FileIO
Python Dictionary

Recently uploaded (20)

PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Heart disease approach using modified random forest and particle swarm optimi...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Spectroscopy.pptx food analysis technology
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Approach and Philosophy of On baking technology
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Machine Learning_overview_presentation.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
TLE Review Electricity (Electricity).pptx
PDF
August Patch Tuesday
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
A comparative analysis of optical character recognition models for extracting...
Heart disease approach using modified random forest and particle swarm optimi...
Per capita expenditure prediction using model stacking based on satellite ima...
Encapsulation_ Review paper, used for researhc scholars
Spectroscopy.pptx food analysis technology
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Programs and apps: productivity, graphics, security and other tools
Approach and Philosophy of On baking technology
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
Machine Learning_overview_presentation.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
cloud_computing_Infrastucture_as_cloud_p
Unlocking AI with Model Context Protocol (MCP)
TLE Review Electricity (Electricity).pptx
August Patch Tuesday
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Group 1 Presentation -Planning and Decision Making .pptx

Web2py Code Lab

  • 5. Types str - String list - List tuple - Tuple dict - Dictionary
  • 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
  • 14. Functions >>> def f(a, b): return a + b >>> print f(4, 2) 6
  • 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
  • 18. Lambda anonymous function Python features that function as first-class object >>> a = lambda b: b + 2 >>> print a(3) 5
  • 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
  • 25. Admin Panel Choose admin password every time Start server Keep it open
  • 26. Your First web2py Website Application Administrative interface
  • 27. Administrative Interface Installed Application Management Install & Create New Application Deployment Debug Code Editing
  • 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
  • 32. Templates Python Dictionary ! { } "first_name": "Colin", "last_name" : "Su" HTML Template <!DOCTYPE html> <html> <head> <title>Hello Title</title> </head> <body> <h1>Hello, I'm {{=first_name }} {{=last_name }}</h1> </body> </html> Rendered HTML <!DOCTYPE html> <html> <head> <title>Hello Title</title> </head> <body> <h1>Hello, I'm Colin Su</h1> </body> </html>
  • 33. Default Template controllers/default.py -> index() <=> views/default/index.html You can change it by response.view = 'default/something.html'
  • 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>
  • 38. Debugging a View {{=BEAUTIFY(response._vars)}} to print out all variables {{=response.toolbar()}} to enable a debug tool bar
  • 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
  • 47. Key Attributes in request Object Dictionary-liked
 Boolean
 request.cookies
 request.is_local
 request.env
 request.is_https
 request.vars
 request.ajax request.get_vars
 request.post_vars Datetime
 request.now
 String
 request.utcnow request.application
 request.controller
 request.function
 request.extension (more...)
  • 48. response Object extends the same super class of request it's a read-write dictionary (request is read-only) usually affects the browser behavior
  • 49. Key Attributes in response Object Dictionary-liked
 Functions
 response.cookies
 response.flash()
 response.headers
 response.toolbar()
 response.meta
 response.write() response._vars
 ! Strings
 response.title
 response.js
 response.delimiters []
 response.view
 response.status
 (more...)
  • 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')
  • 57. redirect() redirect(<URL to redirect>) Python ! def index(): redirect("http://www.google.com")
  • 58. URL() generates internal URL path for actions or static files all arguments will be parsed automatically Python ! URL('f') >>> "/[application]/[controller]/f" ! URL('f', args=['x', 'y'], vars=dict(z='t')) >>> "/[application]/[controller]/f/x/y?z=t"
  • 59. If you want to redirect to any application Python ! redirect(URL('f', args=['x', 'y'], vars=dict(z='t')))
  • 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 /> !
  • 67. def ... return Template Rendered ! ! {{def itemize(link):}} <li><a href="http://{{=link}}">{{=link}}</a></li> {{return}} <ul> {{itemize('www.google.com')}} </ul> <ul> <li><a href="http:/www.google.com">www.google.com</ a></li> </ul>
  • 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') !
  • 71. Creating Tables db.define_table(table_name, field1, field2 ... ) Python ! db.define_table( 'purchase', Field('buyer_id', db.person), Field('product_id', db.product), Field('quantity', 'integer'), format = '%(quantity)s %(product_id)s -> %(buyer_id)s') !
  • 72. Query conditions as query, connected with a "|" Python ! my_query = (db.mytable.myfield != None) | (db.mytable.myfield > 'A') rows = db(my_query).select() ! for row in rows: print row.myfield ! !
  • 74. Transaction db.commit() db.rollback() rollback will ignore all operations since the last commit
  • 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() !
  • 76. Practice & Resource of Web2py
  • 77. Practices From the online web2py book 03 Overview 04 The core 05 The views 06 The database abstraction layer 07 Forms and validators
  • 78. Resources Quick Examples (Snippets)
 http://www.web2py.com/examples/default/examples Online Book (free)
 http://web2py.com/books/default/chapter/29/00/preface Python Cheat-sheet
 http://rgruet.free.fr/PQR26/PQR2.6_modern_a4.pdf
  • 79. Open Source Project Contribution
  • 80. Discussion is important mailing list documentation IRC Channel STFW & RTFM & GIYF
  • 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/
  • 83. Thanks Good luck to your development