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>')
'''