1、Flask、Django、Tornado三大框架对比
(1)框架
A、是对一部分代码进行封装,并提供api接口的一个半成品
B、开发者在使用框架的时候,只需要调用框架提供的接口即可,可以大大提高开发效率
(2)Flask框架(python3.7.7+Flask1.1.1)
A、是python编写的轻量级的框架,只提供了web框架的核心功能
B、更加的灵活、自由,可以快速实现一个高定制的网站或web服务
C、orm不是自己的、模板使用jinjia2模板
D、适用于小项目,也能做大项目,但需要使用第三方组件或自己写
(3)Django框架
A、是同步框架,可以快速实现一个网站或web服务
B、orm和模板都是自己的
C、可以快速开发一个比较大的项目
D、内置模块很多(模板、表单、路由、数据库管理)等
E、优点:内置大量模块,可以通过模块去实现功能,减少开发者的代码量
F、缺点:由于内置模块太多,项目占内存比较大,不适合实现功能较少的小项目
(4)Tornado框架
A、是异步框架、微框架、高性能
B、适用于大量连接、长轮询、WebSockets的应用
2、Flask介绍与开始:c/s(客户端服务器)结构,bs(浏览器/服务器)结构
(1)是基于python开发的轻量级的web开发微框架,适合更为轻量、自由、灵活、高度定制化的web项目开发,项目更加轻量,具有侧重性
(2)Flask旨在保持代码简洁且易于扩展,主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,但对代码能力要求高
(3)主要包括Werkzeug和Jinja2两个核心函数库,它们分别负责业务处理和安全方面的功能,为web项目开发过程提供了丰富的基础组件
(4)在功能上没有欠缺,将好多模块开发的任务,给了开发者,对开发者的要求变高了,开发者能力直接决定了项目的性能,效果和基础能力有直接联系
(5)大部分功能不再手写,需要安装插件,大部分配置都有默认值,需要知道默认,但尽量不要修改
(6)只提供了最基本web功能,其他都需要开发者api实现,可以下载,安装使用三方插件
(7)项目质量是由开发者的能力决定的,随着版本迭代,好多社区,组织,三方开发出了公共的插件
(8)旨在保持应用程序的核心简单且可扩展,没有用于数据库处理的内置抽象层,也没有形成验证支持,支持扩展以向应用程序添加此类功能
3、名词介绍
(1)Web Application Framework(web应用程序框架)或简单的Web Framework(web)表示一个库和模块的集合,使Web应用程序开发人员能够编写应用程序,而不必担心协议,线程管理等低级细节
(2)WSGI:Web Server Gateway Interface(web服务器网关接口)已被用作Python Web应用程序开发的标准,是Web服务器和Web应用程序之间通用接口的规范
(3)werkzeug:是一个WSGI工具包,实现了请求、响应对象和实用函数,能够在其上构建web框架
(4)jinja2:是Python的一个流行的模板引擎,web模板系统将模板与特定数据源组合以呈现动态网页
9、Flask安装模块
(1)windows安装:pip install Flask
(2)linux安装:sudo pip3 install Flask
(2)导入模块:import flask/from flask import Flask
(3)查看介绍:print(flask.__doc__)
(4)查看版本:print(flask.__version__)
10、创建工程项目
(1)创建项目文件夹FlaskPro:mkdir FlaskPro
(2)项目下创建static静态资源目录(图片、js、css文件):mkdir FlaskPro/static
(3)项目下创建templates模板文件目录(html文件):mkdir FlaskPro/templates
(4)项目下创建server.py网站逻辑文件(可以使用其他名字):touch FlaskPro/server.py
11、创建web服务器实例:app = Flask(__name__)
(1)__name__:内置方法,是模块的名称或者包的名称,确定应用的路径
A、默认的值直接执行当前文件:__name__="__main__"(直接执行文件|被导入执行)
B、修改被导入文件的相对路径:__name__="文件的相对路径"(指执行的优先级)
(2)template_folder:指定前端页面的存放路径
A、默认网页html文件的目录,在当前文件的同级目录的templates目录下
B、通过template_folder="文件路径/templates"可以配置html网页的查找目录
(3)static_folder:指定静态文件的存放路径
A、默认静态文件的目录,在当前文件的同目录下的static目录下,可以通过配置项更改模板文件和静态文件的存放目录
B、可以通过static_folder="文件路径/static"可以配置静态文件的查找目录
(4)app就是一个程序实例
A、客户端(一般是浏览器)将请求发送给服务端Web服务器
B、web服务器再把请求发给Flask实例
(5)更多参数参考__doc__:print(Flask.__doc__)
12、@app.route("/路由匹配/"):代表资源在服务器上的位置
(1)Flask通过@app.route("路由后半部分"),route内部代码会将其余前面的url拼接成一条完整的路由
(2)通过装饰器装饰在视图函数上,是指向视图函数的标志,用户可以通过url来访问,服务器通过url路由引导获取到:@app.route("/地址(一节)/")
(3)根目录:网站服务启动的目录就是根目录
(4)对于视图函数,代表视图函数的路由;对于静态资源,代表放在服务器当前web服务的根目录的位置
13、项目启动:app.run(host=访问IP,port=网络端口,debug=True开启调试模式,use_reloader=True重启项目)
(1)启动web服务,实质上就是在服务器指定目录下启动服务,作为根目录按照http协议规则解析给用户
(2)url:统一资源定位符,告诉浏览器取哪里获取资源,由协议、主机网址、端口、路由部分组成
(3)host:要监听的主机地址(0.0.0.0允许所有人访问、127.0.0.1只允许本机访问、localhost只允许本地访问)
(4)port:每个ip都有0-655535个端口,http协议默认是80端口,https协议默认是443,mysql默认是3306端口,项目默认端口是5000端口
(5)debug:默认False表示关闭调试模式,True表示开启调试模式
A、在开发环境中,在服务器端出现错误时,可以在客户端显示错误信息
B、程序启动后,会自动检测源码是否发生变化,若有变化则自动重启程序
C、一般开发时启动True,浏览器显示错误;线上发布时关闭False
D、代码更新会自动重启服务,提供一个调试器来跟踪应用程序中的错误
(6)use_reloader:默认False表示不自动重启项目;True表示自动重启项目,便于开发
(7)网站服务器:Flask自带轻量级web服务器,可以在学习之初直接使用
A、最原始的网站搭建技术apache-LAMP(Linux Apache Mysql PHP)
B、较先进的网站搭建技术nginx-LNMP(Linux Nginx Mysql PHP)
(8)启动注意
A、项目必须跑在Flask服务器上,直接启动页面没有效果
B、服务器启动会监听一个地址和端口,如果再次启动,在同一个地址端口上没有效果
C、启动了一个Flask项目,可以通过 http://127.0.0.1:5000/ 访问
D、使用Flask项目,匹配到了浏览器中请求中的 “/”,然后调用了该装饰器装饰的函数
E、函数将结果返回给了浏览器
# 导入模块
import flask
from flask import Flask
from flask import send_from_directory
# 获取项目目录文件夹路径
# os.path.abspath()
# os.path.dirname()
# os.path.join()
# 获取当前进程的工作目录
# basic = os.getcwd()
basic = "F:/MyProject"
# 查看Flask的版本
print(flask.__doc__)
# 查看Flask的版本
print(flask.__version__)
# 创建web服务器(http)实例:内置方法__name__是预定义变量,当前模块的名字。被设置为使用本模块,html存放的路径,静态文件的路径
app = Flask(__name__, template_folder=f"{basic}/templates", static_folder=f"{basic}/static")
# 开启debug模式
app.debug = True
# Flask的配置参数参考__doc__
# print(Flask.__doc__)
# 基于当前web服务器实例创建路由和对应的视图
# 装饰器-地址上匹配的内容,即路由(网站匹配)
# 视图函数:满足这个路由调用的功能
# 使用Jinja2模板引擎,根据app设置的template_folder查看静态文件存储位置
# 定义一个模板页,将网页共性的部分保留下来,在需要修改部分定义块标签
@app.route('/')
# 可以多个路由指向同一个方法
@app.route('/base/')
def base():
# 通过url_map可以查看整个flask中的路由信息
# print(app.url_map)
# 加载指定目录下的templates目录中的html,使用render_template将数据返回
return "页面请求成功"
# 启动项目服务器--可以通过参数更改,通常网站的页面需要放到网站服务器上,用户无法双击打开
if __name__ == '__main__':
app.run(
# host主机地址:默认地址127.0.0.1/localhost,全部允许0.0.0.0
host="localhost",
# port监听访问端口,默认5000
port=80,
# debug调试模式,测试环境True,生产环境False
debug=True,
# use_reloader自动重启:在代码发生变动的时候,自动重启项目
use_reloader=True
)