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实现的系统实用log类实例
Jun 30 Python
Python操作Access数据库基本步骤分析
Sep 19 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
python数据结构之链表详解
Sep 12 Python
详解python中的线程
Feb 10 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
Django 全局的static和templates的使用详解
Jul 19 Python
Python实现括号匹配方法详解
Feb 10 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
用python实现监控视频人数统计
May 21 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个人网站架设连环讲(一)
2006/10/09 PHP
MySql中正则表达式的使用方法描述
2008/07/30 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
php返回json数据函数实例
2014/10/09 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
Python标准库之循环器(itertools)介绍
2014/11/25 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
linux面试题参考答案(4)
2014/09/21 面试题
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
大三学习计划书范文
2014/05/02 职场文书
社区志愿者培训方案
2014/06/10 职场文书
大学生工作自荐书
2014/06/16 职场文书
2014年保卫工作总结
2014/12/05 职场文书
产品质量保证书范本
2015/02/27 职场文书
让世界充满爱观后感
2015/06/10 职场文书
2016年寒假生活小结
2015/10/10 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
vue 实现上传组件
2021/05/31 Vue.js
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android