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")
    
  • 相关阅读:
    deeplearning.ai 卷积神经网络 Week 1 卷积神经网络
    deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II
    deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I
    deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch Normalization和程序框架
    deeplearning.ai 改善深层神经网络 week2 优化算法
    deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面
    cs231n spring 2017 lecture8 Deep Learning Networks
    cs231n spring 2017 lecture7 Training Neural Networks II
    cs231n spring 2017 lecture6 Training Neural Networks I
    cs231n spring 2017 Python/Numpy基础
  • 原文地址:https://www.cnblogs.com/dengz/p/14653830.html
Copyright © 2011-2022 走看看