一、框架的定义
1、框架是一个为了解决开放性问题而存在的一种程序结构,其本身提供了一些最基本的功能,使用
者只需要在其基础上搭建自己的操作就可以了。
2、框架模式
1、MTV
M:Models,模型层,主要负责数据库建模
T:Templates,模板层,用于处理用户的显示内容,如html
V:Views,视图,处理与用户打交道的内容(请求和响应)
2、MVC
M:Models,模型层,主要负责数据库建模
V:View,视图,处理用户的显示内容
C:Controler,控制器,用于与用户交互的部分内容(请求和响应)
二、Flask框架
Flask框架是一种轻量级的 Python Web 框架。Flask基于python并且依赖于Jinja2模板引擎
和Werkzeug WSGI服务的一个微型框架。
WSGI:Web Server Gateway Interface(WEB服务网管接口)
1、Flask框架采用MTV的框架模式
2、安装Flask
查看已安装的Flask版本:
在python交互模式中:import flask;
flask.__version__;
安装Flask:sudo pip3 install flask;
3、路由
客户端发送请求给web服务器,web服务器再将请求发送给Flask程序实例
Flask程序实例需要知道每个url请求所对应的运行代码是谁。所以程序中必须要创建一个
url请求地址到python运行函数的一个映射。处理url和函数之间的关系的程序就是路由。
4、 在Flask中,路由是通过@app.route装饰器表示。
路由的基本表示
@app.route('/')
def index():
return "xxx"
基本带参的路由
@app.route('/show/<name>')
def show(name):
name表示的是从地址栏上传来的数据
return "xxx"
带多个参数的路由
http://localhost:5000/show/laowang/36
@app.route('/show/<name>/<age>')
def show(name,age):
return "xxx"
指定参数类型的路由
@app.route('/show/<name>/<int:age>')
def show(name,age):
name:字符串
age:整数
5、多个URL的路由匹配
为多个访问地址匹配同一个视图处理函数
@app.route('/地址1')
@app.route('/地址2')
...
def index():
return "xxx"
6、路由中设置HTTP请求方法
Flask路由也允许设置对应的请求方法(post/get),只有将匹配上请求方法的路径才能交给
对应的视图处理函数去处理。所有的路由,默认只接受get请求。
@app.route('/xxx/xxx',methods=['GET','POST'])
def xxx:
pass
** methods可以是GET,可以是POST ,也可以二者同时接收,函数中可以用if语句判断之后处 理相对应的请求响应
7、URL的反向解析
正向解析:程序自动解析,根据@app.route()中的访问路径,来匹配处理函数
反向解析:通过视图处理函数的名称自动生成对应的访问路径
在Flask中要实现反向解析则需要使用:
url_for(funname,args)
funname:要生成地址的函数名
args:该地址中需要的参数
三、模板 - Templates
1、模板:
在Flask中就是允许响应给用户看的网页
在模板中,允许包含“占位变量”来表示动态的内容
模板最终也会被解析成字符串再响应给客户端,这一过程通常称为“渲染”。
Flask中的模板是依赖于 Jinja2 模板系统
2、模板设置
默认情况下,Flask会在程序文件夹中的 templates 的子文件夹中搜索模板
默认情况下,需要手动创建templates
3、模板的渲染
作用:在视图中,将模板文件(xx.html) 渲染成字符串之后,再响应给客户端浏览器
函数:render_template('xxx.html')
return render_template('xxx.html')
4、模板中的语法(重难点)
1、变量:是一种特殊的占位符,告诉模板引擎该位置的值是从渲染模板时的数据中获取出来的
在视图中:
@app.route('/')
def index():
return render_template('xxx.html',变量1=值1,变量2=值2,...)
在模板中:
{{变量名}}
<h1>{{name}}</h1>
2、过滤器:过滤器是允许在变量输出前改变变量的值
语法:{{变量|过滤器}}
Jinja2 模板中常见过滤器:
过滤器名 说明
capitalize 首字符变大写,其他变小写
lower 将值转换为小写
upper 将值转换为大写
title 将值中的每个单词首字符变大写
trim 去掉值两边的空格
3、标签:每个标签标示的是不同点服务器端的功能
常用的标签
if 标签
(1)基本if结构
{% if 条件 %}
{% endif %}
(2)if ... else ...结构
{% if 条件 %}
满足条件时要运行的代码
{% else %}
不满足条件时运行的代码
{% endif %}
(3)if ... elif ... elif ... else
{% if 条件1 %}
满足条件1时要运行的代码
{% elif 条件2 %}
满足条件2时要运行的代码
{% elif 条件3 %}
满足条件3时要运行的代码
{% else %}
不满足以上所有条件时要运行的代码
{% endif %}
for标签
{% for 变量 in 元组|列表|字典 %}
{% endfor %}
在Jinja2模板的循环中,支持内部变量 - loop
loop作用:记载当前循环中的一些相关信息
loop常用属性:
1、index
用法:loop.index
作用:记录当前循环的次数,从 1 开始记录
2、index0
用法:loop.index0
作用:同上,从0开始记录
3、first
用法:loop.first
作用:值为True,则表示当前循环是第一次循环
4、last
用法:loop.last
作用:值为True,则表示当前循环是最后一次循环
macro 标签(宏)
1、作用:相当于是在模板中声明函数
2、语法:使用 {% macro %} 声明宏
{% macro 名称(参数列表) %}
xxx xxx
{% endmacro %}
3、在独立的文件中声明宏
创建macro.html模板文件
作用:定义项目中要用到的所有的宏
在使用的网页中,导入macro.html
{% import 'macro.html' as macros %}
4、include 标签
将其他的模板文件包含到当前的模板文件中
语法:{% include 'xxx.html' %}
5、静态文件处理
1、什么是静态文件?
在Flask中不能与服务器动态交互的文件都是今天文件
如:图片,css文件,js文件,音频文件,...
<img src="images/a.jpg">
<link rel="" href ="css/a.css">
<script src =""></script>
<video src=""></video>
<audio src=""></audio>
2、静态文件的处理
1、所有的静态文件必须放在名为static的目录中
static目录要放在项目的根目录处
FlaskDemo02
templates
static
2、所有的静态文件必须通过/static/路径去访问
/static/images/a.jpg