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)

 

posted @ 2019-01-11 11:30  茉莉花M  阅读(226)  评论(0编辑  收藏  举报