Python flask框架浅析
这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战
前言
Python 面向对象的高级编程语言,以其语法简单、免费开源、免编译扩展性高,同时也可以嵌入到C/C++程序和丰富的第三方库,Python运用到大数据分析、人工智能、web后端等应用场景上。
Python 目前主要流行的web框架:flask、Django、Tornado
补充一下,我们前面学习的库都是叫模块,那么框架与库的区别?
框架(framework)跟库的功能类似,但是框架在某一领域上功能更加全面。使用框架,会减少开发者重复造轮子,直接调用其类或者函数就可以实现需求的功能。
那么,我们本期来学习Python提供的 web 框架之一-flask框架相关方法的学习,Let's go~
1. flask 框架概述
flask 框架是一款基于 WSGI 的轻量级的web框架。flask 犹如耳熟能详的“麻雀虽小,五脏俱全”,因此flask具有简单可拓展的特点。
flask 框架优势:
- 基于WSGI应用程序,必须使用显式实例化
- 使用Werkzeug路由系统进行自动排序路由
- 使用Jinja2模板引擎,快速方便使用模板
- 使用线程局部变量,实现快速访问weby应用程序
- 支持异步等待和ASCI(async-first)
- 衔接单元测试,开发人员快速进行测试检查
- 自带开发服务器,无需借助其他第三方网络服务
flask 框架获取
-
使用pip进行下载flask
pip install flask
-
🔔 flask 包下载之后,会自动下载依赖库
- Werkzeug 库:实现WSGI,前端与服务端的Python接口
- Jinjia 库:模板语言,显示web页面
- MarkupSafe 库:附带Jinjia,用于转义渲染模板不受信任的输入
- itsDangerous:保护flask会话的cookie
- Click库:用于编写命令行框架
-
📢 flask 可选的依赖库,按实际需要进行下载
- Blinker 库:提供对Singals的支持
- Python-dotenv 库:运行命令时启动dotenv的环境变量来支持flask
- Watchdog 为flask服务器提供快速的加载器
flask 框架使用
在代码中,使用from...import 导入flask包
from flask import flask
长按 Ctrl,我们可以查看Flask源代码介绍
2. flask demo步骤
在flask web 框架中,我们来看看要搭建一个DEMO的网站需要做哪些步骤:
-
初始化:导入Flask库,定义Flask实例化对象
- Flask实例化时,需要传入__name__:目的是接收包或者模块的名字作为参数
- 让flask.helpers.get_root_path以便获得静态文件和模板文件的目录
from flask import Flask APP = Flask(__name__)
-
定义一个应用方法,并且route装饰器装饰
-
调用route()方法装饰创建的应用方法:目的是告诉flask怎么访问该函数
@APP.route("/") def hello(): return ("<h1>welcome juejin</h1>")
-
-
在main中,flask实例化对象调用run()方法,进行运行
-
如果在调试阶段,我们需要设置debug=True
if __name__ == "__main__": APP.run(debug=True)
-
-
我们可以看到,后台运行日志
-
我们访问日志中生成的链接🔗,可以在网页上看到解析的文字
3. flask 基础功能
flask 上述实现的简易web程序,主要使用到啦flask模块路由功能
-
路由功能
-
route()是装饰器,将URL和函数绑定
- rule:绑定访问该函数的url规则
- option:要转发给Rule对象的参数列表
@app.route(url,optiion)
-
run()是服务器上运行应用程序
-
host:监听的主机名
-
port:主机端口号
-
debug:提供调试信息
-
options:要转发给底层Werkzeug服务器
-
-
-
模版提供
flask 框架是基于Jinja2模板引擎实现的
-
在项目中创建一个子目录templates,然后在其目录下创建demo.html
-
在flask文件中,应用方法中需要调用
render_template('demo.html', name=name)
-
总结
本期,我们对flask 微web框架优势特点、demo web应用程序程序步骤以及对flask模块中路由和模版两个功能进行基本了解。
以上是本期内容,欢迎大佬们点赞评论,下期见~
转载自:https://juejin.cn/post/7025997161649143822