Flask 常用技巧
-
快速添加数据
在基础数据模型中,添加一个set__attrs方法,当添加数据时 ,使用模型对象掉用改方法,传入数据即可.---例: 表单提交时, 传入 form.data 再db.session.add(模型对象),最后db.session.commit() 提交即可。
def set_attrs(self, form_data): # 添加数据 / 只能在表单name与字段名相同时可以使用该方法 from apps.cms.verify_view import set_password for k, v in form_data.items(): if hasattr(self, k) and k != 'id': if k != 'password': setattr(self, k, v) else: # 对密码进行加密 setattr(self, k, set_password(v))
-
数据字典化( 强转字典 )
如果视图中没有定义keys方法,将不能进行字典化
class Dishes_Class_Model(BaseModel): name = db.Column(db.String(length=16), comment='名称') type_accumulation = db.Column(db.String(length=50), comment='菜品编号') merchant_id = db.Column(db.INT, comment='所属商家ID') shop_id = db.Column(db.INT, comment='所属店铺ID') description = db.Column(db.String(length=250), comment='描述') is_default = db.Column(db.Boolean, default=False, comment='是否是默认分类') category_id = db.Column(db.String(16), comment='分类UUID') def keys(self): # 返回相应字段(大前提) return 'name', 'type_accumulation', 'shop_id', 'description', 'is_default'
使用__getitem__魔术方法,item参数传入一个可迭代类型的keys
# 强转字典 def __getitem__(self, item): if hasattr(self, item): return getattr(self, item)
-
密码哈希加盐及验证:
from werkzeug.security import generate_password_hash, check_password_hash # 哈希加盐的密码方式 def set_password(password): return generate_password_hash(password=password, method='pbkdf2:sha256', salt_length=32) # 哈希验证密码的方式 def check_password(set_password, password): return check_password_hash(pwhash=set_password, password=password) # 验证成功返回True
使用 set_password(password) 方法对键入的字符串哈希化
返回结果: pbkdf2:sha256:50000$vVSMhPMPZIpj6BsIk9r5rQbGwRA6bhGE$8e1e7e0c8eb8c1007120eb491617afe09f022d2175ad78e400316052b1b7d3ae
使用 check_password(哈希后的值,键入的字符串) 进行校验,校验成功返回True,反之Flase
知识补充:
repr 与__str__ 的区别:
def __repr__(self):
return self.goods_name
#**********************************************#
def __str__(self):
return self.goods_name
相同点:
这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员。
不同点:
str 是针对print打印,只有print打印出结果,__repr__调用对象是,将打印返回值
获取配置信息:
current_app.config.get('SESSION_REDIS')
API接口开发_前后端分离开发:
REST 资源状态转移 设计方案( 建议 )
RESTful api标准___使用名词作为资源信息
使用HTTP请求的方式作为资源的操作动词[GET| POST | PUT/PATCH |DELETE]
请求必须通过json进行数据的给与响应也通过json格式反馈
API接口的用户身份认证
网站开发:
cookie session
API:
Basic Auth ( 请求: Authorization: 用户:密码 base64的编码 )
HTTP 明文传输 HTTPS服务进行数据传输
令牌token技术来实现用户身份的识别问题
cookie:
浏览器
服务器通过响应的set_cookie
浏览器在请求时: cookie:xxx
APP:
服务器把token值传给客户端,跟客户约定一个协议,让客户端来存储
客服端在需要权限的API接口访问时,把存储的token值一起挟带过来
token的格式:
JWT的格式
JSON格式
{"uid":101} + 签名的行为 {"uid":101} + 密钥的签名
{"uid":102} + 密钥的签名