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相关推荐

  1. 怎样利用Python开发天气预报软件,这份教程查收一下

    今天要分享的是怎样利用Python开发天气预报软件,那话不多说,马上开始-- 1.首先建一个文件weather.py 2.创建窗口与显示窗口 3.为窗口设置标题与大小,保存运行如下图: 4.接下来创建 ...

  2. python开发pc软件_程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  3. python开发桌面软件-python适合开发桌面软件吗?

    我个人感觉更适合开发各种管理系统.看我接下来举的例子你就明白了. OpenERP用的就是python.以下说的c/c++.java.python程序员,具有相同的开发能力.熟练程度.我们来做个比较: ...

  4. 在手机上进行python开发的软件推荐

    有许多人对如何在手机上进行python开发感到很困惑,今天我就给大家推荐几个比较好的python开发软件. 一.QPython OH QPython真的是一款好的软件,它可以支持Python库的安装. ...

  5. python开发cs软件_开发cs软件 c python

    python是开发BS还是CS的啊 展开全部 首先,语言火不火主要表现的是市场的需求,和语言本身好不好是有相关性,没有因果性. Python,我们七八年前就开始用了,当时有如醍醐灌顶,发现编程语言竟也 ...

  6. python开发的软件sparrow-自制编程语言:基于C语言 PDF 全书影印版

    给大家带来的一篇关于C语言编程相关的电子书资源,介绍了关于编程语言.C语言方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小259.8 MB,郑钢编写,目前豆瓣.亚马逊.当当.京东等电子书 ...

  7. python开发的软件sparrow-黑客常用wifi蓝牙分析攻击工具,让你的设备陷入危险之中...

    工具概述 Sparrow-wifi本质上一款针对下一代2.4GHz和5GHz的WiFi频谱感知工具,它不仅提供了GUI图形化用户界面,而且功能更加全面,可以代替类似inSSIDer和linssid之类 ...

  8. Ubuntu安装python开发必备软件

    今天介绍一下在使用Linux系统进行Ubuntu开发时,一些软件的安装(包括python,IDE 开发工具pycham,sougou输入法的安装,google Chrome的安装,以及sublime文 ...

  9. [树莓派]基于Python开发树莓派软件流程

    基于我个人习惯. 即使在树莓派上面,也习惯整一个可视化页面出来 环境说明 硬件 : 任意树莓派~我是 3B+ 和 4 OS : Raspberry Pi OS 开发语言 : Python 可视化UI开 ...

  10. 使用Python开发Android软件

    kivy Kivy 是一个开源的 Python 框架(2011年),用于快速开发应用,实现各种当前流行的用户界面,比如多点 触摸等等. Kivy 可以运行于 Windows, Linux, MacOS ...

最新文章

  1. 《Oracle系列》:oracle job详解
  2. 矩阵对抗与系统补丁200911(第2期)下载
  3. IDEA设置使用git bash替换原有terminal(cmd)
  4. 该功能仅支持Android5.0,Android 5.0 android:elevation适用于View,但不适用于Button?
  5. 组件中使用_React四种组件通信详解
  6. Python dict() 函数
  7. ipfs 云服务器_IPFS加速云服务生机和分布式存储
  8. OpenCV添加中文(五)
  9. CPU 缓存一致性协议 MESI
  10. onkeydown-onkeypress-onkeyup
  11. mysql 给表填充数据库_mysql---为测试数据库填充大量数据
  12. 《python算法教程》个人学习心得之(一):归纳、递归与归简
  13. 基于sisotool极点配置PI参数及基于Plecs的三相电压源逆变器仿真
  14. QCC3024/QCC3020/QCC3034 蓝牙对讲
  15. 网络营销推广,微商引流48招技能
  16. 动态规划(dp)的总结
  17. 寒假第一周 总结与反思
  18. 使用MP4BOX GUI从MP4中分离(提取)字幕srt文件
  19. python从键盘输入10个整数算出奇数偶数的和_画出流程图,并编程实现: 从键盘上输入10个整数型的数值,分别统计奇数和偶数的个数。_概率论与数理统计答案_学小易找答案...
  20. 消费新品周报 | 奔富发布2019珍藏系列16款葡萄酒;欧乐-B推出AI电动牙刷

热门文章

  1. 2.Unity3d常用按键
  2. Python学习之==面向对象编程(一)
  3. python学习笔记(IO模型)
  4. vs调试显示16进制如何调节为10进制
  5. Javascript中匿名函数的多种调用方式
  6. 【转】ClickOnce证书
  7. 未能加载文件或程序集“AspNetPager”或它的某一个依赖项。拒绝访问。(异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))...
  8. 洛谷 2680 (NOIp2015) 运输计划
  9. 九. Python基础(9)--命名空间, 作用域
  10. Python学习之旅 —— 基础篇(二)数据类型、运算、while循环