python flask安装和命令详解


Posted in Python onApril 02, 2019

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目录下!

总结

以上所述是小编给大家介绍的python flask安装和命令详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
python实现简单ftp客户端的方法
Jun 28 Python
python 换位密码算法的实例详解
Jul 19 Python
python决策树之CART分类回归树详解
Dec 20 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
关于Python核心框架tornado的异步协程的2种方法详解
Aug 28 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
pycharm全局搜索的具体步骤
Jul 28 Python
Python爬取12306车次信息代码详解
Aug 12 Python
基于Python 函数和方法的区别说明
Mar 24 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 #Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 #Python
Python3字符串encode与decode的讲解
Apr 02 #Python
深入了解和应用Python 装饰器 @decorator
Apr 02 #Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 #Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 #Python
windows下numpy下载与安装图文教程
Apr 02 #Python
You might like
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
vue路由中前进后退的一些事儿
2019/05/18 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
django列表筛选功能的实现代码
2020/03/27 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
浅析python实现动态规划背包问题
2020/12/31 Python
weblogic面试题
2016/03/07 面试题
服装销售人员求职自我评价
2013/09/26 职场文书
出纳岗位职责范本
2013/12/01 职场文书
学前教育学生自荐信范文
2013/12/31 职场文书
美术毕业生求职信
2014/02/25 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
一文搞懂MySQL索引页结构
2022/02/28 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS