django-腾讯paas-appengine阅读
1 重写View基类的dispatch函数
api/baseview.py
在一个post请求中,在header中,CONTENT_TYPE为application/json,然后在request.body中发送json格式的数据(exp:{"mode":"test","agent_ip":"192.168.1.1","web_port":8000,"agent_port":12345}),这时,在django的request参数中,它是一个bytes数据。
在CBV中,View类都实现了dispatch函数,我们可以通过重写dispatch方法来自定义处理请求(参考https://www.jianshu.com/p/8c23d72878d9)
这个dispatch就把这个bytes数据转化为dict数据,赋值给request.json_data。
class BaseView(View): def dispatch(self, request, *args, **kwargs):
if request.method == "POST":
if "application/json" in self.request.META["CONTENT_TYPE"]:
if request.body:
request.json_data = json.loads(request.body)
else:
request.json_data = {}
return super(BaseView, self).dispatch(request, *args, **kwargs)
2 自定义异常
api/response.py
class FailJsonResponse(JsonResponse):
def __init__(self, message, **kwargs):
data = {}
if kwargs:
data.update(kwargs) # high priority
data.update({
"result": False,
"message": message
}) if "data" not in data:
data["data"] = {} super(FailJsonResponse, self).__init__(data)
3 对app做健康检查
api/utils.py
def agent_header(sid, token):
return {
"Content-Type": "application/json",
"X-ID": str(sid),
"X-TOKEN": str(token)
} def check_agent_health(bk_server):
resp = http.http_request(
method="GET",
url="http://%s:%s/v1/app/healthz" % (bk_server.ip_address, bk_server.ip_port),
headers=agent_header(bk_server.s_id, bk_server.token)
)
if resp.get("error") != 0:
raise Exception("%s agent return not zero" % bk_server.ip_address)
return resp
4 使用UUIDField
api/models.py
UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit ).
python中的uuid4函数是随机数生成UUID。用来生成服务id和token
class BkServer(models.Model):
name = models.CharField(u'名称', max_length=20)
s_id = models.UUIDField(u'服务ID', default=uuid.uuid4, editable=False)
token = models.UUIDField(default=uuid.uuid4, editable=False)
5 写JsonResponse的子类来处理json信息
django-腾讯paas-appengine阅读的更多相关文章
- Django 2.0 Release note阅读简记
最前面就是大家都知道的这个版本开始只支持py3.4+,而且下一个大版本就不支持3.4,再就是建议所有插件开始放弃1.11 1.最惊艳的变化,就是URL配置正则表达式的简化,旧的: url(r'^art ...
- django 中文入门文档
django中文入门文档:阅读地址
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第二部分(Page 7)
编写你的第一个 Django app,第二部分(Page 7)转载请注明链接地址 本教程上接前面的教程.我们会配置数据,创建你的第一个 model,并对Django 自动生成的 admin 站点进行快 ...
- The Django Book
The Django Book Table of contents 2.0, English -> Chinese Django book 2.0 的中文翻译. 最近更新 - 贡献者 方便自己也 ...
- Django blog项目知识点总结
数据库操作部分 当我们在Django项目中的models.py下写好创建表的代码后.为了创建好这些数据库表,我们再一次请出我的工程管理助手 manage.py.激活虚拟环境,切换到 manage.py ...
- django admin日期变为可以修改
Django - 日期.时间字段 阅读目录 DateTimeField.auto_now DateTimeField.auto_now_add admin中的日期时间字段 如何将创建时间设置为“默 ...
- <Django> MVT三大块之Models(模型)
1.ORM(对象-关系-映射)---面向对象,不需要面向SQL语句 根据对象的类型生成表结构 将对象.列表的操作,转化成SQL语句 将SQL语句查询的结果转化成对象.列表 目的:实现数据模型与数据库的 ...
- 第十三篇Django Logging配置样例
第十三篇Django Logging配置样例 阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { 've ...
- 使用Jenkins来构建Docker容器
使用Jenkins来构建Docker容器(Ubuntu 14.04) 当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了.听起来貌似很简单,dua ...
- GNU/Linux与开源文化的那些人和事
一.计算机的发明 世上本无路,走的人多了,就有了路.世上本无计算机,琢磨的人多了--没有计算机,一切无从谈起. 三个人对计算机的发明功不可没,居功至伟.阿兰·图灵(Alan Mathison Tur ...
随机推荐
- Redis 事务在 SpringBoot 中的应用 (io.lettuce.core.RedisCommandExecutionException: ERR EXEC without MULTI)
我们在 SpringBoot 中使用 Redis 时,会引入如下的 redis starter <dependency> <groupId>org.springframewor ...
- mybatis利用generator自动生成的代码
/** * 排序规则 */ protected String orderByClause; /** * 去重规则 */ protected boolean distinct; /** * where条 ...
- Eth合约攻击续
合同代表一个非常简单的游戏:谁给它发送了比当前奖金还大的数量的以太,就成为新的国王.在这样的事件中,被推翻的国王获得了新的奖金,但是如果你提交的话那么合约就会回退,让level重新成为国王,而我们的目 ...
- 随机游走模型(Random Walk)
给定了一个时间顺序向量\(z_1,...,z_T\),rw模型是由次序r来定义的,\(z_t\)仅取决于前\(t-r\)个元素.当r = 1时为最简单的RW模型. 给定了向量的其他元素,\(z_t\) ...
- ch8 基于浮动的布局(两列浮动布局、三列浮动布局)
CSS布局技术的根本是3个基本概念:定位.浮动.外边距操纵. 只需要设置希望定位的元素的宽度,然后将它们向左或向右浮动.因为浮动的元素不再占据文档流中的任何空间,它们就不再对包围他们的块框产生任何影响 ...
- MySQL 之基础操作及增删改查等
一:MySQL基础操作 使用方法: 方式一: 通过图型界面工具,如 Navicat,DBeaver等 方式二: 通过在命令行敲命令来操作 SQL ( Structure query language ...
- express框架安装及中间件原理
本文主要介绍express中间件的原理,来应对面试. 1.安装express及初始化: npm install express-generator -g => express expre ...
- primecoin在ubuntu16.04上部署服务:
primecoin在ubuntu16.04上部署服务: 一.下载Tomcat,Jdk,primecoin(公司内部文件) 注意Tomcat版本需要高于Jdk的,不然会报错. 二.把它们都解压到你要的安 ...
- 分页插件 layui.laypage 的用法
参考 layui.laypage 官方文档 https://www.layui.com/demo/laypage.html 第一步下载插件 (注意不能只引入引入 layui.css和layui.js ...
- Day1-Luogu-1631
题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数A_iAi, ...