Flask_0x01 安装 & 程序基本结构

0x1 使用虚拟环境 

 

示例代码
$ git clone https://github.com/miguelgrinberg/flasky.git $ cd flasky $ git checkout 1a

 

  1.1 安装virtualenv

1 Ubuntu   : $ sudo apt-get install python-virtualenv
2 Mac OS X : $ sudo easy_install virtualenv
3 Windows  : https://bitbucket.org/pypa/setuptools 下载ez_setup.py
4            $ python ez_setup.py
5            $ easy_install virtualenv

  1.2 用virtualenv创建python虚拟环境命名为venv

$ virtualenv venv

    激活虚拟环境

Linux/Mac:   $ source venv/bin/activate 
Windows  :   $ venv\Scripts\activate

    回到全局Python解释器

$ deactivate

    虚拟环境中安装flask

(venv)$ pip install flask

 

0x2 程序基本结构

  2.1 初始化,创建程序实例

from flask import Flask
app = Flask(__name__)

    Flask用name参数决定程序的根目录,以便能够找到相对于程序根目录的资源文件位置

  2.2 路由

    路由:处理URL和函数之间关系的程序

    定义路由:使用app.route修饰器,把修饰的函数注册为路由

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

    路由中定义动态名字:

@app.route('/user/<name>')
def user(name):
    return '<h1>Hello, %s!</h1>' % name

    路由动态部分默认使用字符串,也可以使用类型定义e.g /user/<int:id>只匹配id为整数的url

  2.3 启动服务器

    程序实例用run方法启动Flask集成的Web服务器

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

    Flask提供的Web服务器不适用在生产环境中使用

  2.4 请求-响应

    Flask使用上下文临时把某些对象变为全局可访问

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

    在程序实例上调用app.app_context()可获得一个程序上下文

from hello import app
from flask import current_app
app_ctx = app.app_context()
app_ctx.push()
current_app.name
app_ctx.pop()

    查看hello.py生成的映射

(venv) $ python
>>> from hello import app
>>> app.url_map

    /static/<filename> 路由是Flask添加的特殊路由,用于访问静态文件

    请求钩子
    before_first_request:注册一个函数,在处理第一个请求之前运行
    before_request:注册一个函数,在每次请求之前运行
    after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行
    teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行

    make_response()函数可接受1、2、3个参数并返回一个Response对象

from flask import make_response
 
@app.route('/')
def index():
    response = make_response('<h1>This document carries a cookie!</h1>')
    response.set_cookie('answer','42')
    return response

    Flask提供redirect()辅助函数,用于生成重定向响应

from flask imort redirect

@app.route('/')
def index():
    return redirect('http://www.xxx.com')

    about() 函数用于处理错误

URL中id对应的用户不存在,返回状态码404
from flask import about

@app.route('/user/<id>')
def get_user(id):
    user = load_user(id)
    if not user:
        abort(404)
    return '<h1>Hello, %s</h1>' % user.name

about不会把控制权交给调用它的函数,而是抛出异常把控制权交给Web服务器

  2.6 Flask扩展

    Flask-Script为Flask添加了一个命令行解析器

(venv) $ pip install flask-script

    为Flask开发的扩展都在flask.ext命名空间下

初始化方法:把程序实例作为参数传给构造函数,初始化主类的实例

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


#...

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

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

    Flask默认监听localhost上的连接 --host 0.0.0.0 允许同网中的其他计算机连接服务器

(venv) $ python hello.py runserver --host 0.0.0.0

 

posted @ 2017-01-22 11:34  Hxxxxx  阅读(254)  评论(0编辑  收藏  举报