zoukankan      html  css  js  c++  java
  • Flask 路由 , 初始化 , 配置Config , 蓝图BluePrint , 装饰器

    # flask 不能返回 int类型和float类型数据
    
    # flask 的response
    	# 1.HTTPResponse 返回字符串 ""
        # 2. render_template 渲染返回模板文件
        # 3. redirect 重定向
        ### Flask 特殊封装
        # 4. send_file 打开返回文件内容, Content-Type:文件类型. 自动识别文件类型,
        # 5. jsonify 返回标准的json 字符串, 文件类型:Content-Tpye:application/json
    
    # flask 的request
    	# 1.Request  导入  - 请求上下文
        # 2.Request.method  请求方式: 8种方式 get post delete put :  options(解决请求跨域), 
        # 3.Request.path   url_root  路由地址
        # 4.Request.HOST  获取访问主机地址
    
    # flask request 方法
    	# request.form     FormData中数据  有一个to_dict()方法,直接返回字典数据
       	# request.args      url中的数据  有一个to_dict()方法,直接返回字典数据
        # request.data      请求体的原始信息,只有 Content-Type没有Form
        # request.json      请求头中的Content-Type:application/json 时,自动存为字典数据
        # request.headers   请求头中的数据
        # request.cookies    请求中cookie信息
        #  注意: 
        request.values (用于检查参数是否传递)
        
    # flaks 中的Session  --->Flask-Session  这是一个三方插件,和原生的sessions不一样.
    	from flask  import session 
         # 使用session的前提是在application中添加secret_key
         app.secret_key="13213141"
        
        # 使用 session
        def get_session():
            session['user']='123'
        ### 交由客户端保管机制
        	# 1. 开启Session - session['user']='123'
            # 2. session 序列化字符串
            # 3. 通过secret_key 进行加密
            # 4. 通过Cookie返回给客户端
            
          # 接收Session	
        	# 1.通过 Cookie 获取session
            # 2.通过secret_key 解密
            # 3.反序列化字典
            # 4.得到原始session信息
    
        
    

    一丶Flask中的路由

    @app.route("/look",endpoint="look_name",methods=['get','post'],redict_to='/home',defaults={"nid":1})
    def look(nid):
    	return ""
    
    # endpoint 不能重复,对应视图函数,默认是视图函数名
    	# 1. 	
    # url_for 反向创建url,视图函数与路由对应关系
    	url_for("index") # 结果/look
    # methods 允许请求的方式 ["GET","POST","DELETE","PUT"]
    	# 1.迭代循环-->变大写--->集合去重
    	
    # redict_to 永久重定向 308  
    	# 没有进入视图,直接跳转到新的地址
        
    # strict_slashes  是否严格要求路由匹配规则   , 值只有True和False 
    # defaults 默认参数 ,在视图函数中一定要接收,才能使用.
    
    #### ** 动态参数路由   只有int 类型和 string类型
    @app.route("/look/<int:page>")   # <string:page>  字符串是万能的参数接收
    def look(page): 
        return f"当前是第{page}页"
    
    	# 场景:
            利用send_file限定返回的文件
    

    二丶 Flask 初始化实例参数

    # template_folder	  存放 模板路径
    # static_folder      静态文件"存放 "路径
    # static_url_path    静态文件 "访问路径",  默认值f"/{static_folder}",如果没有指定就是'/static'
    
    
    # static_host 静态文件存放服务器主机  静态文件访问服务HOST -> 指向到另外一台服务器
    
    ### 注意:  static_url_path 是加了 "/"前缀的  static_folder
    
    
    # -*-coding:utf-8-*-
    # Author:Ds
    
    from flask import Flask, render_template, send_file
    
    app=Flask(__name__,template_folder='templates',static_folder='image',static_url_path='/image')
    
    my_static_folder='image'
    my_static_url_path=None
    if not my_static_url_path:
        my_static_url_path=f'/{my_static_folder}'
    
    @app.route(f'/{my_static_url_path}/<filename>')
    def look(filename):
        import os
        file_path=os.path.join(my_static_folder,filename)
        return send_file(file_path)
    
    @app.route('/index')
    def index():
        return render_template('index.html')
    
    if __name__ == '__main__':
        app.run()
    

    三丶 Flask config对象

    # 默认配置 : app.default_config 
    	# DEBUG 模式 开启编辑时代码重启 Log打印级别最低 错误信息透传
    	# TESTING 模式 无限接近生产环境 代码编辑不会重启 Log级别较高 错误信息不再透传
    	# SESSION_COOKIE_NAME 存放在浏览器cookie中session的名称
        
    ### 在flask中 所有的配置都是以 k:v的形式配置,
    
    # Flask Config 快速配置,  settings.py
    
    class DebugConfig:
    		DEBUG = True
    		SECRET_KEY = "%^&*(%^&*"
    		PERMANENT_SESSION_LIFETIME = 3600
    		SESSION_COOKIE_NAME = "I am Not Session"
    		OLD = "OLD"
    		BOY = "BOY"
    		EDU = "EDU"
    		PYTHON = "PYTHON"
    		FLASK = "FLASK"
    		
    class TestConfig:
    		DEBUG = True
    		SECRET_KEY = "%^&*(%^&*"
    		PERMANENT_SESSION_LIFETIME = 3600
    		SESSION_COOKIE_NAME = "I am Not Session"
    		OLD = "OLD"
    		BOY = "BOY"
    		EDU = "EDU"
    		PYTHON = "PYTHON"
    		FLASK = "FLASK"		
            
    ### 在 flask app py文件中
    	from settings import DebugConfig,TestConfig
    	app.config.from_object(DebugConfig)
    

    四丶blueprint 蓝图

    # 蓝图的作用: 
    	# 功能隔离, 路由隔离 
    # blueprint 是不能运行的Flask实例	
    
    ### Blueprint('蓝图的名称',__name__,前缀)
    	# 注意: 1.蓝图的名称不能重复
        	   2.多个蓝图实例相同时,url路由必须要加前缀,否则访问的永远是第一个蓝图的url路由
            
            
    # 定义蓝图,app01文件夹下 views.py
    from flask import Blueprint
    user = Blueprint(name="app02user",__name__,url_prefix="/shopping") # url_prefix
    @user.route("/login")
    	def login():
    		return "I am app02 userBP login func"
        
    # flask 运行实例中注册蓝图
        from .app01.views import user as app01_user
        from .app02.views import user as app02_user
    
        app.register_blueprint(app01_user)
        app.register_blueprint(app02_user)
    

    五丶Flask特殊装饰器

    @app.before_request  #  请求进入视图函数之前    , 执行顺序按照定义顺序执行
    @app.after_request   # 请求结束,返回影响客户端之前  ,执行顺序按照定义的倒置顺序执行,必须有response  
    @app.errorhandler(4xx or 5xx)  # 重定义错误信息
    
    
    ### 定义错误~~~
    @app.errorhandler(404)
    def error404(ErrorMessage):
        print(ErrorMessage)
        return redirect("https://www.autohome.com.cn/beijing/asdfe32r24rff23r23r")
    # return send_file("image/1.jpg")
    
  • 相关阅读:
    Duilib 源码分析(二)消息处理
    Duilib 源码分析(一)示例推演
    2021 Duilib最新入门教程(七)Duilib处理消息
    2021 Duilib最新入门教程(六)Duilib界面设计
    2021 Duilib最新入门教程(五)Duilib调用静态库示例
    2021 Duilib最新入门教程(四)Duilib编译静态库
    源文件(cpp)、静态库(lib)、动态库(dll)
    2021 Duilib最新入门教程(三)Duilib调用动态库示例
    supernova-SN_TV MUF简介
    jieba+pyecharts 词云图应用
  • 原文地址:https://www.cnblogs.com/dengz/p/14653830.html
Copyright © 2011-2022 走看看