python开发的软件sparrow-sparrow
sparrow cloud 组件介绍
Django SDK
Cache Service : sparrow_cloud v1.7.0 以及之后的版本不在提供支持
RestClient : 封装了request包和服务发现,正确请求返回解析后json数据, 错误请求返回HTTPException
RequestsClient : 封装了request包和服务发现, 返回原生的request结果
Message_Client : 将任务发送到rabbitmq, server端未开源
Rabbitmq_Consumer : rabbitmq消息消费端,server端未开源
Table_API : 接收查询条件返回 django model 序列化后的数据
Api Schema Register : django subcommand, 主动注册API 描述到文档服务, server端未开源
service_log : Log日志, 服务端未开源
ding_talk : 发送消息到钉钉群,服务端未开源
access_control verify : 访问控制验证,服务端未开源
get_user_token : 获取用户token
get_app_token : 获取app token
Django Middleware
JWT Middleware : 解析 JWT Token
Request Method Middleware : 兼容不支持 put/delete 请求
ExceptionMiddleware : 异常通知
rest_framework 中间件
UserID Authentication: 验证 user
sparrow cloud组件
django中间件
rest_framework中间件
installation
pip install sparrowcloud
测试运行
运行所有测试:
sh tests/mock_configmap.sh && py.test tests && py.test access_control
运行单个测试:
sh tests/mock_configmap.sh && py.test tests/test_rest_client.py
cache_manager
描述 : cache_manager 会把model的get方法使用缓存
# 依赖settings配置:
import redis
CACHE_REDIS_POOL = redis.ConnectionPool(
host=REDIS_HOST,
port=REDIS_PORT,
password=REDIS_PASSWORD,
decode_responses=True)
# 使用方法:
# 在models文件中导入
from sparrow_cloud.sparrow_cloud.cache.cache_manager import CacheManager
# 在需要使用缓存的model中加入
objects = CacheManager()
# demo中可查看示例
# model 示例路径, sparrow_demo/models.py
JWTMiddleware
描述:Token 解析
配置 JWTMiddleware 中间件需要的参数
# 注册中间件
MIDDLEWARE = (
'sparrow_cloud.middleware.jwt_middleware.JWTMiddleware', # 放最上层
# 将以下参数添加到settings.py
JWT_MIDDLEWARE = {
"JWT_SECRET": "", # JWT_SECRET, 必填
}
UserIDAuthentication
描述: user_id 解析
配置 UserIDAuthentication 认证需要的参数(仅兼容django2.2以上版本)
SPARROW_AUTHENTICATION = {
"USER_CLASS_PATH": "sparrow_cloud.auth.user.User",
}
# 参数说明: USER_CLASS_PATH: 路径中的User为中间件的User模版, 可以根据自己的需求重新创建User, 并将自己的 User路径按照模版格式放到:USER_CLASS_PATH下
# 注册中间件
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'sparrow_cloud.auth.user_id_authentication.UserIDAuthentication',
),
}
METHOD_MIDDLEWARE
兼容阿里不支持 put/delete 请求
配置METHOD_MIDDLEWARE需要的参数
# 注册 METHOD_MIDDLEWARE
MIDDLEWARE_CLASSES = (
'sparrow_cloud.middleware.methodconvert.MethodConvertMiddleware', #兼容阿里请求方式中间件
)
TracingMiddleware
兼容阿里不支持 put/delete 请求
配置METHOD_MIDDLEWARE需要的参数
MIDDLEWARE_CLASSES = (
'sparrow_cloud.middleware.TracingMiddleware', # 追踪链
)
restclient
服务调用中间件
from sparrow_cloud.restclient import rest_client
rest_client.post(SERVICE_CONF, api_path, timeout=10, json=api_list)
# 参数说明:
# SERVICE_CONF = "test-svc:8000"
# timeout:
# 非必传,默认超时时间5秒
# 传参方式:
# timeout=10 # 10秒为connect 和 read 的 timeout
# timeout=(5, 5) # 分别定制:connect 和 read 的 timeout
# timeout=None # Request 永远等待
# 剩余参数与 requests.get/post 等方法保持一致
requestsclient
服务调用中间件(返回结果未封装)
from sparrow_cloud.restclient import requests_client
requests_client.post(SERVICE_CONF, api_path, timeout=10, json=api_list)
# 参数说明:
# SERVICE_CONF = "test-svc:8000"
# timeout:
# 非必传,默认超时时间5秒
# 传参方式:
# timeout=10 # 10秒为connect 和 read 的 timeout
# timeout=(5, 5) # 分别定制:connect 和 read 的 timeout
# timeout=None # Request 永远等待
# ps:
# 剩余参数与 requests.get/post 等方法保持一致
message_client
麻雀任务发送
注册消息 2. 发送消息
# 调用方式
from sparrow_cloud.message_service.sender import send_task_v3
# 非延时消息
data = send_task_v3(message_code=message_code,
*args,
**kwargs)
# 延时消息
data = send_task_v3(message_code=message_code,
delay_time=200
*args,
**kwargs)
# ps:
# message_code: 消息码
# delay_time: 延时时间,单位为秒
=====================以下为旧版调用方式,不建议继续使用,会逐步弃用===========================
# 调用方式
from sparrow_cloud.message_service.sender import send_task
# 非延时消息
data = send_task(exchange=exchange,
routing_key=routing_key,
message_code=message_code,
retry_times=3,
*args,
**kwargs)
# 延时消息
data = send_task(exchange=exchange,
routing_key=routing_key,
message_code=message_code,
retry_times=3,
delay=True,
delay_time=200
*args,
**kwargs)
# ps:
# exchange: 交换机
# routing_key: 路由
# message_code: 消息码
# retry_times: 重试次数,非必填,默认重试次数为3次(每次间隔1秒)
# delay: 是否发送延时消息,默认为False,表示立即发送。如果设为True,则根据delay_time来设定延时时间
# delay_time: 延时时间,单位为秒
rabbitmq_consumer
麻雀任务消费
获取队列 2. 消费任务
QUEUE_CONF_1 = {
"QUEUE": "",
"TARGET_FUNC_MAP": {
"ORDER_PAY_SUC_ONLINE": "path",
},
}
# ps:
# QUEUE_CONF_1 # 队列的配置
# QUEUE # 队列名称
# TARGET_FUNC_MAP # 队列消费的任务(字典中的键为message code,对应的值为执行该消息的任务函数路径字符串)
# 调用方式:
# 注册服务到 settings 下的 INSTALLED_APPS中
INSTALLED_APPS = [
"sparrow_cloud.apps.message_service",
]
# 调用命令:
python3 manage.py rabbitmq_consumer --queue QUEUE_CONF_1
# ps:
# 参数说明
# --queue : 指定发送队列配置名称, 参照settings中QUEUE_CONF_1配置
table_api
接受查询条件返回django model 序列化后的数据
分为server端和client端
# server 端配置
# settings注册服务
INSTALLED_APPS = [
"sparrow_cloud.apps.table_api",
]
# url配置
urlpatterns = [
path('table/api/', include("sparrow_cloud.apps.table_api.urls")),
]
# client端调用
from sparrow_cloud.restclient import rest_client
SERVICE_CONF = "sparrow-demo:8000"
payload = {
"app_lable_model":"app_lable.model",
"filter_condition":{"product_id":"74101"}
}
response = rest_client.get(SERVICE_CONF, api_path='/table/api/', json=payload)
# 返回的数据结构:{'code': 0, 'message': 'ok', 'data': [{}]}
# ps:
# app_lable_model: app_name.model(app_name:INSTALLED_APPS里面注册的服务的名字, model:app_lable下的model名字,不区分大小写)
# filter_condition: 过滤数据, kwargs
# server端使用orm filter查询数据,当前版本不支持order_by
API SCHEMA REGISTER
描述:主动注册API 描述到文档服务 配置schema_command 需要的参数
# settings 配置:
# 注册服务到 settings 下的 INSTALLED_APPS中
INSTALLED_APPS = [
"sparrow_cloud.apps.schema_command",
]
# 本服务配置
SERVICE_CONF = {
"NAME": "", # 本服务的名称
"SECRET": ""
}
# 调用方式:
python3 manage.py register_api_schema
# 使用说明:
# 1、view支持@api_view注解方式,view_class支持GenericApiView,GenericViewSet及其子类
# 2、接口描述书写在view函数或者view_class的__doc__上,建议使用markdown格式,展示更美观
接口描述代码示例
from rest_framework.decorators import api_view
from rest_framework.generics import RetrieveUpdateDestroyAPIView
from rest_framework import generics
from rest_framework.viewsets import ModelViewSet
@api_view(('GET',))
def get_user(request):
"""
### 获取用户信息 ####
请求参数 id, 用户id
返回
{
"user_id":"1", # 用户ID
"user_name":"Tom" # 用户名称
}
"""
class UserApiView(RetrieveUpdateDestroyAPIView, generics.GenericAPIView):
"""
get:
### 查询用户信息 ###
请求参数 id, 用户id
返回
{
"id":"1", # 用户ID
"user_name":"Tom" # 用户名称
}
delete:
### 删除用户 ###
路径参数
id 用户id
返回
404 用户id不存在
204 删除成功
"""
def put(self, request, *args, **kwargs):
"""
### 覆盖修改用户 ###
请求参数
{
"id":"1", # 用户ID
"user_name":"Tom" # 用户名称
}
返回 200 修改成功
"""
return super(UserApiView, self).put(self, request, *args, **kwargs)
class CarViewSet(ModelViewSet):
"""
list: 分页查询车辆
retrieve:获取车辆信息
update: 覆盖修改车辆
partial_update: 部分修改车辆
create: 创建车辆
destroy: 删除车辆
"""
DING_TALK
ding_talk client SDK (将消息发送到钉钉群或微信群)
# 使用:
from sparrow_cloud.dingtalk.sender import send_message
from sparrow_cloud.authorization.token import get_app_token
app_token = get_app_token()
send_message(msg="test", code_list=["test", "test1"], channel="dingtalk", message_type="text", token=app_token)
# 成功返回: {'code': 0, 'message': 'success'}
# 错误返回: HTTPException
# 参数说明:
# msg:消息内容
# code_list: 消息群code
# channel: 消息发送的渠道("wechat", "dingtalk"), 默认 dingtalk
# message_type:微信支持("text", "markdown")消息类型, 默认 text, 钉钉只支持text类型
ExceptionMiddleware
中间件 (捕获程序异常,并发送消息到企业微信)
# settings 配置
MIDDLEWARE = [
"sparrow_cloud.middleware.exception.ExceptionMiddleware"
]
ACCESS_CONTROL_VERIFY
access_control_verify decorators (访问控制验证)
# settings 配置
SERVICE_CONF = {
"NAME": "", # value为本服务的注册名称
"SECRET": "",
}
# 访问控制client端settings配置
# SC_SKIP_ACCESS_CONTROL: 是否跳过访问控制, True:跳过, false:不跳过
# 使用方式
# 函数视图使用方式示例
from sparrow_cloud.access_control.decorators import access_control_fbv
@api_view(('POST', 'GET', 'PUT', 'DELETE'))
@access_control_fbv("permission_example1") # 位置放到最下层
def test(request, *args, **kwargs):
return Response({"message": "ok"}, status=status.HTTP_200_OK)
# 类视图使用方式(全部方法都验证)
from sparrow_cloud.access_control.decorators import access_control_cbv_all
@access_control_cbv_all("permission_example1")
class ProductOperationList(generics.ListCreateAPIView):
"""请求方法:GET/POST"""
pass
# 类视图使用方式(根据method验证)
from sparrow_cloud.access_control.decorators import access_control_cbv_method
RESOURCE = {
"post": "permission_example1",
"get": "permission_example2"
}
@access_control_cbv_method(RESOURCE)
class ProductOperationList(generics.ListCreateAPIView):
"""请求方法:GET/POST"""
pass
get_user_token
get_user_token (获取用户token)
# 获取用户token
from sparrow_cloud.authorization.token import get_user_token
user_token = get_user_token(user_id="21424kvjbcdjslafds")
get_app_token
get_app_token (获取用户token)
# 获取app token
from sparrow_cloud.authorization.token import get_app_token
app_token = get_app_token()
Stargazers over time
python开发的软件sparrow-sparrow相关推荐
- 怎样利用Python开发天气预报软件,这份教程查收一下
今天要分享的是怎样利用Python开发天气预报软件,那话不多说,马上开始-- 1.首先建一个文件weather.py 2.创建窗口与显示窗口 3.为窗口设置标题与大小,保存运行如下图: 4.接下来创建 ...
- python开发pc软件_程序员带你十天快速入门Python,玩转电脑软件开发(二)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- python开发桌面软件-python适合开发桌面软件吗?
我个人感觉更适合开发各种管理系统.看我接下来举的例子你就明白了. OpenERP用的就是python.以下说的c/c++.java.python程序员,具有相同的开发能力.熟练程度.我们来做个比较: ...
- 在手机上进行python开发的软件推荐
有许多人对如何在手机上进行python开发感到很困惑,今天我就给大家推荐几个比较好的python开发软件. 一.QPython OH QPython真的是一款好的软件,它可以支持Python库的安装. ...
- python开发cs软件_开发cs软件 c python
python是开发BS还是CS的啊 展开全部 首先,语言火不火主要表现的是市场的需求,和语言本身好不好是有相关性,没有因果性. Python,我们七八年前就开始用了,当时有如醍醐灌顶,发现编程语言竟也 ...
- python开发的软件sparrow-自制编程语言:基于C语言 PDF 全书影印版
给大家带来的一篇关于C语言编程相关的电子书资源,介绍了关于编程语言.C语言方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小259.8 MB,郑钢编写,目前豆瓣.亚马逊.当当.京东等电子书 ...
- python开发的软件sparrow-黑客常用wifi蓝牙分析攻击工具,让你的设备陷入危险之中...
工具概述 Sparrow-wifi本质上一款针对下一代2.4GHz和5GHz的WiFi频谱感知工具,它不仅提供了GUI图形化用户界面,而且功能更加全面,可以代替类似inSSIDer和linssid之类 ...
- Ubuntu安装python开发必备软件
今天介绍一下在使用Linux系统进行Ubuntu开发时,一些软件的安装(包括python,IDE 开发工具pycham,sougou输入法的安装,google Chrome的安装,以及sublime文 ...
- [树莓派]基于Python开发树莓派软件流程
基于我个人习惯. 即使在树莓派上面,也习惯整一个可视化页面出来 环境说明 硬件 : 任意树莓派~我是 3B+ 和 4 OS : Raspberry Pi OS 开发语言 : Python 可视化UI开 ...
- 使用Python开发Android软件
kivy Kivy 是一个开源的 Python 框架(2011年),用于快速开发应用,实现各种当前流行的用户界面,比如多点 触摸等等. Kivy 可以运行于 Windows, Linux, MacOS ...
最新文章
- 《Oracle系列》:oracle job详解
- 矩阵对抗与系统补丁200911(第2期)下载
- IDEA设置使用git bash替换原有terminal(cmd)
- 该功能仅支持Android5.0,Android 5.0 android:elevation适用于View,但不适用于Button?
- 组件中使用_React四种组件通信详解
- Python dict() 函数
- ipfs 云服务器_IPFS加速云服务生机和分布式存储
- OpenCV添加中文(五)
- CPU 缓存一致性协议 MESI
- onkeydown-onkeypress-onkeyup
- mysql 给表填充数据库_mysql---为测试数据库填充大量数据
- 《python算法教程》个人学习心得之(一):归纳、递归与归简
- 基于sisotool极点配置PI参数及基于Plecs的三相电压源逆变器仿真
- QCC3024/QCC3020/QCC3034 蓝牙对讲
- 网络营销推广,微商引流48招技能
- 动态规划(dp)的总结
- 寒假第一周 总结与反思
- 使用MP4BOX GUI从MP4中分离(提取)字幕srt文件
- python从键盘输入10个整数算出奇数偶数的和_画出流程图,并编程实现: 从键盘上输入10个整数型的数值,分别统计奇数和偶数的个数。_概率论与数理统计答案_学小易找答案...
- 消费新品周报 | 奔富发布2019珍藏系列16款葡萄酒;欧乐-B推出AI电动牙刷
热门文章
- 2.Unity3d常用按键
- Python学习之==面向对象编程(一)
- python学习笔记(IO模型)
- vs调试显示16进制如何调节为10进制
- Javascript中匿名函数的多种调用方式
- 【转】ClickOnce证书
- 未能加载文件或程序集“AspNetPager”或它的某一个依赖项。拒绝访问。(异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))...
- 洛谷 2680 (NOIp2015) 运输计划
- 九. Python基础(9)--命名空间, 作用域
- Python学习之旅 —— 基础篇(二)数据类型、运算、while循环