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中序列与字典的相同和不同之处
Jan 19 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
python创造虚拟环境方法总结
Mar 04 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
使用opencv将视频帧转成图片输出
Dec 10 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
django跳转页面传参的实现
Sep 17 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Python数据分析之pandas函数详解
Apr 21 Python
python lambda 表达式形式分析
Apr 03 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编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
PHP 验证码的实现代码
2011/07/17 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
python中list常用操作实例详解
2015/06/03 Python
详解在Python程序中自定义异常的方法
2015/10/16 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python看某个模块的版本方法
2018/10/16 Python
Python骚操作之动态定义函数
2019/03/26 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
村官学习十八大感想
2014/01/15 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
励志演讲稿范文
2014/04/29 职场文书
授权委托书范文
2014/07/31 职场文书
安全生产标语大全
2014/10/06 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫