flask写入cookie、登录装饰器、flask配置文件、路由系统

flask写入cookie

# 使用cookie---》就是session,全局的,导入使用即可,必须要指定秘钥

# 取值:携带cookie--->把cookie拿出来--->反序列化解密--->给session对象

# 赋值:字典--->序列化--->加密--->放到cookie中
    放值:session['key']=value
    取值:session.get('key')
    指定密钥:app.secret_key = 'nzhaknsjKXZnKCKdhead'

登录装饰器

def auth(func):
    @functools.wraps(func)
    def inner(*args, **kwargs):
        if not session.get('is_login'):
            return redirect('/login')
        return func(*args, **kwargs)

    return inner

flask配置文件

# 项目的配置文件:如果不配,有默认的
# 几个重要的
	DEBUG:是否是调试模式
	SECRET_KEY:项目的秘钥
	print(app.config)
# 1 使用配置文件之一:(写小脚本测试阶段用)直接通过app对象,配置上,只能配置几个,本质都要放到app.config中
	app.debug=True
	app.secret_key='asdfasf4555'
	app.session_cookie_name='sss'
	print(app.config)

# 2 直接通过app.config 配置
	app.config['DEBUG'] = True
	app.config['SECRET_KEY'] = 'asfasdf'
	print(app.config)

# 3 通过配置文件(很像djagno),不常用
	app.config.from_pyfile('settings.py')
	print(app.config)

# 4 通过类配置(用的多,可以有多套配置)
	app.config.from_object('setting.DevelopmentConfig')
	app.config.from_object('setting.ProductionConfig')
	print(app.config)

# 5 以下,做了解
	app.config.from_envvar("环境变量名称")
	app.config.from_json("json文件名称")

#使用分布式配置中心(nocos apollo)
    import requests
    # 想某个地址发送请求
    res=requests.get('地址').json()  # 只要改了配置中心,所有使用配置中心的都会改了,就不用一个一个的去改,如果在公司集群化多的情况下可能会用到
    app.config.from_mapping(res)
# 拓展:配置文件都在本地

路由系统

# django中路由是单独的urls.py
# flask(fastAPI等)中是装饰器模式

# 使用方式
@app.route:重要的参数
	rule: 字符串的路径,使用转换器  <string:name>  <name>
		'default':          UnicodeConverter,
		'string':           UnicodeConverter,
		'path':             PathConverter,    # /xx/sss/
		'int':              IntegerConverter, # 数字
		'float':            FloatConverter,   #小数
		'uuid':             UUIDConverter,    #asdfas-asdfas-asdf
        #记住:string,int,path,主要用这三个
	methods: 列表,规定请求的方式,如果列表中没有,该请求方式不被支持
	endpoint:路由别名,如果不写,会以被装饰的函数名作为别名,django中叫name

路由本质

# 它的本质是一个app对象的方法self.add_url_rule(rule, endpoint, f, **options)

# 如果在视图函数上加了装饰器,其实本质是在调用self.add_url_rule(rule, endpoint, f, **options)
	我们可以不加装饰器,自己调用这个方法,
    
 '''
1 @app.route('/') 先执行完成,结果是decorator内层函数
    @decorator
    def index():
2 index=decorator(index)
    def decorator(f):
        # @app.route('/',endpoint='index') 如果没有传endpoint,这个地方就是None
        # options弹出pop
        endpoint = options.pop("endpoint", None)
        # self是Flask的对象,app :rule路由, endpoint:别名,是None,其他的打散了传入了(methods..)
        # f就是index,就是我们写的那个视图函数(index)不加括号
        self.add_url_rule(rule, endpoint, f, **options)
        return f
3 加了装饰器最终,返回的还是index,只不过执行了 self.add_url_rule(rule, endpoint, f, **options)

4 Flask类中得add_url_rule方法
    -rule:就是装饰器传入的路径,路由
    -endpoint:别名
    -view_func:视图函数不加括号
    
5 得到的结论,现在不需要使用装饰器来注册路由了,自己写
    app.add_url_rule('/home', view_func=home, endpoint='home')
   
绕了一圈本质就是add_url_rule
'''

add_url_rule的参数

@app.route和app.add_url_rule参数:
# rule, URL规则
# view_func, 视图函数名称
# defaults = None, 默认值, 当URL中无参数,函数需要参数时,使用defaults = {'k': 'v'}
为函数提供参数,就是djagno中得kwargs

# endpoint = None, 名称,用于反向生成URL,即: url_for('名称'),等同于django的reverse
# methods = None, 允许的请求方式,如:["GET", "POST"]

# strict_slashes 对URL最后的 / 符号是否严格要求
strict_slashes = None
    '''
        @app.route('/index', strict_slashes=False)
        #访问http://www.xx.com/index/ 或http://www.xx.com/index均可
        @app.route('/index', strict_slashes=True)
        #仅访问http://www.xx.com/index
    '''
# redirect_to 重定向到指定地址
redirect_to = None, 
    '''
        @app.route('/index/<int:nid>', redirect_to='/home/<nid>')
    '''
posted @ 2022-12-13 17:30  张张包~  阅读(137)  评论(0编辑  收藏  举报