python flask安装和命令

Flask Web开发实战学习笔记

Flask简介

Flask是使用Python编写的Web微框架。Web框架可以让我们不用关 心底层的请求响应处理,更方便高效地编写Web程序。因为Flask核心简 单且易于扩展,所以被称作微框架(micro framework)。Flask有两个主 要依赖,一个是WSGI(Web Server Gateway Interface,Web服务器网关 接口)工具集——Werkzeug(http://werkzeug.pocoo.org/),另一个是 Jinja2模板引擎(http://jinja.pocoo.org/)。Flask只保留了Web开发的核心 功能,其他的功能都由外部扩展来实现,比如数据库集成、表单认证、 文件上传等。如果没有合适的扩展,你甚至可以自己动手开发。Flask不 会替你做决定,也不会限制你的选择。总之,Flask可以变成任何你想要 的东西,一切都由你做主。

git管理代码

$ git clone https://github.com/greyli/helloflask.git 

$ cd helloflask

1.1搭建开发环境

1.1.1 Pipenv工作流

PyPI(https://pypi.org)是一个Python包的在线仓库,截至2018年5 月,共有13万多个包存储在这里。后面我们会学习如何编写自己的Flask 扩展,并把它上传到PyPI上。到时你就可以使用上面这条命令安装自己 编写的包。

现在使用pip安装Pipenv:

$ pip install pipenv

在Linux或macOS系统中使用sudo以全局安装:

$ sudo pip install pipenv

可以使用下面的命令检查Pipenv是否已经安装:

$ pipenv --version 

1.创建虚拟环境

$ pipenv install 

Creating a virtualenv for this project… 

... 

Virtualenv location: /path/to/virtualenv/helloflask-5Pa0ZfZw

 ...

附注:

默认情况下,Pipenv会统一管理所有虚拟环境。在Windows系统 中,虚拟环境文件夹会在C:\Users\Administrator\.virtualenvs\目录下创 建,而Linux或macOS会在~/.local/share/virtualenvs/目录下创建。如果你 想在项目目录内创建虚拟环境文件夹,可以设置环境变量 PIPENV_VENV_IN_PROJECT,这时名为.venv的虚拟环境文件夹将在 项目根目录被创建。

虚拟环境文件夹的目录名称的形式为“当前项目目录名+一串随机字 符”,比如helloflask-5Pa0ZfZw。

在单独使用Virtualenv时,我们通常会显式地激活虚拟环境。在 Pipenv中,可以使用pipenv shell命令显式地激活虚拟环境:

$ pipenv shell 

Loading .env environment variables… 

Launching subshell in virtual environment. Type 'exit' to return.

提示:

当执行pipenv shell或pipenv run命令时,Pipenv会自动从项目目录下 的.env文件中加载环境变量。 Pipenv会启动一个激活虚拟环境的子shell,现在你会发现命令行提 示符前添加了虚拟环境名“(虚拟环境名称)$”,比如:

(helloflask-5Pa0ZfZw) $

这说明我们已经成功激活了虚拟环境,现在你的所有命令都会在虚 拟环境中执行。当你需要退出虚拟环境时,使用exit命令。

除了显式地激活虚拟环境,Pipenv还提供了一个pipenv run命令,这 个命令允许你不显式激活虚拟环境即可在当前项目的虚拟环境中执行命 令,比如:

$ pipenv run python hello.py

这会使用虚拟环境中的Python解释器,而不是全局的Python解释器

2.管理依赖

在创建虚拟环境时,如果项目根目录下没有Pipfile文件,pipenv install命令还会在项目文件夹根目录下创建Pipfile和Pipfile.lock文件,前 者用来记录项目依赖包列表,而后者记录了固定版本的详细依赖包列 表。当我们使用Pipenv安装/删除/更新依赖包时,Pipfile以及Pipfile.lock 会自动更新。

1.1.2 安装Flask

$ pipenv install flask 

Installing flask...

 ... Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 

本文章使用了最新版本的Flask(1.0.2),如果你还在使用旧版本,请 使用下面的命令进行更新:

$ pipenv update flask

1.2  hello flask

使 用下面的命令切换到该目录:

$ cd demos/hello

在hello目录下的app.py脚本中包含一个最小的Flask程序,如代码清 单1-1所示。 代码清单1-1 hello/app.py:最小的Flask程序

from flask import Flask app = Flask(__name__)

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

1.2.1 创建程序实例

我们安装Flask时,它会在Python解释器中创建一个flask包,我们可 以通过flask包的构造文件导入所有开放的类和函数。我们先从flask包导 入Flask类,这个类表示一个Flask程序。实例化这个类,就得到我们的

程序实例app:

from flask import Flask 

app = Flask(__name__)

传入Flask类构造方法的第一个参数是模块或包的名称,我们应该使 用特殊变量__name__。Python会根据所处的模块来赋予__name__变量相 应的值,对于我们的程序来说(app.py),这个值为app。除此之外,这 也会帮助Flask在相应的文件夹里找到需要的资源,比如模板和静态文 件。

提示

Flask类是Flask的核心类,它提供了很多与程序相关的属性和方 法。在后面,我们经常会直接在程序实例app上调用这些属性和方法来 实现相关功能。在第一次提及Flask类中的某个方法或属性时,我们会直 接以实例方法/属性的形式写出,比如存储程序名称的属性为app.name。

1.2.2 注册路由

在一个Web应用里,客户端和服务器上的Flask程序的交互可以简单 概括为以下几步:

1)用户在浏览器输入URL访问某个资源。 

2)Flask接收用户请求并分析请求的URL。 

3)为这个URL找到对应的处理函数。 

4)执行函数并生成响应,返回给浏览器。

 5)浏览器接收并解析响应,将信息显示在页面中。

 在上面这些步骤中,大部分都由Flask完成,我们要做的只是建立处 理请求的函数,并为其定义对应的URL规则。只需为函数附加 app.route()装饰器,并传入URL规则作为参数,我们就可以让URL与函数建立关联。这个过程我们称为注册路由(route),路由负责管理 URL和函数之间的映射,而这个函数则被称为视图函数(view function)。

操作:

在这个程序里,app.route()装饰器把根地址/和index()函数绑 定起来,当用户访问这个URL时就会触发index()函数。这个视图函 数可以像其他普通函数一样执行任意操作,比如从数据库中获取信息, 获取请求信息,对用户输入的数据进行计算和处理等。最后,视图函数 返回的值将作为响应的主体,一般来说,响应的主体就是呈现在浏览器 窗口的HTML页面。在最小程序中,视图函数index()返回一行问候:

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

虽然这个程序相当简单,但它却是大部分Flask程序的基本模式。在 复杂的程序中,我们会有许多个视图函数分别处理不同URL的请求,在 视图函数中会完成更多的工作,并且返回包含各种链接、表单、图片的 HTML文件,而不仅仅是一行字符串。返回的页面中的链接又会指向其 他URL,被单击后触发对应的视图函数,获得不同的返回值,从而显示 不同的页面,这就是我们浏览网页时的体验。

提示

route()装饰器的第一个参数是URL规则,用字符串表示,必须以 斜杠(/)开始。这里的URL是相对URL(又称为内部URL),即不包 含域名的URL。以域名www.helloflask.com为例,“/”对应的是根地址 (即www.helloflask.com),如果把URL规则改为“/hello”,则实际的绝 对地址(外部地址)是www.helloflask.com/hello。 假如这个程序部署在域名为www.helloflask.com的服务器上,当启 动服务器后,只要你在浏览器里访问www.helloflask.com,就会看到浏览器上显示一行“Hello,Flask!”问候。

1.为视图绑定多个URL

@app.route('/hi') 

@app.route('/hello') 

def say_hello(): 

 return '<h1>Hello, Flask!</h1>'

2.动态URL

@app.route('/greet/<name>') 

def greet(name): 

 return '<h1>Hello, %s!</h1>' % name

附注:

当URL规则中包含变量时,如果用户访问的URL中没有添加变量, 比如/greet,那么Flask在匹配失败后会返回一个404错误响应。一个很常 见的行为是在app.route()装饰器里使用defaults参数设置URL变量的默 认值,这个参数接收字典作为输入,存储URL变量和默认值的映射。在 下面的代码中,我们为greet视图新添加了一个app.route()装饰器, 为/greet设置了默认的name值:

@app.route('/greet', defaults={'name': 'Programmer'}) 

@app.route('/greet/<name>') 

def greet(name):    

return '<h1>Hello, %s!</h1>' % name

这时如果用户访问/greet,那么变量name会使用默认值 Programmer,视图函数返回<h1>Hello,Programmer!</h1>。上面的用 法实际效果等同于:

@app.route('/greet') 

@app.route('/greet/<name>') 

def greet(name='Programmer'):   

 return '<h1>Hello, %s!</h1>' % name

1.3 启动开发服务器

$ flask run

* Environment: production

WARNING: Do not use the development server in a production environment. Use a production WSGI server instead.

* Debug mode: off

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

注意:

如果报这个错误! 

Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.

那就是路径没有切到flask 的app.py目录下!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容