Flask Web框架
Flask依赖两个外部库:Werkzeug和Jinja2。Werkzeug是一个WSGI(在Web应用和多种服务器之间的标准Python接口)工具集;Jinja2负责渲染模板。所以在安装Flask之前,需要安装这两个外部库。
安装虚拟环境
1、安装Virtualenv
最好在命令行中安装
virtualenv --version 可以查看版本
2、创建虚拟环境
接下来使用virtualenv命令在当前文件夹中创建Python虚拟环境。这个命令只有一个必需的参数,即虚拟环境的名字。创建虚拟环境后,当前文件夹中会出现一个子文件夹,与虚拟环境相关的文件都保存在这个子文件夹中。一般,虚拟环境会被命名为venv
运行完成后,在运行的目录下,会新增一个venv文件夹,它保存全新的虚拟环境,其中有一个私有的Python解释器。
3、激活虚拟环境
venv\Scripts\activate
安装Flask
pip install flask
安装成功后,可通过 pip list --format columns 查看所有安装包
第一个Flask程序
from flask import Flask #导入flask
app=Flask(__name__) #创建Flask对象
@app.route('/')
def hell_world():
return 'hello world!'
if __name__ == '__main__':
app.run()

输入上面的网址,发现hello world显示出来了
那么,这段代码做了什么?
首先,我们导入了Flask类。这个类的实例将会是我们的WSGI应用程序
接下来,我们创建一个该类的实例,第一个参数是应用模块或包的名称。如果你使用单一的模块,应该使用__name__,因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同(也就是__main__或实际的导入名)。这是必须的,这样Flask才知道到哪去找模块、静态文件等等。详见Flask文档
然后,我们使用route()装饰器告诉Flask什么样的URL能触发我们的函数。
这个函数的名字也在生成URL时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息。
最后我们用run()函数来让应用运行在本地服务器上。main保证该脚本被Python解释器直接执行的时候才会运行,而不是作为模块导入的时候。
开启调试模式
虽然run()方法适用于启动本地的开发服务器,但是每次修改代码后都要手动重启它。这样并不够优雅。有两种途径来启动调试模式:
一种是直接在应用对象上设置:
app.debug=True
app.run()
另一种是作为run方法的一个参数传入:
app.run(debug=True)
路由
客户端(如Web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例。程序实例需要知道对每个URL请求运行了哪些代码,所以保存了一个URL到Python函数的映射关系。处理URL和函数之间关系的程序为路由。
在Flask程序中定义路由的最简便方式,是使用程序实例提供的app.route修饰器,把修饰的函数注册为路由。
修饰器是python语言的标准特性,可以使用不同的方式修改函数的行为。通常用法是使用修饰器把函数注册为事件的处理程序。
你也可以构造含动态部分的URL,也可以在一个函数上附着多个规则
1、变量规则
要给URL添加变量部分,你可以把这些特殊字段标记为<variable_name>,这个部分将会作为命名参数传递到你的函数。规则可以用<converter:variable_name>指定一个可选的转换器。
示例
from flask import Flask #导入flask
app=Flask(__name__) #创建Flask对象
@app.route('/')
def hell_world():
return 'hello world!'
@app.route('/user/<username>')
def show_user_profile(username):
#显示该用户名的用户信息
return 'User %s'%username
@app.route('/post/<int:post_id>')
def show_post(post_id):
#根据id显示文章,id是整型数据
return 'Post %d'%post_id
if __name__ == '__main__':
app.run(debug=True)
上述代码中使用了转换器。它有下面几种:
int 接受整数
float 接受浮点数
path 默认。但也接受斜线
运行文件,在浏览器中将地址修改为“http://127.0.0.1:5000/user/张三”,查看展示效果
输入“http://127.0.0.1:5000/post/2”
2、构造URL
如果Flask能匹配URL,那么Flask能生成它们吗?你可以用url_for()来给指定的函数构造URL。它接受函数名作为第一个参数,也接受对应URL规则的变量部分的命名参数。未知变量部分会添加到URL末尾作为查询参数。
from flask import Flask,url_for
app=Flask(__name__)
@app.route('/url/')
def get_url():
#根据id显示文章,id是整型数据
return url_for('show_post',post_id=2)
if __name__ == '__main__':
app.run(debug=True)
3、HTTP方法
HTTP(与web应用会话的协议)有许多不同的访问URL方法。默认情况下,路由只回应GET请求,但是通过route()装饰器传递methods参数可以改变这个行为。
静态文件
动态Web应用也会需要静态文件,通常是CSS和JavaScript文件。理想状况下,你已经配置好Web服务器来提供静态文件,但在开发中,Flask也可以做到。只要在你的包中或是模板所在目录中创建一个名为static的文件夹,在应用中使用“/static”即可访问
给静态文件生成URL,使用特殊的“static”端点名
url_for('static',filename='hello.html')
模板
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask使用了Jinja2的强大模板引擎。
1、渲染模板
默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板。
Flask提供的render_template()函数把Jinja2模板引擎集成到了程序中。第一个参数是模板的文件名。随后的参数都是键值对,表示模板中变量对应的真实值。在这段代码中,第二个模板收到一个名为name的变量。
Flask Web框架的更多相关文章
- 教程:在 Visual Studio 中开始使用 Flask Web 框架
教程:在 Visual Studio 中开始使用 Flask Web 框架 Flask 是一种轻量级 Web 应用程序 Python 框架,为 URL 路由和页面呈现提供基础知识. Flask 被称为 ...
- Ubuntu16.04采用FastCGI方式部署Flask web框架
1 部署nginx 1.1 安装nginx服务 root@desktop:~# apt-get install nginx -y 1.2 验证nginx服务是否启动 root@des ...
- Python-S9-Day115——Flask Web框架基础
01 今日内容概要 02 内容回顾 03 Flask框架:配置文件导入原理 04 Flask框架:配置文件使用 05 Flask框架:路由系统 06 Flask框架:请求和响应相关 07 示例:学生管 ...
- Python Flask Web 框架入门
Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...
- 比我的脸还干的gan货——Python Flask Web 框架入门
Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...
- python Flask web框架
目录: --> Flask --> 配置文件 --> 配置文件解析 --> 配置文件导入 --> 路由 --> 路由参数 --> 常用路由匹配 --> ...
- Flask Web开发从入门到放弃(一)
第1章 章节一 01 内容概要 02 内容回顾 03 路飞学城之加入购物车 04 路飞学城之结算 05 路飞学城之立即支付 06 路飞学城之后续计划 07 Flask框架简介和快速使用 08 FLas ...
- Python轻量Web框架Flask使用
http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...
- Python超级明星WEB框架Flask
Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模 ...
随机推荐
- LeetCode 606 Construct String from Binary Tree 解题报告
题目要求 You need to construct a string consists of parenthesis and integers from a binary tree with the ...
- yum解决 "Couldn't resolve host 'apt.sw.be'" 错误
1.yum无法安装工具 failure: repodata/repomd.xml from dag: [Errno 256] No more mirrors to try.http://apt. ...
- 处理 Archlinux 报错
failed to kernel 1 sudo pacman -S linux-headers tpm_crb, uvcvideo 等错误 sudo vim /etc/modprobe.d/black ...
- vue项目打包之后js文件过大怎么办?
- 剑指offer-扑克牌顺子
题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...
- Python基础之 函数名,闭包,和迭代器
1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...
- mysql表类型导致的 setRollbackOnly() 事务不回滚
在SpringBoot 中,使用事务非常简单,只需在方法上面加入 @Transactional 注解就可以实现.也可加在类上,此时则类中所有方法都支持事务. 而当我使用下面代码时,发现事务却没有回滚 ...
- python迭代-如何对迭代器做切片操作
如何对迭代器做切片操作 问题举例 读取某个文件内容的100~300行内容,我们是否可以使用 类似列表切片的方式得到一个100~300行文件内容的生成器 分析 列表的切片操作其实是在重载方法__getI ...
- Ubuntu 常见的问题及常见软件的安装_ubuntu16.04
1, 在使用 rpm 删除 rpm 包的时候的: rpm -r *** 报错: error reading information on service sfdc3: No such file or ...
- MAC 终端走代理服务器
问题描述: MAC 终端,默认不走代理服务器:即浏览器已经可以FQ,但是终端不行: 解决方案:直接设置终端的代理,本文 用的是 shadowSocksX: 打开终端,直接执行:(执行后,只对当前终端起 ...