Flask 入门(第三篇)

1. 安装虚拟环境

安装虚拟环境:

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

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

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

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

# 3、运行
source ~/.bashrc

创建虚拟环境(ubuntu里须在联网状态下)

$ mkvirtualenv Flask_py

进入虚拟环境

$ workon Flask_py

退出虚拟环境

如果所在环境为真实环境,会提示deactivate:未找到命令

$ deactivate Flask_py

2. 安装Flask依赖包

安装依赖包(须在虚拟环境中): 依赖就是开发以及程序运行需要使用的环境的集合。包括软件、插件等。我们一般会把需要使用的依赖给保存在一个文件中,命名为requirements的txt文件。如果在其它环境中要运行我们的项目,直接通过指令可以一次性安装所有依赖。

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

$ pip install -r requirements.txt

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

$ pip freeze > requirements.txt

在ipython中测试安装是否成功

$ 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

posted @ 2019-06-24 11:07  Hubery_Jun  阅读(202)  评论(0编辑  收藏  举报