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")
posted @ 2021-04-13 16:24  染指未来  阅读(483)  评论(0编辑  收藏  举报