0、前言
- 项目拆分模板最终样子如下:
- 从Flask模板的模样来看,不难看出它其实就是做网页应用开发的一个工具,可以实现前后端数据的交互。
1、run启动参数详解:
- debug 是否开启调试模式,开启后(debug = true)修改过python代码会自动重启,不用停止运行之后再去启动。
- port 启动指定服务器的端口号,默认是5000。
- host 主机,默认是127.0.0.1(只有本机可以访问),指定为0.0.0.0代表本机所有ip。
2、完整的进行一次Flask模板渲染:
- 第一步:在pycharm专业版中新建Flask项目
上图是用来说明下图中新建文件夹下,多出来两个文件夹的作用。【注意,flask项目中py文件最好命名为app】
- 第二步:给各个文件夹中配置文件(同一个页面的css和html文件最好命名一致)
- 可以理解为:在templates中存放html文件,在static当中存放css和js文件。
- app.py代码:(有时候加一些库的时候提示没有导入,可以通过选择要导入的库,按住alt加回车就会快速导入)
from flask import Flask, render_template
a = Flask(__name__)
'''
创建实例 第一个参数时应用模块或者包的名称 一般传输__name__,作用是让stu_2
所在的文件夹只能用于Flask项目。
'''
@a.route('/template_test/')
def temp():
# 模板渲染
return render_template('tem_test.html',name = 'brush_teacher')
'''
1、这里写了这个语句不能识别就可以用“alt+回车”导入,上面import就会自动导入
2、第一个参数是写在templates中的html文件的文件名,带后缀
3、还可以给html中传入变量
'''
- tem_test.html代码
if __name__ == '__main__':
a.run(debug = True) #可以不用停止py代码修改页面数据
# run当中可以加的参数有debug(开启调试模式,修改过python代码会自动重启)
# run当中可以加的参数有port(指定服务器端口号,默认5000)
# run当中可以加的参数有host(主机,默认是127.0.0.1,指定为0.0.0.0代表本机所有ip)
- tem_test.html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 3种导入css文件的方式 -->
<!-- <link rel="stylesheet" href="../static/tem_test.css">-->
<!-- <link rel="stylesheet" href="/static/tem_test.css">-->
<link rel="stylesheet" href="{{ url_for('static',filename='tem_test.css') }}">
</head>
<body>
<h1>这是测试template渲染的html文件</h1>
<p1>第一段,样式蓝色</p1><br>
<p2>第一段,样式红色:这里是测试render_template中的数据能否传html文件的句子:{{ name }}</p2>
</body>
</html>
- tem_test.css代码
p1{color: blue}
p2{color: red}
- 总结:模板渲染就是flask框架把html页面加载好之后,将render_template()中name = 'brush_teacher’变量渲染到html网页当中去,渲染方法就是在html页面通过两个“{ }”符号,将变量name写进去。
- 注意:Flask当中的jinja2是一种模板语言
3、Flask项目拆分:如果项目代码有几万行,项目很大,就需要做项目拆分。
-
项目文件展示
-
注意:上面创建了App文件夹,并且将static和templates移入到里面,创建了__init__文件(在里面创建Flask应用),创建了models文件(里面存放和数据库相关的代码),创建了views文件(存放视图,就是之前存放在app当中的路由函数)
-
app.py代码
from App import creat_app
app = creat_app()
if __name__ == '__main__':
app.run(debug=True)
- App包中的init.py代码
# __init__.py : 初始化文件,创建Flask应用
from flask import Flask
from .views import blue
def creat_app():
app = Flask(__name__)
# 注册蓝图(将views中的蓝图和对应app绑定,可能会存在有多个app的情况)
app.register_blueprint(blueprint=blue)
return app
- App包中的views.py代码
# 在views.py中放路由和视图函数
from flask import Blueprint
from .models import * #后面是用views来控制数据库的,所以要在views中导入models文件
# 蓝图(蓝图可以有多个,方便对路径进行区分)
blue = Blueprint('user', __name__)
@blue.route('/')
def index():
return 'index'
- App包中的models.py该示例中没有用到,但是后面项目中肯定会用到。
- 结果展示
- 说明:
-
1、执行说明:首先程序会在app.py中开始执行,执行中第一步会将App这个包导入,然后就会执行App中的__init __.py文件,然后会在__init __.py文件导包时,去执行views.py中的代码,然后从views.py中导包时,进入到models.py中。执行完models.py的程序之后,会再次回到views.py中,执行views.py中的程序,此时就会将视图函数和路由全部都声明好,然后回到__init __.py中声明creat_app()函数,然后回到app.py中执行creat_app()函数(在执行该函数的时候才会和刚才函数中的蓝图绑定),最后才会在app.py中启动。宏观流程如下图:
-
该流程本质就是将app文件单独拎出来了,然后通过创建App包将其他文件整合在了一起。
-
2、蓝图介绍:蓝图就是在app和路由之间又加了一层,方便管理多个app时可能会有重名路由的问题。
-
- 注意Flask项目拆分的目的是为了在写大型项目的过程中可以方便管理每个部分的代码。虽然项目拆分看着复杂,其实后面这个拆分方式就相当于模板了,用的时候直接套用即可,后面只需要在不同的项目中添加不同的插件即可。