• 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)
    
  • 相关阅读:
    Struts2中请求参数的接收方式和ModelDriven机制及其运用
    struts2获得请求参数的方式
    参数(parameter)和属性(Attribute)的区别
    getContextPath、getServletPath、getRequestURI,getRealPath的区别
    struts2的result的type属性
    Struts2的值栈和对象栈
    el表达式跟ognl表达式的区别(转)
    Struts学习之值栈的理解
    创建虚拟机-1
    安装kvm模块配置网络
  • 原文地址:https://www.cnblogs.com/mlhz/p/10254257.html
Copyright © 2020-2023  润新知