flask路由

flask中路由

endpoint 不能重复,对应视图函数.默认是视图函数名.视图函数与路由的对应关系 

url_for

url_for 可以反向找到对应的url

@app.route('/',endpoint="index_home")
@warp
def index():
    print(url_for('index_home'))		#--->结果为:/
    return "ok"

mothods

允许请求方式(大小写都可以,)
常用:
	GET,POST,DELETE,PUT

redirect_to

永久重定向. 没有进入视图层面,直接跳转
应用场景:
	当前地址不存在,换新地址了.

strict_slashes

True|False 是否开启严格路由匹配规则

127.0.0.1/img/ --->开启后,无法匹配

defaults

装饰器的默认参数

@app.route('/',endpoint="index_home",defaults={"nid":1})
@warp
def index(nid):				#函数必须有个参数接收
    print(url_for('index_home'))
    return f"ok{nid}"

动态参数路由

路由参数为int类型,指定int类型后,路由后只能为int类型数据

@app.route('/<int:page>',endpoint="index_home")  #在路径后<inf:变量>
@warp
def index(page):					#函数必须接收page变量
    # print(url_for('index_home'))
    return f"ok~~~~{page}"

路由参数为string类型,能接收任何数据类型.(不写默认为string类型)

@app.route('/<string:page>',endpoint="index_home")    #在路径后<string:变量>
@warp
def index(page):					#函数必须接收page变量
    # print(url_for('index_home'))
    return f"ok~~~~{page}"

多个组合使用,类似于正则匹配url

@app.route('/<string:page>_<hang>_<lie>',endpoint="index_home")#,
@warp
def index(page,hang,lie):
    # print(url_for('index_home'))
    return f"ok~~~~{page}页{hang}行{lie}列"

使用场景

@app.route('/<file1>/<file2>',endpoint="index_home")#,
@warp
def index(file1,file2):
    path=os.path.join(file1,file2)
    #path=os.path.join("img1",file2)
    return send_file(path)
       
 file1为文件夹名,file2为文件名.可以通过路径上面输入的内容访问对应的资源.
 并且页可以固定file1文件夹的位置,只让用户访问该文件夹下内容

flask初始化配置

指定html模板文件

template_folder="文件夹路径"
	---> app=Flask(__name__,template_folder='tempolo')

静态文件存放路径

static_folder="静态文件存放文件"
	--->app=Flask(__name__,static_folder="image")

相当于修改配置文件内的static_folder

静态文件访问路径

static_url_path=""
    当修改static_folder 时,static_url_path会自动修改到static的路径. 
    如果修改,需要改为"/static"

其他参数

static_host=None        静态文件存放服务器  --->可以是另外一台服务器
host_matching           是否严格遵循host匹配规则
instance_path           指向另外一个实例,表示两个实例很像
instance_relative_config   指向另外一个实例,表示两个实例配置一模一样

flask的对象配置

app.config={}  配置为一个字典
app.default_config  为默认配置
env:None       env代表允许环境,None代表当前允许环境
debug:None     是否开0启debug模式.  开启编辑时代码重启,log打印级别最低.错误信息透传
testing:None   无限接近生成模式. 不会开启代码编辑重启,log级别教高(info).错误信息不透传
secret_key     密钥(session 的密钥)
permanent_session_lifetime    session生命周期单位为秒.  timedelta(days=31)即将31天变为秒
server_name    当前服务器名称(一般不要修改)
session_cookie_name   存放在浏览器cookie中session的名称.第一个字符不能是空

外部导入配置

1.在单独的一个py文件中创建一个类,类属性为一种模式的配置
2.再在该py文件中创建一个类,类属性为另一种模式的配置
3.在flask运行文件中,导入py文件中的两个类
4.在flask文件中app.config.from_object(你需要运行配置的类)
新配置文件中:

class DebugConfig:								class TestConfig:
    DEBUG = True  								    TESTING = True
    SECRET_KEY = "%^&*(%^&*"					      SECRET_KEY = "的字符串牛逼吧"
    PERMANENT_SESSION_LIFETIME = 3600				  PERMANENT_SESSION_LIFETIME = 30
    SESSION_COOKIE_NAME = "I am Not Session"		   SESSION_COOKIE_NAME = "TestConfig"
    OLD = "OLD"									    OLD = "OLDS"
    BOY = "BOY"										BOY = "BOYS"
    EDU = "EDU"									    EDU = "EDUS"
    PYTHON = "PYTHON"							    PYTHON = "PYTHONS"
    FLASK = "FLASK"    							    FLASK = "FLASKS"

flask文件中:
	from setting import DebugConfig,TestConfig
	app.config.from_object(DebugConfig)

蓝图

蓝图的作用  功能隔离  路由隔离 --->类似于django 中的app01
1.创建一个蓝图文件夹
2.在蓝图文件夹创建templates和static文件
3.在蓝图文件创建views
4.views中进行配置
5.在flask文件中进行蓝图的注册
view中配置:
    from flask import Blueprint     #导入蓝图
    # blueprints
    user=Blueprint('user',__name__)    #创建蓝图实例

    @user.route("/login")           #创建蓝图视图函数
    def login():
        return "im zeor"
        
flask文件和蓝图进行注册:
	在flask文件:
		from flask import Flask
        app =Flask(__name__)
        #建立蓝图注册
        from app01.views import user		#导入蓝图
        app.register_blueprint(user)		#进行蓝图注册
        
        if __name__ == '__main__':
            app.run()

蓝图的前缀

当同一个flask下有两个蓝图时.且蓝图名相同时.在实例化蓝图时,指定蓝图前缀:
--->
	user=Blueprint('app01_user',__name__,url_prefix='/index') 
	user=Blueprint('app02_user',__name__,url_prefix='/admin')

这时访问app01时就应该加上/index/login.访问app02时就应该加上/admin/login

蓝图的静态文件,html模板的引入.需要目录分割
user=Blueprint('app02_user',__name__,url_prefix='/index',template_folder='app01/templates',static_folder="app01/static",static_url_path="/app01/static")    #创建蓝图实例

特殊的装饰器

模拟中间件
@app.before_request	   请求进入视图函数之前,执行函数
def be1():
	print("be1")
...
	
@app.after_request     请求结束返回响应之前
def af1():
	print("af1")
...

正常:
	be1 -> be2 -> be3 ->视图函数 ->af3 ->af2 ->af1  

异常:
	be1 -> be2 -> 发生异常 ->af3 ->af2 ->af1



@app.errorhandler(4xx,5xx)   错误码

@app.errorhandler(404)
def error404(ErrorMessage):
	print(ErrorMessage)			--->这个为原
	return f"你访问的的{request.path}不存在"
posted @ 2019-09-26 21:28  路一  阅读(208)  评论(0编辑  收藏  举报