Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。

Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具


从Hello World开始

Flask程序运行过程

  • 当客户端想要获取资源时,一般会通过浏览器发起HTTP请求

  • 此时,Web服务器会把来自客户端的所有请求都交给Flask程序实例

  • 程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)

  • 根据每个URL请求找到具体的视图函数并进行调用

    • 在flask程序中,路由的实现一般是通过程序实例的装饰器实现
  • Flask调用视图函数后,可以返回两种内容:

    • 字符串内容:将视图函数的返回值作为响应的内容,返回给客户端(浏览器)
    • HTML模板内容:获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后返回响应数据给客户端(浏览器)

导入Flask类库

from flask import Flask

创建应用实例

app = Flask(__name__)

路由解析,通过用户访问的路径,匹配相应的函数

@app.route('/')
def hello_world():return 'Hello World!'

启动实施(只在当前模块运行)

if __name__ == '__main__':app.run()

可以自己定义函数

@app.route("/index")
def hello():return 'Hello World'

输入的网址为:http://127.0.0.1:5000/index


定义路由及视图函数,Flask中定义路由是通过装饰器实现的,路由默认只支持GET,如果需要增加,需要自行指定

@app.route('/', method=['GET', 'POST'])
def index():return "hello world"

通过访问路径,获取用户的字符串参数(默认情况下是 字符串类型)

@app.route("/user/<name>")
def welcome(name):return "Hello World, %s"%name

通过访问路径,也可以获取用户的整型参数(还有float类型float:id)
int:id:固定模式

@app.route("/user/<int:id>")
def welcome2(id):return "Hello World, %d号的会员"%id

路由路径不能重复,用户通过唯一路径访问特定的函数


render_template

返回给用户渲染后的网页文件

import render_template
import datetime # 先导入时间包@app.route("/")
def index2():return render_template("index.html")

普通变量(向页面传递一些变量)

@app.route('/index')
def index():url_str = "www.itcast.com"return render_template('index.html', url_str=url_str)@app.route("/")
def index2():time = datetime.date.today() # 显示今天的日期return render_template("index.html", var=time)

在html代码用 {{ var }}

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>今天是{{ var }},欢迎光临<br>{{ url_str }}
</body>
</html>

就可以在页面上显示今天的日期


列表类型

@app.route("/")
def index2():time = datetime.date.today()name = ["小张", "小王", "小赵"]return render_template("index.html", var=time, list=name)

用大括号和百分号括起来的是控制结构,还有if

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>今天是{{ var }},欢迎光临<br/><br>今天值班的有:<br/>{% for data in list %}<li>{{ data }}</li>{% endfor %}
</body>
</html>

输出的结果为:

今天是2021-06-23,欢迎光临今天值班的有:
·小张
·小王
·小赵

字典类型

@app.route("/")
def index2():time = datetime.date.today()name = ["小张", "小王", "小赵"]task = {"任务": "打扫卫生", "时间": "3小时"}return render_template("index.html", var=time, list=name, task=task)

了解一下如何在页面打印表格,以及如何迭代

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>今天是{{ var }},欢迎光临<br/><br>今天值班的有:<br/>{% for data in list %}<li>{{ data }}</li>{% endfor %}任务:<br/><table border="1">{% for key, value in task.items() %}  <!--[(key,value),(key,value),(key,value)]--><tr><td>{{ key }}</td><td>{{ value }}</td></tr>{% endfor %}</table>
</body>
</html>

输出的结果为:


制作一个简易表格

 <table border="1"> <!--border是为表格添加边框--><tr><td>测试1</td><td>测试2</td></tr><tr><td>测试1</td><td>测试2</td></tr><tr><td>测试1</td><td>测试2</td></tr></table>

输出结果为:

测试1  测试2
测试1 测试2
测试1 测试2

表单提交

接收表单提交的路由,需要指定method为post

@app.route('/result', methods=['POST', 'GET'])
def result():if request.method == 'POST':result = request.formreturn render_template("test/result.html", result=result)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><table border="1">{% for key, value in result.items() %}  <!--[(key,value),(key,value),(key,value)]--><tr><th>{{ key }}</th><td>{{ value }}</td></tr>{% endfor %}</table>
</body>
</html>

过滤器

过滤器的本质就是函数,有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中不能直接调用Python中的某些方法,那么这就用到了过滤器

使用方式:

  • 过滤器的使用方式:变量名 | 过滤器

    • {{ variable | filter_name(*args) }}
  • 如果没有任何参数传给过滤器,则可以把括号省略掉
    • {{ variable | filter_name }}
  • 如:",这个过滤器的作用:把变量variable的值的首字母转换为大写,其他字母转换为小写

链式调用

在 jinja2 中,过滤器是可以支持链式调用,示例如下:

{{ "hello world" | reverse | upper }}

python的flask框架相关推荐

  1. Python 使用 Flask框架记录

    Python 使用 Flask框架记录 1.安装Flask ​ Flask依赖两个外部库,Werkzeug和Jinja2,Werkzeug是一个WSGI(服务器网关接口).Jinja2时负责渲染模板. ...

  2. python 框架好学吗-python的flask框架难学吗

    Flask框架难学吗?它和Django哪个更容易一些,这可能是学Python web开发的同学经常问的问题,下面来说一下flask框架. Flask是python的web框架,最大的特征是轻便,让开发 ...

  3. Python——使用Flask框架封装接口

    Python--使用Flask框架封装接口 引言 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活.轻便.安全且容易上手.它可以很好地结合MVC模式进行开发,开发 ...

  4. python生成json接口_基于python的Flask框架写json接口并且结合eolinker进行接口测试

    一.前言 很多时候为了提高软件开发的效率,后端程序人员理想状态下应该编写程序测试接口供前端程序人员进行测试,以便前端的开发.笔者由于项目的需求近期尝试学习了一下测试接口的编写,以Python+Flas ...

  5. python的flask框架显示柱状图_使用Python的Flask框架,结合Highchart,动态渲染图表...

    服务端动态渲染图表 参考文章链接:https://www.highcharts.com.cn/docs/dynamic-produce-html-page 参考文章是使用php写的,我这边改用pyth ...

  6. 【python】flask框架

    [python]flask框架 部分参考来源 什么是RESTful Web API(Web应用程序接口) REST RESTful RESTful api设计规范 什么是Flask 安装Flask 使 ...

  7. 基于Python的Flask框架实现的寻宝通关游戏 课程论文+项目源码

    资源下载地址:https://download.csdn.net/download/sheziqiong/85705658 资源下载地址:https://download.csdn.net/downl ...

  8. python上手--flask框架web开发实践-数据库

    这篇文章,由易而难,步骤清晰,思路讲得很明白.花两小时跟着作者稻谷先生的这篇文章走一遍,对学习python使用Flask来开发web的应用很有帮助. python上手--flask框架web开发实践 ...

  9. 基于Python的Flask框架开发的在线电影网站系统(附源码)

    来源丨网络 今天给大家分享的是基于Python的Flask框架开发的在线电影网站系统. 项目介绍 项目介绍:网站前端采用HTML5编写,使用Bootstrap前端开发框架,后端使用Python3语言编 ...

  10. python之 flask 框架

    创建安装虚拟环境 两种方法 第二种 # 先打开cmd 中断 # 查看virtual是否安装过 pip show virtualenv # 安装 pip install virtualenvwrappe ...

最新文章

  1. python-day22(序列化)
  2. Gradient descent --梯度下降(to be continued)
  3. 机器人学习--定位、建图、SLAM(声呐、激光等扫描束方案)的发展史
  4. Python3 使用[]提取字符
  5. 附加作业:源自刘乾老师的问题
  6. 误删除VMware虚拟机vmdk文件的恢复方法
  7. fisco bcos console控制台 调用合约报错 does not exist
  8. 让 Edit 只接受数字《转》
  9. 分析LOIC流,判断DDoS攻击源
  10. 命令行查看硬盘序列号
  11. 奇安信与360的恩怨情仇:A股决战企业安全
  12. 线性分类的鸢尾花数据集Jupyter实践
  13. 服务监管框架下的 IT 运维服务与绩效管理体系建设
  14. 大数据工程师、数据挖掘师和数据分析师有啥区别
  15. STM32F4 GPIO模式及工作原理详解
  16. 小米路由器的linux命令,【原创】小米路由器开启WISP 万能中继功能
  17. Ink脚本语言学习笔记(三)
  18. 2015—2016年QS世界大学排名200强-[转]
  19. yyds,Python爬虫从小白到Bigboss全套学习路线+视频+资料
  20. 【土旦】在vue filters中 优雅的使用对象的key、value来替换 if switch多重判断简化流程...

热门文章

  1. 有什么好的OCR软件可以实现图片转文字
  2. poj3046 Ant Counting
  3. 数字信号处理(一)绪论
  4. 基于MATLAB的批量3度带高斯正算(LB--xy)
  5. 离散数学-10 群与环
  6. JAVA开发基础之使用IDEA导出JAR包
  7. 区块链学习笔记一 BTC密码学原理
  8. 区块与共识(一):解决竞选记账权的问题
  9. mysql如何插入图片和视频_mysql中怎样插入图片
  10. 高级产品经理十八种能力