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 相关文章推荐
Python中使用语句导入模块或包的机制研究
Mar 30 Python
用Python代码来解图片迷宫的方法整理
Apr 02 Python
详解Python2.x中对Unicode编码的使用
Apr 03 Python
python中的全局变量用法分析
Jun 09 Python
详解Django中的form库的使用
Jul 18 Python
Python中subprocess的简单使用示例
Jul 28 Python
python运行其他程序的实现方法
Jul 14 Python
Python错误处理操作示例
Jul 18 Python
Python爬虫学习之翻译小程序
Jul 30 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
django 模版关闭转义方式
May 14 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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字符串word末字符实现大小写互换的方法
2014/11/10 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
Python获取邮件地址的方法
2015/07/10 Python
Python中functools模块的常用函数解析
2016/06/30 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
django 控制页面跳转的例子
2019/08/06 Python
python 制作网站小说下载器
2021/02/20 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
什么是岗位职责
2013/11/12 职场文书
《穷人》教学反思
2014/04/08 职场文书
大学班级文化建设方案
2014/05/06 职场文书
计算机软件专业求职信
2014/06/10 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript