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

Flask 入门(第三篇)的更多相关文章

  1. ElasticSearch入门 第三篇:索引

    这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  2. Flask 入门(第一篇)

    1. 认识 Flask Flask 是一个微型 Web 框架,依赖于 jinjia2 模板系统和 Werkzeug WSGI(本质为 Socket 服务端) 服务,默认情况不支持数据库抽象层.表单验证 ...

  3. Flask 入门(第二篇)

    1. 数据库 Flask 没有限定使用哪种数据库,不管是 SQL 还是 NoSQL.如果你不想自己编写负责的 SQL语句的话,你也可以使用 ORM,通过 SQLALchemy 即可实现. 1.1 SQ ...

  4. Flask 入门(三)

    官方的文档虽然正规,但是有点太过书面语,有时候,明明很简单的一个程序,如果非要看它的说明,反而会让人疑惑不解,倒不如看一下别人写的简单的一个demo,jinjia2模板看官方的文档看了5回,愣是不明白 ...

  5. PowerBI入门 第三篇:报表设计技巧

    最近做了几个PowerBI报表,对PowerBI的设计有了更深的理解,对数据的塑形(sharp data),不仅可以在Data Source中实现,例如在TSQL查询脚本中,而且可以在PowerBI中 ...

  6. flask基础---第三篇

    flask中request的一些方法 首先from flask import request 1.request.path 2.request.host 3.request.host_url from ...

  7. flask入门(三)

    表单 request.form 能获取POST 请求中提交的表单数据.但是这样不太安全,容易受到恶意攻击.对此,flask有一个flask-wtf扩展,用于避免这一情况 在虚拟环境下用pip inst ...

  8. Delphi xe7并行编程快速入门(三篇)

    现在多数设备.计算机都有多个CPU单元,即使是手机也是多核的.但要在开发中使用多核的优势,却需要一些技巧,花费时间编写额外的代码.好了,现在可以使用Delphi做并行编程了. 在Delphi.C++ ...

  9. python爬虫入门---第三篇:保存一张图片

    import requests import os url = 'http://imgsrc.baidu.com/forum/w%3D580%3B/sign=749ed018cecec3fd8b3ea ...

  10. python爬虫入门---第三篇:自动下载图片

    适用的图片网站:美桌 源代码: import requests import re import urllib from bs4 import BeautifulSoup def get_html_t ...

随机推荐

  1. 遇到“拒绝了对对象的 EXECUTE 权限”和“无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限”的问题

    在将数据库从sqlserver2000迁移到2005后,原有的用户名TDS在执行存储过程是报错:“拒绝了对对象的 EXECUTE 权限”. 如网上所说,在使用的数据库的属性页->权限中给TDS添 ...

  2. UOJ78 二分图最大匹配

    从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,…,nl1,…,nl 和 1,…,nr1,…,nr. 有若干个这样的条件:第 vv 个男生和第 uu 个女生愿意结为 ...

  3. TCP/IP 详解卷一 - TCP CWR、ECE、URG、ACK、PSH、RST、SYN、FIN控制位

    from:https://blog.csdn.net/u012243115/article/details/43487461 2015年02月04日 15:56:32 阅读数:1464 TCP 和 U ...

  4. 在接口中的静态方法来获取model的实例对象

    直接先上代码: 接口代码 abstract class BaseModel { /** * @var null */ protected static $_instances = Array(); / ...

  5. vi 常用编辑命令

    什么是vi: vi是Linux/Unix底下最常用的文本编辑器,可以理解为和Windows下的txt一样,咱们一般操作linux服务器的时候都是没有图形化界面的, 怎么移动光标,到哪个位置,替换修改什 ...

  6. codeforces 631A A. Interview

    A. Interview time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  7. python TypeError: 'NoneType' object is not iterable

    list(set(map(lambda tp_id : tp_id if not ('#' in tp_id) and len(tp_id.strip().replace('\n', '')) > ...

  8. inux命令学习笔记(13):less 命令

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大. less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面 ...

  9. PS色调— —通道混合

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=im ...

  10. 洛谷3384&bzoj1036树链剖分

    值得注意的是: 一个点的子树是存在一起的...也就是说我们修改子树的时候只用... /********************************************************* ...