Flask 入门(第三篇)

1. 安装虚拟环境

安装虚拟环境:python

$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper
virtualenv --version        # 检查版本

安装完虚拟环境后,若是提示找不到mkvirtualenv命令,须配置环境变量:web

# 一、建立目录用来存放虚拟环境
mkdir $HOME/.virtualenvs

# 二、打开~/.bashrc文件,并添加以下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 三、运行
source ~/.bashrc

建立虚拟环境(ubuntu里须在联网状态下)数据库

$ mkvirtualenv Flask_py

进入虚拟环境flask

$ workon Flask_py

退出虚拟环境ubuntu

若是所在环境为真实环境,会提示deactivate:未找到命令浏览器

$ deactivate Flask_py

2. 安装Flask依赖包

安装依赖包(须在虚拟环境中): 依赖就是开发以及程序运行须要使用的环境的集合。包括软件、插件等。咱们通常会把须要使用的依赖给保存在一个文件中,命名为requirements的txt文件。若是在其它环境中要运行咱们的项目,直接经过指令能够一次性安装全部依赖。bash

安装依赖包(须在虚拟环境中):服务器

$ pip install -r requirements.txt

生成依赖包(须在虚拟环境中):session

$ pip freeze > requirements.txt

在ipython中测试安装是否成功app

$ from flask import Flask

3. Flask 运行流程

客户端发起 HTTP 请求,web 服务器使用 WSGI 协议未来自客户端的请求交给 flask 实例。

WSGI 是 Python 语言定义的 web 服务器 和 web 应用程序之间的一种简单而通用的接口,它封装了 http 请求,解析 http 请求、发送 http 响应等这些底层代码。

程序实例使用 Werkzeug 作路由分发,根据每一个 URL 请求,找到具体视图函数。router 内部会调用 add_url_route() 方法来实现路由注册。

调用视图函数,获取响应数据后,将数据传入 HTML 模板文件中,模板引擎负责渲染响应数据,而后由 flask 返回响应数据给浏览器,最后浏览器将数据显示给客户端。

4. 拓展

4.1 上下文

上下文就像一个容器,保存 Flask 程序运行时的一些信息。Flask 中有两种上下文:请求上下文、应用上下文。

请求上下文(request context)

requestsession 都属于请求上下文对象

  • request:封装 HTTP 请求内容
  • session:记录请求会话信息,如:保存用户信息 session['username']= user.id

应用上下文(application context)

current_appg 都属于应用上下文对象

  • current_app:当前运行程序文件的程序实例 current_app.name 打印当前应用程序实例名字
>>> from s3 import app
>>> from flask import Flask
>>> context = app.app_context()
>>> context.push()
>>> current_app.name
's3'
  • g:处理请求时,用于临时存储的对象,每次请求时都会重设这个变量,通常用于获取临时请求的用户信息。
    • 当调用app = Flask(name)的时候,建立了程序应用对象app;
    • request 在每次http请求发生时,WSGI server调用Flask.call();而后在Flask内部建立的request对象;
    • app的生命周期大于request和g,一个app存活期间,可能发生屡次http请求,因此就会有多个request和g。
    • 最终传入视图函数,经过return、redirect或render_template生成response对象,返回给客户端。

请求上下文和应用上下文区别

  • 请求上下文:保存了客户端和服务器交互的数据。
  • 应用上下文:在flask程序运行过程当中,保存的一些配置信息,好比程序文件名、数据库的链接、用户信息等。

4.2 Flask-Script扩展命令行

除了可使用 app.run() 传递参数外(能够传递 host/ip等),还能够经过 Flask-Script 拓展程序拓展命令行,从命令行传递这些参数:

app.py

from flask import Flask
from flask_script import Manager

app = Flask(__name__)

manager = Manager(app)

@app.route('/')
def index():
    return 'OK'

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

经过 python app.py runserver --help 来查看能够传递的参数。(前提是你要安装好 Flask-Script

相关文章
相关标签/搜索