Your SlideShare is downloading. ×
Web2py Code Lab
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Web2py Code Lab

2,137

Published on

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,137
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
111
Comments
0
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Code Lab +Colin Su @littleq0903
  • 2. Python Fundamentals
  • 3. Installing Python http://python.org/downloads/ Python 2.7.x Mac OS X & Linux - no installation needed, it's built-in
  • 4. Hidden Documentation help() dir()
  • 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
  • 23. Web2py Overview
  • 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
  • 31. URL Mapping http://localhost:8000/<application>/<controller>/<handler> Example http://localhost:8000/mywebsite/default/index Application "mywebsite" Controller "default.py" Handler "def index(): ..."
  • 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'
  • 34. Code Labs
  • 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> ! ! !
  • 43. Core Components
  • 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
  • 55. Responding HTTP() redirect() URL()
  • 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')))
  • 60. The Views
  • 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>
  • 68. Database
  • 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 ! !
  • 73. 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]
  • 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

×