flask框架的应用要点--对象字典化--flask-login--session机制

任意对象字典化

在api接口中使用,精简代码
字典是可以迭代的,要使对象字典化,也要使对象能够迭代,可以采取鸭子类型,使用魔术方法__getitem__ 迭代获取到值。
怎么获取值呢?
任何字典的keys是直接暴露在外面的,只要知道keys就能够得到对应的values中。
通过提供的 getitem 方法,获取keys提供的键,去找到相应的值,使对象字典化

例子

class P:
	name = 'libai'
	age = 18

	def __getitem__(self,item):
		# 判断是否有传入的key值
		if hasattr(self,item):
			# 如果有就去获取到key对应的值
			return getattr(self,item)
	
	def keys(self):
		# 给出需要字典化的key值
		return ['name','age']

p = P()
# 字典化的使用,结果为一个字典{'name':'libai','age':18}
print(dict(p))
实现form表单数据的赋值
# 接收formdata(表单数据)
def set_attrs(self, formdata):
        for k, v in formdata.items():
        	# 判断对象中是否有该属性
            if hasattr(self, k) and k != 'id':
            	# 属性存在进行赋值操作
                setattr(self, k, v)
上下文管理器(中间件技术)

在用户请求交给视图处理的时候,会由请求中间件先进行处理,再交给视图
同样视图处理完后,交给响应中间件进行处理,再返回给用户
中间件的意义:如果中间件没有验证成功,就不会交给视图函数处理,减少了数据库的io操作,提高了网站的效率

flask-login的使用

代码详情参考:https://blog.csdn.net/weixin_43958804/article/details/86290114
flask-login的特性:

  • 提供全局current_user对象,方便视图函数调用;
  • 提供is_authenticated属性,判断是否为认证用户;
  • 提供login_require装饰器,限制非登陆用户访问视图函数,自动跳转登陆页面;
    login_manager对象的注册及属性
  • 利用login_user使用session进行
  • 利用login_out注销session
    涉及点
       1. 将app注册到loginmanger
       2. 模型类继承UserMixin,里面存在一个get_id方法,通过id来唯一标识用户。
       3. 通过回调函数load_user(userid),返回一个用户对象,在所有的视图函数中都可以使用到用户对象信息。
flask-session

session存储
原生存储位置:
session是保存在服务器上的数据,用数据库保存
但是flask天生是不带数据库支持的,把session的内容,通过一个加密的方式散列成一个值,把这个值通过set_cookie写入到用户的浏览器上

每次用户的访问时,携带cookie,flask再每次请求来的时候,解密这个cookie,从中取出session的内容,如果session数据量很大,可能会导致
网速变慢,一般不用这种方式来做。

更改session存储的位置

# 绑定应用到session
from flask-session import Session
Session(app=app)
# 具体就该可读源码
# 修改配置文件
def get_redis():
    from redis import Redis
    return Redis(host='服务器地址', port=端口号)

SESSION_TYPE = 'redis'   
SESSION_REDIS = get_redis()
session原理

session的处理经过两个步骤,取出session和保存session
用户登录,生成一个字典对象,交由视图函数,session操作后进行session的保存,将session的key值交给用户
当下一次用户登录,会先去找字典空间里是否有这个对象,如果有,取出session交给视图,如果没有,同样生成一个字典对象,flask中最后都要进行session的保存。django中session产生变化才会保存

flask和django的重要的2点区别:

django的每个视图函数都要传一个request对象,flask是采用全局代理对象django的session是存储在服务器的数据库上的,flask的session技术是利用cookie存储在浏览器上的

转载于:https://my.oschina.net/u/4161332/blog/3072264

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值