FLASK学习笔记
Flask 轻量级框架 WEB 框架
AJAX 在web中完成异步请求和响应
Django 重量级WEB框架
Python Web
1.静态网页 和 动态网页
1.静态网页 :无法与服务器做动态交互的网页
2.动态网页 :允许与服务器做动态加护的
2.WEB 与 服务器
1.WEB : 网页(HTML,CSS,JS)
2.服务器
能够给用户提供服务的机器就可以称为 服务器
1.硬件 与 软件
硬件 :一台主机
软件 :一个能够接受用户请求并给出响应的程序
1.APACHE
2.TOMCAT
3.IIS(Internet Information Service)
4.Nginx
2.作用
1.存储WEB上的信息
2.能够处理用户的请求(request)并给出响应(response)
3.执行服务器端程序
4.具备一定的安全功能
3.框架
1.什么是框架
框架是一个为了解决开放性问题而存在一种程序结构。
框架本身提供了一些最基本的功能。
我们只需要在基础功能上搭建自己的操作就可以了。
2.Python Web 框架
1.Flask - 轻量级
2.Webpy - 轻量级
3.Tornado - 异步框架
4.Django - 重量级框架
3.框架模式
1.MTV
M :Models,模型层,主要负责数据库建模、
T :Templates,模板层,用于处理用户的显示内容,如 html
V :Views,视图,处理与用户打交道的内容(请求和响应)
2.MVC
M :Models,模型层,主要负责数据库建模
V :Views,视图,处理用户的显示内容
C :Controller,控制器,用于与用户交互的部分内容(请求和响应)
M --- M
T --- V
V --- C
4.Flask框架
1.什么是Flask框架
Flask是一个基于Python并且依赖于Jinja2模板引擎和Werkzeug WSGI服务的一个微型框架
WSGI :Web Server Gateway Interface(WEB服务网关接口)
Flask是采用 MTV 的框架模式
2.安装 Flask
1.查看已安装的Flask版本
在 python 的交互模式中 :
1. import flask
没报错:已经安装了Flask,可以继续查看版本
报错:没安装Flask
2. flask.version
已安装Flask的情况下,可以查看安装的版本
2.安装Flask
sudo pip3 install flask
pip3 download flask
3.Flask 初始化
见代码 ... ...
练习:
访问路径:http://localhost:5000/login :
在网页中显示 :欢迎访问登录页面
访问路径:http://localhsot:5000/register
在网页中显示 :欢迎访问注册页面
5.Flask - 路由(route)
1.什么是路由
客户端发送请求给web服务器,web服务器再将请求发送给Flask程序实例
程序实例需要知道每个url请求所对应的运行代码是谁。所以程序中必须要创建一个 url 请求地址 到 python运行函数的一个映射。处理url和函数之间的关系的程序就是"路由"
2.路由的体现
在 Flask 中,路由是通过 @app.route 装饰器来表示的
1.路由的基本表示
# http://localhost:5000
@app.route('/')
def index():
return "xxx"
http://localhost:5000/admin/login
@app.route('/admin/login')
def admin_login():
return 'xxx'
2.带参数的路由
路由中可以携带参数表示不同的数据
http://localhost:5000/show/laowang
http://localhost:5000/show/wangwc
http://localhost:5000/show/laowang.gebi
1.基本带参路由
@app.route('/show/
def show(name):
name : 表示的就是从地址栏上传递过来的数据
return 'xxx'
2.带多个参数的路由
http://localhost:5000/show/laowang/36
@app.route('/show/
def show(name,age):
return 'xxx'
3.指定参数类型的路由
@app.route('/show/
def show(name,age):
name : 字符串
age : 整数
int: 类型转换器
Flask 中所支持的类型转换器:
类型转换器 作用
缺省 字符串,不能有斜杠('/')
int: 整型
float: 浮点型
path: 字符串,可以有斜杠('/')
3.多 URL 的路由匹配
为多个访问地址匹配同一个视图处理函数
@app.route('/地址1')
@app.route('/地址2')
... ...
def index():
return ""
练习:
当访问路径是以下任何一个的时候:
http://localhost:5000
http://localhost:5000/index
http://localhost:5000/数字
http://localhost:5000/index/数字
将程序交给 index() 视图处理函数
判断路由中到底有没有数字传递进来,
如果有
响应 :您当前看的页数为 :xxx
如果没有:
响应 :您当前看的页数为 :1
4.路由中设置 HTTP 请求方法
Flask路由也允许设置对应的请求方法(post/get),只有将匹配上请求方法的路径才能交给对应的视图处理函数取处理。所有的路由,默认只接受 get 请求
@app.route('/xxx/xxx',methods=['POST'])
def xxx:
# 该函数只能接受post请求
pass
@app.route('/xxx/xxx',methods=['GET','POST'])
def xxx:
# 该函数既能接受get请求也能接受post请求
pass
5.URL的反向解析
正向解析:程序自动解析,根据@app.route()中的访问路径,来匹配处理函数
反向解析:通过视图处理函数的名称自动生成对应的访问路径
在Flask中要实现反向解析的话需要使用 :
url_for(funName,args)
funName:要生成地址的函数名
args:该地址中需要的参数
6.模板 - Templates
1.搭建结构
from flask import Flask
app = Flask(name)
@app.route('/')
def fun():
return ""
if name == "main":
app.run(debug=True,port=6000)
2.路由
@app.route() 表示路由
@app.route('/') : 表示根路径 / 首页
@app.route('/index') : 表示 http://localhost:5000/index
1.带参数路由
@app.route('/index/
def index(name):
return ""
@app.route('/index/
def index(name,gender):
return ""
@app.route('/index/int:age')
def index(age):
return ""
类型转换器:
默认 :字符串,不能包含 /
int: :整型
float: :浮点型
path: :字符串,允许包含 /
2.多个访问路径交给同一视图处理函数
http://localhost:5000/index
http://localhost:5000/index/wangwc
@app.route('/index')
@app.route('/index/
def index(name=None):
if name is None :
xxxx xxxx
return ""
3.路由的反向解析
函数 :
s = url_for(funName,arg1=value1,arg2=value2)
M : Models 模型层
T : Templates 模板层
V : Views 视图层
1.模板 - 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,..)
return render_template('xxx.html',name='laowang',age=35)
在模板中 :
{{name}}
练习:
在 01-template.html基础上,完成下列效果显示:
歌名 :《绿光》
作词 : 宝强
作曲 : 乃亮
演唱 : 羽凡
2.过滤器
1.什么是过滤器
过滤器是允许在变量输出前改变变量的值
2.语法
Jinja2 模板中常见过滤器:
过滤器名 说明
capitalize 首字符变大写,其他变小写
lower 将值转换为小写
upper 将值转换为大写
title 将值中的每个单词首字符变大写
trim 去掉值两边的空格
3.标签
1.什么是标签
每个标签标示的是不同的服务器端的功能
2.常用标签
1. if 标签
1.基本if结构
{% if 条件 %}
2.if ... else ... 结构
{% if 条件 %}
满足条件时要运行的代码
{% else %}
不满足条件时要运行的代码
{% endif %}
3.if ... elif ... elif ... else
{% if 条件1 %}
满足条件1,要运行的代码
{% elif 条件2 %}
满足条件2,要运行的代码
{% elif 条件3 %}
满足条件3,要运行的代码
{% else %}
以上条件都不满足的时候,要运行的代码
{% endif %}
2. for 标签
{% for 变量 in 元组|列表|字典 %}
在 Jinja2 模板的循环中,支持内部变量 - loop
loop作用:记载当前循环中的一些相关信息
loop 常用属性:
1. index
用法:loop.index
作用:记录当前循环的次数,从 1 开始记录
2. index0
用法:loop.index0
作用:同上,从0开始记录
3. first
用法:loop.first
作用:值为True,则表示当前循环是第一次循环
4. last
用法:loop.last
作用:值为True,则表示当前循环是最后一次循环
3. macro 标签 (宏)
1.作用
相当于是在模板中声明函数
2.语法
使用 {% macro %} 声明宏
{% macro 名称(参数列表) %}
xxxx xxxx
{% endmacro %}
3.在独立的文件中声明宏
1.创建 macro.html 模板文件
作用:定义项目中要用到的所有的宏
2.在使用的网页中,导入 macro.html
{% import 'macro.html' as macros %}
4. include 标签
将其他的模板文件包含到当前的模板文件中
语法:{% include 'xxx.html' %}
5.静态文件处理
1.什么是静态文件
在Flask中不能与服务器动态交互的文件都是静态文件
如:图片,css文件,js文件,音视频文件,...

2.静态文件的处理
1.所有的静态文件必须放在名为 static 的目录中
static目录要放在项目的根目录处
FlaskDemo02
run01.py
templates
01-xxx.html
02-xxx.html
static
images
a.jpg
b.jpg
js
body.js
slider.js
css
2.所有的静态文件必须通过 /static/ 路径访问
/static/images/a.jpg
/static 要到静态资源目录中继续搜索
作业:
搭建 Blog 项目结构
1.创建项目 - Blog
2.将 所有的 html 文件 copy 到 templates 目录中作为模板
3.创建 static 目录,将 js 目录,css目录,images目录 copy到 static 中
4.创建 路由 /
访问 根路径时,显示首页模板(index.html)
要求:css,images,js 都能正常显示
params = {
'author': '奥斯特罗夫斯基',
'dic': {'WWC': '隔壁老王', 'LZ': '吕泽', 'WMZ': '老魏', 'MM': '蒙蒙'},
'bookName': '钢铁是怎样炼成的',
'tup': ('水浒传', '三国演义', '红楼梦', '西游记'),
'price': 32.5,
'list': ['漩涡鸣人', '卡卡西', '自来也', '佐助'],
'person': <main.Person object at 0x7f157c2c9048>
}
params['author']
1.模板
1.模板设置
所有的模板默认要放在项目中的 templates 目录中
2.渲染模板
html = render_template('xxx.html',args)
3.模板中的语法
1.变量
由后端的视图传递给模板中的一些动态数据
模板:{{变量}}
2.过滤器
在变量输出之前对变量进行一个修改
语法:{{变量|过滤器}}
ex:
{{var|upper}}
{{var|title}}
{{var|capitalize}}
... ...
3.标签
1. if 结构
1. {% if 条件 %} ... {% endif %}
2.
{% if 条件 %}
...
{% else %}
...
{% endif %}
3.
{% if 条件1 %}
...
{% elif 条件2 %}
...
{% else %}
...
{% endif %}
2. for 结构
{% for 变量 in 列表|字典|元组 %}
内置变量 :loop
loop.index : 当前循环遍历的次数,以 1 作为起始值
loop.index0: 同上,以 0 作为起始值
loop.first : True的话则表示是第一次循环
loop.last : True的话则表示是最后一次循环
4.宏
{% macro 名称(参数) %}
...
{{名称(参数)}}
在 macro.html 中声明所有的宏
macro.html
{% macro 名称1(参数) %}
...
{% macro 名称1(参数) %}
...
{% endmacro %}
在使用的网页中,引入 macro.html
{% import 'macro.html' as macros %}
{{macros.名称(参数)}}
5包含
{% include 'xxx.html' %}
2.静态文件
1.所有的静态文件必须保存在 static 目录中
static 目录 存放在 项目根目录下的
2.所有的静态文件的访问必须通过 /static
/static 告诉服务器取 static 目录中继续搜索剩余内容
=========================================================
1.模板
1.静态文件地址的反向解析
url_for('static',filename='<file_path>')
ex:
url_for('static',filename='images/b041.jpg')
结果: /static/images/b041.jpg
2.模板的继承
1·什么是模板的继承
模板的继承类似于类的继承,如果一个模板中出现的内容来自于另一个模板的话,那么就可以使用继承的方式来简化开发
2.语法
1.父模板
需要定义出哪些东西在子模板中是可以被重写的
{% block 块名 %}
父模板中正常显示的内容
{% endblock %}
block:
1.在父模板中是可以正常显示的,没有任何影响
2.在字模板中是可以被重写的
2.子模板
1.需要指定继承自哪个父模板
{% extends '父模板名称' %}
2.重写父模板中对应的内容
{% block 块名 %}
此处编写的内容会覆盖掉父模板中同名block的内容
允许通过 {{super()}} 来调用父模板中的内容
{% endblock %}
2.修改配置
1.构建Flask 应用时允许指定的配置信息
app=Flask(
name,
template_folder='muban',
static_url_path='/s',
static_folder='/sta')
template_folder : 指定存放模板的文件夹名称
static_url_path : 访问静态资源的路径
http://localhost:5000/s/xxx 查找静态资源文件
static_folder : 指定存放静态文件的目录名称
在项目的根目录中 ,有一个名为 sta 的目录用于存放静态文件
2.启动程序的运行配置
app.run(
debug = True,
port = 5555,
host = '0.0.0.0'
)
host : 指定访问地址,0.0.0.0 表示局域网内的任何机器都可以访问网站
3.请求(request) 和 响应(response)
1.HTTP协议
Request Headers - 请求消息头
Response Headers - 响应消息头
2.请求对象 - request
request - 请求对象,封装了所有与请求相关的信息。如:请求数据,请求消息头,请求路径,... ...
在Flask中,要使用 request 的话,必须先导入
from flask import request
1.request的常用成员
1.scheme : 获取请求方案(协议)
2.method : 获取本期请求的请求方式(重点)
3.args : 获取使用get请求方式提交的数据
4.form : 获取使用post请求方式提交的数据
5.cookies : 获取 cookies 的相关信息
6.headers : 获取 请求消息头 的相关信息
7.files : 获取上传的文件
8.path : 获取请求的url地址(进入到主机后的请求资源地址,不包含请求参数)
9.full_path : 获取请求的url地址(进入到主机后的请求资源地址,包含请求参数)
10.url : 获取完整的请求地址,从协议开始的地址
2.获取请求提交的数据
1.get 请求方式
1.表单允许实现get请求
2.在请求地址后拼请求提交的参数
http://localhost:5000/06-get?uname=xxx&upwd=xxx
获取 get 请求方式提交的数据 :
request.args 封装的是get请求的数据
2.post 请求方式
post请求只有在表单中才能够被触发

浙公网安备 33010602011771号