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 ...
随机推荐
- SpringBoot + redis + @Cacheable注解实现缓存清除缓存
一.Application启动类添加注解 @EnableCaching 二.注入配置 @Bean public CacheManager cacheManager(RedisTemplate redi ...
- jquery 单选框 radio是否选择问题
业务需求是当用户勾选中的时候删除数据,取消勾选的时候数据取消 //单选事件,获取到每行数据ID $('.checkItem').change(function(){ // checkItem是给rad ...
- 34 java 文件过滤 FileFilter
package com.da.tool.util; import org.apache.commons.io.filefilter.RegexFileFilter; import java.io.Fi ...
- js给元素添加样式[addClass][hasClass]
function addClass(el, className) { if (hasClass(el, className)) { return } let newClass = el.classNa ...
- 一文解读SDN (转)
一. 什么是SDN? SDN字面意思是软件定义网络,其试图摆脱硬件对网络架构的限制,这样便可以像升级.安装软件一样对网络进行修改,便于更多的APP(应用程序)能够快速部署到网络上. 如果把现有的网络看 ...
- JAVA版StarDict星际译王简单实现
由胡正开发的星际译王是Linux平台上很强大的一个开源的翻译软件(也有Windows版本的)支持多种词库.多种语言版本.尤其词库设计比较合理.之前看到一篇博文<星际译王词库应用-自制英汉词典&g ...
- Java8使用Stream优雅地处理集合
说明 集合和数组是我们经常会用到的数据结构,在jdk1.8之前,集合和数组的处理并不是很便捷.但是到了JDK1.8之后,使用Stream处理集合会使代码变得更加的简洁明了.作为一名开发者,其实很有必要 ...
- Restful API及接口安全
一.简介 REST(Representational State Transfer,具体状态转移),是一种基于HTTP协议.URI(统一资源定位符).JSON和XML这些现有协议与标准的,针对网络应用 ...
- Duilib自定义控件
新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com 在公司二期项目中为了将谷歌内核嵌入到duilib中,采用了自定义duilib控件的方法,由于也是第一次用duili ...
- 提高 Java 代码性能的各种技巧
Java 6,7,8 中的 String.intern – 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String.intern 方法的,以及这个方法在 Java 7 以及 Java 8 ...