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 ...
随机推荐
- Java基础 -3.2
逻辑运算符 三目(赋值)运算符 合理地利用三目运算可以避免一些大范围的程序编写 三目运算是一种所谓的赋值运算的处理 它是需要设置一个逻辑关系的判断之后才可以进行的赋值操作 基本语法: 关系运算?关系满 ...
- Python学习第十八课——继承,接口继承等
1.继承:字面意思 # 继承 : 字面意思 class father: pass class grandfather: pass class children(father): # 单继承 pass ...
- PCSearch需要管理员权限,开机自启
1.添加Windows服务,并设为自动启动: 2.通过服务启动AutoStartSevice.exe,通过AutoStartSevice.exe运行AutoStart.bat,通过AutoStart. ...
- STM32的程序升级
IAP基础参考http://www.eeworld.com.cn/mcu/2018/ic-news112042038.html https://blog.csdn.net/tq384998430/ar ...
- luogu P2754 [CTSC1999]家园
本题是分层图最大流问题,相当于按时间拆点,每个当前点向下一点的下一时间层连点,每一层有n+1个点 #include<bits/stdc++.h> using namespace std; ...
- 课堂测试用javaweb写一个注册界面,并将数据保存到后台数据库(部分完成)
今天我到现在为止,也只完成了数据库的连接,还没有写前台的javascript的检查输入的代码,打算周四前完成. 代码如下: package Dao; import java.sql.Connectio ...
- Linux设备树学习
1.概念 设备树用于实现驱动代码与设备信息相分离.驱动代码只负责处理驱动的逻辑而关于设备的具体信息存放到设备树文件中.(dts文件,编译后为dtb文件).一个dts文件对应一个ARM的machine, ...
- PhpStorm 10.0.1破解激活步骤
1.下载破解补丁 链接:https://pan.baidu.com/s/1S4JVKiaFnCZG01MpDPaAAA 密码:c6x6 放到phpstorm安装目录下的lib文件夹下: C:\soft ...
- Unity 公告板 Billboard
创建脚本如下 Billboard.cs using UnityEngine; using System.Collections; public class Billboard : MonoBehavi ...
- Java泛型与数组深入研究
Java中的泛型与数组平时开发用的很多,除了偶尔遇到"NullPointerException"和"IndexOutOfBoundsException"一般也不 ...