第二章 程序的基本结构

2.1初始化

from flask import Flask
app = Flask(__name__)

2.2路由和视图函数

@app.route('/')
def index():
    return '<p>Hello World<p>' 

2.3启动服务器

if __name__ == '__main__':
    app.run(debug=True)

2.4一个完整的程序

from flask import Flask
app = Flask(__name__)


@app.route('/')
def index():
    return '<p>Hello World<p>' 


if __name__ == '__main__':
    app.run(debug=True)

执行该文件后,访问http://127.0.0.1:5000

2.5请求-响应循环

2.5.1 程序和请求上下文

//获取header信息
@app.route('/') def index(): user_agent = request.headers.get('User-Agent') return '<p>Your browser is %s<p>' % user_agent

2.5.2 请求调度

>>> app.url_map
Map([<Rule '/' (HEAD, OPTIONS, GET) -> index>,
 <Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
 <Rule '/user/<name>' (HEAD, OPTIONS, GET) -> user>])

2.5.3 请求钩子

before_first_request 处理第一个请求之前运行

before_request 每次请求之前运行

after_request 如果没有异常抛出,每次请求之后运行

teardown_request 即使有异常抛出,也在请求之后运行

不详

2.5.4 响应

// 返回400
@app.route('/')
def index():
    return '<h1>Bad Request</h1>', 400
// 设置响应,响应时设置浏览器cookie
@app.route('/res')
def res():
    response = make_response('<h1>This document carries a cookie!</h1>')
    response.set_cookie('answer', '42')
    return response
// 重定向链接
@app.route('/red')
def red():
    return redirect('http://www.baidu.com')
// 不满足条件主动抛出404
app.route('/user_id/<user_id>')
def get_user(user_id):
    re_user = load_user(user_id)
    if not re_user:
        abort(404)
    return '<h1> hello, %s</h1>' % re_user


def load_user(user_id):
    re_id = str(user_id)
    re = {"1": "user_a", "2": "user_b"}
    return re.get(re_id)

2.6 Flask扩展

安装扩展

(venv) $ pip install flask-script

导入扩展

from flask.ext.script import Manager
manager = Manager(app)

if __name__ == '__main__':
manager.run()

使用扩展

(venv) $ python hello.py runserver --help

 

posted @ 2016-10-31 16:42  绝丶影  阅读(126)  评论(0编辑  收藏  举报