数据校验

SaCa DataQuality概述

妖精的绣舞 提交于 2019-12-02 05:34:36
1.1 产品特性 UniEAP DataQuality(以下简称DataQuality)是UniEAP最新推出的数据质量管理平台。基于数据监控服务、数据质量校验引擎、数据清洗引擎以及面向服务数据质量架构实现了数据质量管理平台,产品关键特性主要有: 通过图形化的页面支持所有主流数据库的数据质量校验,校验规则支持自动适配且内置跨表、表、列校验; 通过数据质量监控模块对整个数据质量处理过程进行动态跟踪,提供二维质量调试报告和综合质量汇总报告 支持对主流数据库进行数据的唯一性、完整性、合法性等质量问题进行综合分析,同时能够进行非关联数据质量分析规则定义; 支持基于常见拆分、替换等规则进行数据清洗,支持数据分支流转、过滤并且能写入所有主流数据库; 【注意】应用场景详细介绍请参见产品白皮书 1.2 系统组成 DataQuality采用面向服务的数据集成体系结构(如图1),核心为两个部分一是Web服务,二是后台引擎。Web服务端主要作为接入度提供给用户操纵引擎的入口同时提供设计工具,引擎端主要提供数据质量核心服务,包括监控服务、质量校验服务、清洗服务、时间处理服务以及元数据服务。 来源: https://www.cnblogs.com/Jeely/p/11732029.html

drf-jwt手动签发与校验

喜欢而已 提交于 2019-12-02 05:34:16
一、签发token 1.源码入口 # 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口 # 1)rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 # 接受有username、password的post请求 # 2)post方法将请求数据交给 rest_framework_jwt.serializer.JSONWebTokenSerializer 处理 # 完成数据的校验,会走序列化类的 全局钩子校验规则,校验得到登录用户并签发token存储在序列化对象中 2.核心源码:rest_framework_jwt.serializer.JSONWebTokenSerializer的validate(self, attrs)方法 def validate(self, attrs): # 账号密码字典 credentials = { self.username_field: attrs.get(self.username_field), 'password': attrs.get('password') } if all(credentials.values()): # 签发token第1步:用账号密码得到user对象 user =

drf框架day8

陌路散爱 提交于 2019-12-02 03:43:32
1.签发token源码分析 2.校验token源码分析 3.自定义drf-jwt配置 4.多方式登录签发token 5.自定义jwt校验规则(了解) 6.admin密文管理自定义User表(了解) 7.群查各过滤组件数据准备 8.drf搜索组件 9.drf排序组件 10.基础分页器 一.签发token源码分析 源码入口: 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登陆接口 1.rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 # 接受有username,password的post请求 2.post方法将请求数据交给rest_framework_jwt.serializer.JSONWebToKenSerializer 处理 # 完成数据的校验,会走序列化类的 全局钩子校验规则,校验得到登陆用户并签发,token存储在序列化对象中 核心源码:rest_framework_jwt.serializer.JSONWebTokenSerializer的validate(self, attrs)方法 def validate(self, attrs): # 账号密码字典 credentials = { self.username_field:

10.23总结

↘锁芯ラ 提交于 2019-12-02 03:35:20
签发token 源码入口 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口 1.rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法   接收有username、password的post请求 2.post方法将请求数据交给 rest_framework_jwt.serializer.JSONWebTokenSerializer 处理   完成数据的校验,会走序列化类的 全局钩子校验规则,校验得到登录用户并签发token存储在序列化对象中 核心源码:rest_framework_jwt.serializer.JSONWebTokenSerializer的validate(self, attrs)方法 def validate(self, attrs): # 账号密码字典 credentials = { self.username_field: attrs.get(self.username_field), 'password': attrs.get('password') } if all(credentials.values()): # 签发token第一步:用账号密码得到user对象 user = authenticate(*

JWT自定义校验规则与生成、用户多种方式登陆、搜索过滤,排序,分页

守給你的承諾、 提交于 2019-12-02 03:35:00
# 自定义校验token规则1.视图类 from .authentications import JWTAuthentication class UserDetail1(APIView): permission_classes = [IsAuthenticated] # 必须登录 authentication_classes = [JWTAuthentication] # jwt用户token自定义登陆认证规则 def get(self, request, *args, **kwargs): return APIResponse(results={'username': request.user.username}) 2.自定义token规则,在api生成一个authentications.py认证文件 import jwt from rest_framework_jwt.authentication import BaseJSONWebTokenAuthentication from rest_framework_jwt.authentication import jwt_decode_handler from rest_framework.exceptions import AuthenticationFailed class JWTAuthentication

自定义类签发校验token-实现多方式登录-自定义反爬类-admin后台表管理字段自定义-群查接口-搜索-排序-分页

强颜欢笑 提交于 2019-12-02 03:11:17
目录 复习 今日 签发token 校验token 案例:实现多方式登陆签发token 案例:自定义认证反爬规则的认证类 admin使用自定义User表:新增用户密码密文 群查接口各种筛选组件数据准备 drf搜索过滤组件 drf排序过滤组件 drf基础分页组件 复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法、判断是否有权限方法、计数等待时间方法 自定义频率组件: class MyThrottle(SimpleRateThrottle): scope = 'sms' def get_cache_key(self, request, view): # 从request的 query_params、data、META 及 view 中 获取限制的条件 return '与认证信息有关的动态字符串' settings文件中要有scope对应的rate配置 {'sms': '3/min'} jwt认证: 1)session存储token,需要数据库参与,耗服务器资源、低效 2)缓存存token,需要缓存参与,高效,不易集群 3)客户端存token,服务器存签发与交易token的算法,高效,易集群 drf-jwt使用: 安装:djangorestframework-jwt 视图类签发token - username,password => token 认证类校验token -

主从校验工具pt-table-checksum和pt-table-sync工作原理

回眸只為那壹抹淺笑 提交于 2019-12-02 03:01:32
  pt-table-checksum和pt-table-sync是常用来做MySQL主从数据一致性校验的工具,pt-table-checksum只校验数据,不能对数据进行同步;pt-table-sync不仅可以检验数据,还可以将不一致的数据同步。 工作原理   两个工具的工作原理基本差不多,分开说明。为了说明简单易懂,抛开了所有内部函数,只是简易的介绍一下工具的工作过程。 pt-table-checksum工作原理 1.单行数据checksum值的计算   首先检查表结构,获取每列的数据类型,把所有类型都转换为字符串,把一整行数据拼接成一个很长的字符串,这行数据计算出一个校验值。就是通过这个值进行主从比较的,如果主从两个值一致,则数据一致,反之亦然。 2.数据块checksum值的计算   对于大表,进行单行的比较,势必工作量很大。数据块的比较就顺势而出,其实和单行拼接的原理类似,整块比较只是把一个数据块作为一个单位,拼接成一个长字符串,计算出校验值。说是数据块,其实是按索引来取值进行比较的。因此对于块计算,就需要表有主键或唯一索引。 3.主从一致性比较   主库上计算的过程sql通过binlog传递到从库进行从库计算,主库的计算结果存储到一个pt.checksums统计表中,然后将表通过binlog日志方式传递到从库。从库根据计算过程sql计算出数据块的校验值,并把值更新到pt

jwt

萝らか妹 提交于 2019-12-02 00:37:13
目录 认证规则图 认证规则演变图 JWT认证 drf-jwt插件 认证规则图 django不分离 drf分类 认证规则演变图 数据库session认证:低效 缓存认证:高效 jwt认证:高效 缓存认证:不易并发 jwt认证:易并发 JWT认证 优点 """ 1) 服务器不要存储token,token交给每一个客户端自己存储,服务器压力小 2)服务器存储的是 签发和校验token 两段算法,签发认证的效率高 3)算法完成各集群服务器同步成本低,路由项目完成集群部署(适应高并发) """ 格式 """ 1) jwt token采用三段式:头部.载荷.签名 2)每一部分都是一个json字典加密形参的字符串 3)头部和载荷采用的是base64可逆加密(前台后台都可以解密) 4)签名采用hash256不可逆加密(后台校验采用碰撞校验) 5)各部分字典的内容: 头部:基础信息 - 公司信息、项目组信息、可逆加密采用的算法 载荷:有用但非私密的信息 - 用户可公开信息、过期时间 签名:头部+载荷+秘钥 不可逆加密后的结果 注:服务器jwt签名加密秘钥一定不能泄露 签发token:固定的头部信息加密.当前的登陆用户与过期时间加密.头部+载荷+秘钥生成不可逆加密 校验token:头部可校验也可以不校验,载荷校验出用户与过期时间,头部+载荷+秘钥完成碰撞检测校验token是否被篡改 """ drf

三大认证之认证组件和权限组件

↘锁芯ラ 提交于 2019-12-02 00:34:57
一. 源码分析    1. APIView的dispath(self, request, *args, **kwargs) 2. dispath方法内self.initial(request, *args, **kwargs) # 认证组件: 校验用户 - 游客, 合法用户, 非法用户 # 游客: 代表着校验已经通过,直接进入下一步校验(权限校验) # 合法用户: 代表校验通过,将数据保存在request.user中,在进行下一步校验(权限校验) # 非法用户: 代表校验失败,抛出异常,返回403权限异常结果 self.perform_authentication(request) # 权限组件: 校验用户权限 - 必须登录,所有用户,登录读写游客只读,自定义用户角色 # 认证通过: 可以进入下一步校验(频率认证) # 认证失败: 抛出异常,返回403权限异常结果 self.check_permissions(request) # 频率组件: 限制试图接口访问的频率次数 - 限制条件(IP, ID, 唯一键), 频率周期时间(s, m, h), 频率的次数 # 没有达到限次, 正常访问接口 # 达到限次, 限制时间内不能访问,限制时间到达后,可以重新访问 self.check_throttles(request) 3. 认证组件 request类的 方法属性 user 的get方法

DRF框架(六) ——频率组件、jwt认证

戏子无情 提交于 2019-12-02 00:27:12
drf频率组件源码 1.APIView的dispatch方法的 self.initial(request,*args,**kwargs) 点进去 2.self.check_throttles(request) 进行频率认证 def initial(self, request, *args, **kwargs): """ Runs anything that needs to occur prior to calling the method handler. """ self.format_kwarg = self.get_format_suffix(**kwargs) # Perform content negotiation and store the accepted info on the request neg = self.perform_content_negotiation(request) request.accepted_renderer, request.accepted_media_type = neg # Determine the API version, if versioning is in use. version, scheme = self.determine_version(request, *args, **kwargs) request