16
Larry cai <[email protected]>

Learn flask in 90mins

Embed Size (px)

Citation preview

Page 1: Learn flask in 90mins

Larry cai <[email protected]>

Page 2: Learn flask in 90mins

Agenda Introduction Exercise 1: Flask’s “Hello World” Exercise 2: Routing for URL Exercise 3: Template (Jinja2) Exercise 4: Handle form Exercise 5: Database (Flask-SQLAlchemy) Reference

Learn flask in 90 minutes2 04/13/15

http://flask.pocoo.org/

Page 3: Learn flask in 90mins

Environment Preparation (docker) Boot2docker Installer (127M)

Contains latest docker already, fast Container persistence via disk automount on /var/lib/docker $ docker -v User/Passwd: docker/tcuser (192.168.59.103)

Download python:2 docker image $ docker pull python:2

(Windows/Mac) Clone the code from github to your user directory (~/git) https://github.com/larrycai/codingwithme-flask

Notepad++ & MobaXterm are recommended

Learn flask in 90 minutes3 04/13/15

http://boot2docker.io/

Page 4: Learn flask in 90mins

Introduction Flask is a microframework for Python based on

Werkzeug, Jinja 2 and good intentions. Similar to Play framework (Java/Scala), Sinatra (Ruby), Also Django vs Ruby on Rails vs Grail ..

Learn flask in 90 minutes4 04/13/15

http://flask.pocoo.org/

Page 5: Learn flask in 90mins

Exercise 1: Hello World Run first app inside docker environment

$ cd /c/Users/<id>/git/codingwithme-flask

$ docker run -it -v $PWD:/code -w /code -p 5000:5000 python:2 bash

# pip install flask

# cd exer1

# python app.py* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

192.168.59.3 - - [08/Apr/2015 15:50:29] "GET / HTTP/1.1" 200 -

192.168.59.3 - - [08/Apr/2015 15:50:29] "GET /favicon.ico HTTP/1.1" 404 -

Browse: http://192.168.59.103:5000 Edit the app.py to print your name “Hello Larry” instead of “Hello World”

Tips: edit in windows, don’t need restart (debug=True)

Learn flask in 90 minutes5 04/13/15

Page 6: Learn flask in 90mins

Routing/Redirect for URL Routing is defined by the route() decorator

Dynamic routing using variable

Redirect to another one using redirect, url_for

Learn flask in 90 minutes6 04/13/15

Page 7: Learn flask in 90mins

Exercise 2: Routing Implement /user to suggest use /user/<name> Implement /user/<name>, say hello if it is Larry, otherwise

say byebye Redirect /users/ to /user with error indication

# cd ../exer2

# python app.py

Tips: check console log redirect 302 (redirect)

Learn flask in 90 minutes7 04/13/15

Page 8: Learn flask in 90mins

Template using Jinja2 Flask configures the Jinja2 template engine automatically

render_template Jinja2 is a full featured template engine for Python. 

Map python variable into template Template inheritance makes it possible to use the same

or a similar layout for all templates

Learn flask in 90 minutes8 04/13/15

http://jinja.pocoo.org/

Page 9: Learn flask in 90mins

Exercise 3: Jinja2 Template Use template instead of string for function hello_user()

# cd ../exer3

# python app.py

Learn flask in 90 minutes9 04/13/15

Page 10: Learn flask in 90mins

Handle form request.form is good enough for simple form Flask-WTF module can be used if needed complex

handling for the form (like validation)

Learn flask in 90 minutes10 04/13/15

Page 11: Learn flask in 90mins

Exercise 4: Web Form Provide form to user as started in user()

# cd ../exer4

# python app.py

Check whether it is in allowed list and redirect to hello page, otherwise show error message (“xxx, who bring you here ?”)

Tips: form is normal html form

Learn flask in 90 minutes11 04/13/15

Page 12: Learn flask in 90mins

Database ORM – Flask-SQLAlchemy Flask-SQLAlchemy is extension provides a wrapper

for the SQLAlchemy project, which is an Object Relational Mapper or ORM

Support different database (SQLite, MySQL, Postgre ….) Command Steps

Define database The data model Create database Operate database ..

Learn flask in 90 minutes12 04/13/15

Page 13: Learn flask in 90mins

Exercise 5: ORM for Database Start with base comments app and understand

# cd ../exer5# pip install flask-sqlalchemy

# python app.py

Add extra item “nickname” Bonus:

Initialize the database (/create) if database doesn’t exist (remove *.sqlite3 first)Reset the database (/drop)Tips: db.create_all(app=app) & db.drop_all(app=app)

Learn flask in 90 minutes13 04/13/15

example is based on: http://runnable.com/UhcUVQ7XwdEqAAPg/using-sqlalchemy-in-flask-for-python

Page 14: Learn flask in 90mins

Summary Flask is python web framework, similar exists in other

language Routing/Template/Form/Database are the base

knowledge. Simple but powerful (together with css/javascript)

Learn more sample, and try to build your own !!

Learn flask in 90 minutes14 04/13/15

Page 15: Learn flask in 90mins

Reference http://flask.pocoo.org/ Book: Flask Web Development:

http://oreilly.com/catalog/9781449372620/ Miguel Grinberg’s Blog: http://blog.miguelgrinberg.com/ Base example for exer5 :

http://runnable.com/UhcUVQ7XwdEqAAPg/using-sqlalchemy-in-flask-for-python

Learn flask in 90 minutes15 04/13/15

Page 16: Learn flask in 90mins

ChangeLog 2015/04/12: first release 2015/04/13: after first pilot, summary is added

Learn docker in 90 minutes16 04/13/15