zoukankan      html  css  js  c++  java
  • 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}不存在"
    
  • 相关阅读:
    redis windows下安装
    Plupload 多实例上传 测试可用
    Plupload 上传详细讲解,Plupload 多实例上传,Plupload多个上传按钮--推荐使用
    Class 'AppHttpControllersDB' not found and I also cannot use a new Model
    laravel 控制器类DB类操作
    php-memcached详解
    PHP电商订单自动确认收货redis队列
    写一个PHP函数,实现扫描并打印出指定目录下(含子目录)的所有jpg文件名
    thinkphp5网站中集成使用支付宝手机支付接口
    Memcache服务搭建
  • 原文地址:https://www.cnblogs.com/luyi84895838/p/11594596.html
Copyright © 2011-2022 走看看