SlideShare une entreprise Scribd logo
1  sur  83
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

New in cakephp3
New in cakephp3New in cakephp3
New in cakephp3markstory
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data ObjectsWez Furlong
 
JavaScript
JavaScriptJavaScript
JavaScriptSunil OS
 
Slick: Bringing Scala’s Powerful Features to Your Database Access
Slick: Bringing Scala’s Powerful Features to Your Database Access Slick: Bringing Scala’s Powerful Features to Your Database Access
Slick: Bringing Scala’s Powerful Features to Your Database Access Rebecca Grenier
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretssmueller_sandsmedia
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownpartsBastian Feder
 
Future of HTTP in CakePHP
Future of HTTP in CakePHPFuture of HTTP in CakePHP
Future of HTTP in CakePHPmarkstory
 
Filling the flask
Filling the flaskFilling the flask
Filling the flaskJason Myers
 
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway ichikaway
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologyDaniel Knell
 
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and JasmineRails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and JasmineRaimonds Simanovskis
 
Flask - Backend com Python - Semcomp 18
Flask - Backend com Python - Semcomp 18Flask - Backend com Python - Semcomp 18
Flask - Backend com Python - Semcomp 18Lar21
 
Doctrine fixtures
Doctrine fixturesDoctrine fixtures
Doctrine fixturesBill Chang
 
PHP - PDO Objects
PHP - PDO ObjectsPHP - PDO Objects
PHP - PDO ObjectsAJINKYA N
 

Tendances (20)

New in cakephp3
New in cakephp3New in cakephp3
New in cakephp3
 
Php 101: PDO
Php 101: PDOPhp 101: PDO
Php 101: PDO
 
Doctrine for NoSQL
Doctrine for NoSQLDoctrine for NoSQL
Doctrine for NoSQL
 
Doctrine and NoSQL
Doctrine and NoSQLDoctrine and NoSQL
Doctrine and NoSQL
 
Advanced Django
Advanced DjangoAdvanced Django
Advanced Django
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data Objects
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Slick: Bringing Scala’s Powerful Features to Your Database Access
Slick: Bringing Scala’s Powerful Features to Your Database Access Slick: Bringing Scala’s Powerful Features to Your Database Access
Slick: Bringing Scala’s Powerful Features to Your Database Access
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
 
Future of HTTP in CakePHP
Future of HTTP in CakePHPFuture of HTTP in CakePHP
Future of HTTP in CakePHP
 
Web 11 | AJAX + JSON + PHP
Web 11 | AJAX + JSON + PHPWeb 11 | AJAX + JSON + PHP
Web 11 | AJAX + JSON + PHP
 
Filling the flask
Filling the flaskFilling the flask
Filling the flask
 
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
 
Agile database access with CakePHP 3
Agile database access with CakePHP 3Agile database access with CakePHP 3
Agile database access with CakePHP 3
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology
 
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and JasmineRails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
 
Flask - Backend com Python - Semcomp 18
Flask - Backend com Python - Semcomp 18Flask - Backend com Python - Semcomp 18
Flask - Backend com Python - Semcomp 18
 
Doctrine fixtures
Doctrine fixturesDoctrine fixtures
Doctrine fixtures
 
PHP - PDO Objects
PHP - PDO ObjectsPHP - PDO Objects
PHP - PDO Objects
 

Similaire à Web2py Code Lab

What's new in Python 3.11
What's new in Python 3.11What's new in Python 3.11
What's new in Python 3.11Henry Schreiner
 
Pemrograman Python untuk Pemula
Pemrograman Python untuk PemulaPemrograman Python untuk Pemula
Pemrograman Python untuk PemulaOon Arfiandwi
 
Python Training v2
Python Training v2Python Training v2
Python Training v2ibaydan
 
Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Hugo Hamon
 
Crafting Beautiful CLI Applications in Ruby
Crafting Beautiful CLI Applications in RubyCrafting Beautiful CLI Applications in Ruby
Crafting Beautiful CLI Applications in RubyNikhil Mungel
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Michelangelo van Dam
 
Tips
TipsTips
Tipsmclee
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkBo-Yi Wu
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy CodeRowan Merewood
 
Intorduction of Playframework
Intorduction of PlayframeworkIntorduction of Playframework
Intorduction of Playframeworkmaltiyadav
 
Ch ch-changes cake php2
Ch ch-changes cake php2Ch ch-changes cake php2
Ch ch-changes cake php2markstory
 
Asciidoctor New, Noteworthy and Beyond Devoxx-2017
Asciidoctor New, Noteworthy and Beyond Devoxx-2017Asciidoctor New, Noteworthy and Beyond Devoxx-2017
Asciidoctor New, Noteworthy and Beyond Devoxx-2017Alex Soto
 
Devry cis-170-c-i lab-7-of-7-sequential-files
Devry cis-170-c-i lab-7-of-7-sequential-filesDevry cis-170-c-i lab-7-of-7-sequential-files
Devry cis-170-c-i lab-7-of-7-sequential-filesnoahjamessss
 

Similaire à Web2py Code Lab (20)

What's new in Python 3.11
What's new in Python 3.11What's new in Python 3.11
What's new in Python 3.11
 
Pemrograman Python untuk Pemula
Pemrograman Python untuk PemulaPemrograman Python untuk Pemula
Pemrograman Python untuk Pemula
 
Python Training v2
Python Training v2Python Training v2
Python Training v2
 
Play 2.0
Play 2.0Play 2.0
Play 2.0
 
Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2
 
Crafting Beautiful CLI Applications in Ruby
Crafting Beautiful CLI Applications in RubyCrafting Beautiful CLI Applications in Ruby
Crafting Beautiful CLI Applications in Ruby
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
Tips
TipsTips
Tips
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Hack ASP.NET website
Hack ASP.NET websiteHack ASP.NET website
Hack ASP.NET website
 
TO Hack an ASP .NET website?
TO Hack an ASP .NET website?  TO Hack an ASP .NET website?
TO Hack an ASP .NET website?
 
Play!ng with scala
Play!ng with scalaPlay!ng with scala
Play!ng with scala
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
Intorduction of Playframework
Intorduction of PlayframeworkIntorduction of Playframework
Intorduction of Playframework
 
backend
backendbackend
backend
 
backend
backendbackend
backend
 
Ch ch-changes cake php2
Ch ch-changes cake php2Ch ch-changes cake php2
Ch ch-changes cake php2
 
Asciidoctor New, Noteworthy and Beyond Devoxx-2017
Asciidoctor New, Noteworthy and Beyond Devoxx-2017Asciidoctor New, Noteworthy and Beyond Devoxx-2017
Asciidoctor New, Noteworthy and Beyond Devoxx-2017
 
Magento code audit
Magento code auditMagento code audit
Magento code audit
 
Devry cis-170-c-i lab-7-of-7-sequential-files
Devry cis-170-c-i lab-7-of-7-sequential-filesDevry cis-170-c-i lab-7-of-7-sequential-files
Devry cis-170-c-i lab-7-of-7-sequential-files
 

Plus de Colin Su

Introduction to Google Compute Engine
Introduction to Google Compute EngineIntroduction to Google Compute Engine
Introduction to Google Compute EngineColin Su
 
Introduction to Google Cloud Endpoints: Speed Up Your API Development
Introduction to Google Cloud Endpoints: Speed Up Your API DevelopmentIntroduction to Google Cloud Endpoints: Speed Up Your API Development
Introduction to Google Cloud Endpoints: Speed Up Your API DevelopmentColin Su
 
Functional programming in Python
Functional programming in PythonFunctional programming in Python
Functional programming in PythonColin Su
 
A Tour of Google Cloud Platform
A Tour of Google Cloud PlatformA Tour of Google Cloud Platform
A Tour of Google Cloud PlatformColin Su
 
Introduction to Facebook JavaScript & Python SDK
Introduction to Facebook JavaScript & Python SDKIntroduction to Facebook JavaScript & Python SDK
Introduction to Facebook JavaScript & Python SDKColin Su
 
Introduction to MapReduce & hadoop
Introduction to MapReduce & hadoopIntroduction to MapReduce & hadoop
Introduction to MapReduce & hadoopColin Su
 
Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App EngineColin Su
 
Django Deployer
Django DeployerDjango Deployer
Django DeployerColin Su
 
Introduction to Google - the most natural way to learn English (English Speech)
Introduction to Google - the most natural way to learn English (English Speech)Introduction to Google - the most natural way to learn English (English Speech)
Introduction to Google - the most natural way to learn English (English Speech)Colin Su
 
How to Speak Charms Like a Wizard
How to Speak Charms Like a WizardHow to Speak Charms Like a Wizard
How to Speak Charms Like a WizardColin Su
 
房地產報告
房地產報告房地產報告
房地產報告Colin Su
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to GitColin Su
 
Introduction to Facebook Javascript SDK (NEW)
Introduction to Facebook Javascript SDK (NEW)Introduction to Facebook Javascript SDK (NEW)
Introduction to Facebook Javascript SDK (NEW)Colin Su
 
Introduction to Facebook Python API
Introduction to Facebook Python APIIntroduction to Facebook Python API
Introduction to Facebook Python APIColin Su
 
Facebook Python SDK - Introduction
Facebook Python SDK - IntroductionFacebook Python SDK - Introduction
Facebook Python SDK - IntroductionColin Su
 
Web Programming - 1st TA Session
Web Programming - 1st TA SessionWeb Programming - 1st TA Session
Web Programming - 1st TA SessionColin Su
 
Nested List Comprehension and Binary Search
Nested List Comprehension and Binary SearchNested List Comprehension and Binary Search
Nested List Comprehension and Binary SearchColin Su
 
Python-List comprehension
Python-List comprehensionPython-List comprehension
Python-List comprehensionColin Su
 
Python-FileIO
Python-FileIOPython-FileIO
Python-FileIOColin Su
 
Python Dictionary
Python DictionaryPython Dictionary
Python DictionaryColin Su
 

Plus de Colin Su (20)

Introduction to Google Compute Engine
Introduction to Google Compute EngineIntroduction to Google Compute Engine
Introduction to Google Compute Engine
 
Introduction to Google Cloud Endpoints: Speed Up Your API Development
Introduction to Google Cloud Endpoints: Speed Up Your API DevelopmentIntroduction to Google Cloud Endpoints: Speed Up Your API Development
Introduction to Google Cloud Endpoints: Speed Up Your API Development
 
Functional programming in Python
Functional programming in PythonFunctional programming in Python
Functional programming in Python
 
A Tour of Google Cloud Platform
A Tour of Google Cloud PlatformA Tour of Google Cloud Platform
A Tour of Google Cloud Platform
 
Introduction to Facebook JavaScript & Python SDK
Introduction to Facebook JavaScript & Python SDKIntroduction to Facebook JavaScript & Python SDK
Introduction to Facebook JavaScript & Python SDK
 
Introduction to MapReduce & hadoop
Introduction to MapReduce & hadoopIntroduction to MapReduce & hadoop
Introduction to MapReduce & hadoop
 
Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App Engine
 
Django Deployer
Django DeployerDjango Deployer
Django Deployer
 
Introduction to Google - the most natural way to learn English (English Speech)
Introduction to Google - the most natural way to learn English (English Speech)Introduction to Google - the most natural way to learn English (English Speech)
Introduction to Google - the most natural way to learn English (English Speech)
 
How to Speak Charms Like a Wizard
How to Speak Charms Like a WizardHow to Speak Charms Like a Wizard
How to Speak Charms Like a Wizard
 
房地產報告
房地產報告房地產報告
房地產報告
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 
Introduction to Facebook Javascript SDK (NEW)
Introduction to Facebook Javascript SDK (NEW)Introduction to Facebook Javascript SDK (NEW)
Introduction to Facebook Javascript SDK (NEW)
 
Introduction to Facebook Python API
Introduction to Facebook Python APIIntroduction to Facebook Python API
Introduction to Facebook Python API
 
Facebook Python SDK - Introduction
Facebook Python SDK - IntroductionFacebook Python SDK - Introduction
Facebook Python SDK - Introduction
 
Web Programming - 1st TA Session
Web Programming - 1st TA SessionWeb Programming - 1st TA Session
Web Programming - 1st TA Session
 
Nested List Comprehension and Binary Search
Nested List Comprehension and Binary SearchNested List Comprehension and Binary Search
Nested List Comprehension and Binary Search
 
Python-List comprehension
Python-List comprehensionPython-List comprehension
Python-List comprehension
 
Python-FileIO
Python-FileIOPython-FileIO
Python-FileIO
 
Python Dictionary
Python DictionaryPython Dictionary
Python Dictionary
 

Dernier

The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Dernier (20)

The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

Web2py Code Lab

  • 3. Installing Python http://python.org/downloads/ Python 2.7.x Mac OS X & Linux - no installation needed, it's built-in
  • 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
  • 24. Download web2py http://www.web2py.com/init/default/download Windows & Mac OS X - Packaged Executive Linux - python web2py.py
  • 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