flask之蓝图
一 路由
1 endpoint:反向URL地址,默认为视图函数名(url_for)
1.endpoint 反向生成URL from flask import url_for 默认视图函数
@app.route("/info", methods=["GET", "POST"], endpoint="r_info")
def student_info():
print(url_for("r_info"))# /info
stu_id = int(request.args["id"])
return f"Hello Old boy {stu_id}" # Python3.6的新特性 f"{变量名}"
2 defaults:视图函数的默认参数 默认值{'nid':1}
from flask import url_for
@app.route("/info", methods=["GET", "POST"], endpoint="r_info", defaults={"nid": 100})
#注意:默认参数nid 要放入到函数括号里面
def student_info(nid):
print(url_for("r_info")) # /info
# stu_id = int(request.args["id"])
print(nid) # 100 #打印一下nid
return f"Hello Old boy {nid}" # Python3.6的新特性 f"{变量名}"
3 methods 允许的请求方式 默认GET请求,有多种请求参数['GET']
from flask import Flask
@app.route("/info", methods=["GET", "POST"]) #methods中的多种请求方式
def student_info():
return f"Hello Old boy" # Python3.6的新特性 f"{变量名}"
4 strict_slashes=False是否严格遵循路由地址 当strict_slashes=False时,URL地址/index访问时可以是/index 或/index/ , 为True时,URL地址/index ,访问时必须是/index,后面不能加/,否则无法访问。也就是说URL地址结尾符‘/’的控制
False:无论结尾‘/’是否存在均可访问,
True:结尾必须不能是'/'
#访问地址 /index
@app.route("/index", strict_slashes=True)
def index():
return "Hello"
# 访问地址 : /index or /index/
@app.route("/index", strict_slashes=False)
def index():
return "Hello"
5 redirct_to URL地址重定向
from flask import Flask
#访问地址: /index 跳转到/login
@app.route("/index", strict_slashes=True, redirect_to="/login")
#当访问/index时 就会重定向到/login中
def index():
return "Hello"
@app.route("/index", strict_slashes=False)
def index():
return "Hello"
6 动态参数路由
from flask import url_for
# 访问地址 : http://127.0.0.1:5000/index/1
app =Flask(__name__)
@app.route('/index/<int:nid>',methods=['GET','POST')
def index(nid): #注意nid 要写入括号里
return f'Hello {nid}'
7 子域名前缀 subdomian='mmdkdd' 这样可以得到
mmdkdd.baidu.com 前提是app.config['SERVER_NAME']=‘baidu.com’
from flask import Flask
app=Flask(__name__)
@app.route('/index',subdomain='mmdkdd') #子域名前缀
def index():
return 'Hello'
#访问地址是: mmdkdd.baidu.com/index
二 Flask的实例化配置
1 template_folder='templates' templates 是默认模板存放目录,当模板存放目录名不是
templates时,需要指定其template_folder
from flask import Flask,render_template
app = Flask(__name__,template_folder="temp") #注意这里的temp是你自己定义的模板目录
#当你的模板文件名不是templates时 要写template_folder, 告知pycharm 你的模板目录是哪个
@app.route("/index/<page>",methods=["GET","POST"],endpoint="index")
def index():
print(page,type(page))
return "123"
@app.route("/login",methods=["GET","POST"])
def login():
return render_template("index.html")
if __name__ == '__main__':
app.run("0.0.0.0",5000,debug=True)
2 static_folder='static' static是默认静态文件的存放目录
from flask import Flask,render_template
app = Flask(__name__,template_folder="temp",
static_folder="static") #注意 这里的static是默认静态文件的存放目录,
#当静态文件的名字不是static时 将其static_folder='static' 中的static 换成改名字就行
@app.route("/index/<page>",methods=["GET","POST"],endpoint="index")
def index():
# print(page,type(page))
return "123"
@app.route("/login",methods=["GET","POST"])
def login():
return render_template("index.html")
if __name__ == '__main__':
app.run("0.0.0.0",5000,debug=True)
3 static_url_path='/static' 静态文件访问路径 其实就是相当于 '/' + static_folder
二 Flask的对象配置
1 app= Flask(__name__)
2 app.config.from_obj(class)
from flask import Flask
app = Flask(__name__,template_folder="temp",
static_folder="static")
import FlaskSetting
app.config.from_object(FlaskSetting.FlaskDebug) #注意这里的FlaskSetting是自己创建的文件名
里面写的代码如下图
# app.config.from_object(FlaskSetting.FlaskTesting) #同上
三 Flask中的蓝图(blueprint)
蓝图当成是一个app
作用:将功能与主服务分开
比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的功能,后来你又加入了一个添加客户的功能(add_user)模块, 然后又加入了一个删除客户的功能(del_user)模块,然后又加入了一个修改客户的功能(up_user)模块,在这个系统中,就可以将
查看客户,修改客户,添加客户,删除客户的四个功能做成蓝图加入到客户管理系统中,本篇最后会做一个这样的例子,但是首先我们要搞清楚什么是蓝图 blueprint
1 初识蓝图(blueprint)
首先 创建一个项目
1 创建一个项目student_view,在其目录下新建一个py文件 s_view.py
from flask import Blueprint # 导入 Flask 中的蓝图 Blueprint 模块 sv = Blueprint("sv", __name__) # 实例化一个蓝图(Blueprint)对象 @sv.route("/svlist") # 这里添加路由和视图函数的时候与在Flask对象中添加是一样的 def view_list(): return "svlist_view_list"
在不同的目录中有一个mana.py文件
内容为
from flask import Flask
# 导入此前写好的蓝图模块
from student_view import s_view
app = Flask(__name__) # type:Flask
# 在Flask对象中注册蓝图模块中的蓝图对象 s_view 中的 sv
app.register_blueprint(s_view.sv)
app.ru(debug=True)
# 现在Flask对象中并没有写任何的路由和视图函数
开启服务,然后访问 http://127.0.0.1:5000/svlist 查看结果
四 特殊装饰器
1 before_request 在请求进入视图函数之前
2 after_request 在响应返回客户端之前
from flask import Flask
app = Flask(__name__)
@app.before_request # 请进入视图函数之前
def be1():
print("我是 before_request1")
@app.before_request # 请进入视图函数之前
def be2():
print("我是 before_request2")
return render_template("error.html") # HTTPResponse("请使用合法客户端")
@app.before_request # 请进入视图函数之前
def be3():
print("我是 before_request3")
@app.after_request # 在响应客户端之前
def af1(args):
print("我是 after_request1")
return args
@app.after_request # 在响应客户端之前
def af2(args):
print("我是 after_request2")
return args
@app.after_request # 在响应客户端之前
def af3(args):
print("我是 after_request3")
return args
app.run(debug=True)
注意:执行顺序为
正常时:be1 - be2 - be3 - af3 - af2 - af1
异常时:be1 - af3 - af2 - af1
3 errorhandler 重定向错误信息
from flask import Flask
app = Flask(__name__)
@app.route("/login")
def login():
session["user"] = "123456"
return "登录成功"
@app.errorhandler(404)
def error404():
return "你访问的页面已经被怪兽吃了"
if __name__ == '__main__':
app.run(debug=True)

浙公网安备 33010602011771号