北京建网站价格优帮云培训课程网站建设,哪个平台最划算?
摘要:北京建网站价格优帮云,培训课程网站建设,wordpress教程文档下载,做水产有什么网站在上一章结尾我们了解到如采用前后端开发分离的架构模式开发,后端几乎不负责任何展现界面的工作,
北京建网站价格优帮云,培训课程网站建设,wordpress教程文档下载,做水产有什么网站在上一章结尾我们了解到如采用前后端开发分离的架构模式开发#xff0c;后端几乎不负责任何展现界面的工作#xff0c;只负责对数据进行管理 #xff0c;对数据的管理主要体现在#xff1a; #xff08;增加、修改、删除、列出 #xff09;具体的接口参考大佬的文档BYSM… 在上一章结尾我们了解到如采用前后端开发分离的架构模式开发后端几乎不负责任何展现界面的工作只负责对数据进行管理 对数据的管理主要体现在 增加、修改、删除、列出 具体的接口参考大佬的文档BYSMS系统 API 接口 1.0 | 白月黑羽 本章只做练习 一、添加应用、路由分发、api规划 接口文档明确说明了这是针对管理员用户的请求我们在前面创建过一个paas的应用专门处理paas相关的请求所以我们可以再为管理员用户专门创建一个应用mgr来处理相关的 请求 1、创建 mgr应用目录
python manage.py startapp mgr 2、添加处理请求模块 和 url 路由 前面我们都是直接把函数写到应用的views.py文件里面来处理http请求的后续如果我们需要添加的函数数量非常多就不方便了我们可以定义多个函数文件来处理这种请求比如定义cluster.py 来处理集群相关的请求sql.py 处理数据库方面的请求 接口文档案例
GET /api/mgr/customers?actionlist_customer HTTP/1.1#请求参数
http 请求消息 url 中 需要携带如下参数是action 填写的值为list_customer
通过接口文档可以看到对资源的增删改查操作都是同一个URL(/api/mgr/customers)
而不同的请求操作使用了不同的方法 GET POST PUT DELETE
3、路由分发函数 Django 的 url路由功能 不支持 根据 HTTP 请求的方法 和请求体里面的参数 进行路由如下 path(customers/, app.views.list_customer, methodget),
path(customers/, app.views.add_customer, methodpost), 碰到这种情况我们可以编写一个函数去将所有请求做条件判断转发给不同的函数处理 按照接口文档的url我们需要将/api/mgr/开头的请求都交给mgr的应用路由处理 vi Django_demo/Django_demo/urls.py
#添加路由分支,将api/mgr/ 转交给mgr应用下的子路由
path(api/mgr/, include(mgr.urls)), vi Django_demo/Django_demo/settings.py
INSTALLED_APPS [simpleui,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,paas,mgr, #添加
] 我们添加了应用配置和路由方向了下面我们应该去定义api所在的文件和具体的路由配置 定义api函数
vi Django_demo/mgr/k8s.py
import jsonfrom django.http import JsonResponse
from django.shortcuts import renderdef dispatcher(request): # 将请求参数统一放入request 的 params 属性中方便后续处理# 判断应用的请求模式为GET时,取出请求后续的内容if request.method GET:request.params request.GET# POST/PUT/DELETE 请求 参数 从 request 对象的 body 属性中获取elif request.method in [POST,PUT,DELETE]:# 根据接口POST/PUT/DELETE 请求的消息体都是 json格式request.params json.loads(request.body)# 根据不同的action分派给不同的函数进行处理action request.params[action]if action list_customer:return listcustomers(request) #查看elif action add_customer:return addcustomer(request) #新增elif action modify_customer:return modifycustomer(request) #修改elif action del_customer:return deletecustomer(request) #删除else:return JsonResponse({ret: 1, msg: 不支持该类型http请求})def listcustomers(request):return JsonResponse({ret: 1, msg: 展现数据})
def addcustomer(request):return JsonResponse({ret: 1, msg: 添加数据})
def modifycustomer(request):return JsonResponse({ret: 1, msg: 修改数据})
def deletecustomer(request):return JsonResponse({ret: 1, msg: 删除数据}) 定义mgr下的子路由
vi Django_demo/mgr/urls.py
from django.urls import pathfrom .k8s import dispatcher
urlpatterns [path(customers/, dispatcher), #定义路由
]4、测试验证
http://127.0.0.1:8000/api/mgr/customers/?actionlist_customer 二、列出数据 列出也就是查看增删改查里面的查询http 响应消息 body 中 数据以json格式存储下面是最开头的接口文档中常见的接口数据返回格式 {ret: 0,retlist: [{ClusterName: acp-r1-1,id: 1,NodeSum: 100,PrometheusAddress: 192.168.1.1},{ClusterName: 123123,id: 4,NodeSum: 123123,PrometheusAddress: 123123}]
} 从上面格式中看出我们无需将数据库中获取的数据 转化为 供浏览器展示的HTML在前后端分离中需要展示页面是前端的事情我们只需要把数据提交上去即可 1、添加数据模型
vi Django_demo/mgr/models.py
#直接拷贝之前paas的
from django.db import modelsclass PaasInfo(models.Model):# 集群名称ClusterName models.CharField(max_length200)# node主机数量NodeSum models.CharField(max_length200)# prometheus地址PrometheusAddress models.CharField(max_length200) 2、修改列出数据函数
vi Django_demo/mgr/k8s.py
#先导入之前paas使用的模型,也就是链接paas用的数据库
from paas.models import PaasInfodef listcustomers(request):# 返回一个 QuerySet 对象 包含所有的表记录qs PaasInfo.objects.values()# 将 QuerySet 对象 转化为 list 类型# 否则不能 被 转化为 JSON 字符串retlist list(qs)return JsonResponse({ret: 0, retlist: retlist})
3、访问测试
import requests,pprintresponse requests.get(http://127.0.0.1:8000/api/mgr/customers/?actionlist_customer)pprint.pprint(response.json()) 返回
{ret: 0,retlist: [{ClusterName: acp-r1-1,NodeSum: 100,PrometheusAddress: 192.168.1.1,id: 1},{ClusterName: 123123,NodeSum: 123123,PrometheusAddress: 123123,id: 2}]
}三、添加数据 添加数据也就是新增数据传输数据格式如下 {action:add_customer,data:{ClusterName:X4-scp-1-1,NodeSum:222,PrometheusAddress:192.168.1.2}
}
1、修改添加函数
vi Django_demo/mgr/k8s.py
def addcustomer(request):info request.params[data]# 从请求消息中 获取要添加客户的信息# 并且插入到数据库中# 返回值 就是对应插入记录的对象record PaasInfo.objects.create(ClusterNameinfo[ClusterName] ,NodeSuminfo[NodeSum] ,addressinfo[PrometheusAddress])return JsonResponse({ret: 0, id:record.id})
2、关闭 Csrf 新创建的项目 Django 缺省会启用一个 CSRF 跨站请求伪造 安全防护机制。 在这种情况下 所有的Post、PUT 类型的 请求都必须在HTTP请求头中携带用于校验的数据 为了简单起见我们先临时取消掉CSRF的 校验机制等以后有需要再打开 vi Django_demo/Django_demo/settings.py
MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,#将下面这行注释掉# django.middleware.csrf.CsrfViewMiddleware, django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware,django.middleware.clickjacking.XFrameOptionsMiddleware,
]
3、测试 随便建一个新文件用于测试请求url vi main.py
import requests,pprint# 构建添加 客户信息的 消息体是json格式
payload {action:add_customer,data:{ClusterName:abc,NodeSum:133,PrometheusAddress:192.168.1.2}
}# 发送请求给web服务
response requests.post(http://127.0.0.1:8000/api/mgr/customers/,jsonpayload)
pprint.pprint(response.json()) 上面执行完毕后可以在python上直接get 或者直接浏览器访问下面地址即可下面有运行了两次所以会有两条相同的数据 http://127.0.0.1:8000/api/mgr/customers?actionlist_customer 四、修改数据
1、请求格式
{action:modify_customer,id: 3,newdata:{ClusterName:gfs-r3-1,NodeSum:5000,PrometheusAddress:192.168.1.21}
}
2、添加修改函数
def modifycustomer(request):# 从请求消息中 获取修改客户的信息# 找到该客户并且进行修改操作customerid request.params[id]newdata request.params[newdata]print(customerid,newdata)try:# 根据 id 从数据库中找到相应的客户记录customer PaasInfo.objects.get(idcustomerid)except PaasInfo.DoesNotExist:return {ret: 1,msg: fid 为{customerid}的客户不存在}#注意修改每个判断的3个变量if ClusterName in newdata:customer.ClusterName newdata[ClusterName]if NodeSum in newdata:customer.NodeSum newdata[NodeSum]if PrometheusAddress in newdata:customer.PrometheusAddress newdata[PrometheusAddress]# 注意一定要执行save才能将修改信息保存到数据库customer.save()return JsonResponse({ret: 0})3、测试
vi main.py
import requests,pprint# 构建添加 客户信息的 消息体是json格式
payload {action:modify_customer,id: 3,newdata:{ClusterName:gfs-r3-1,NodeSum:5000,PrometheusAddress:192.168.1.21}
}# 发送请求给web服务
response requests.post(http://127.0.0.1:8000/api/mgr/customers/,jsonpayload)
pprint.pprint(response.json()) 忘截图了上面是把id为3的值进行了修改 五、删除数据
1、数据格式
{action:del_customer,id: 6
} 2、添加删除函数
def deletecustomer(request):customerid request.params[id]try:# 根据 id 从数据库中找到相应的客户记录customer PaasInfo.objects.get(idcustomerid)except PaasInfo.DoesNotExist:return {ret: 1,msg: fid 为{customerid}的客户不存在}# delete 方法就将该记录从数据库中删除了customer.delete()return JsonResponse({ret: 0})
3、测试
vi main.py
import requests,pprint# 构建添加 客户信息的 消息体是json格式
payload {action:del_customer,id: 4
}# 发送请求给web服务
response requests.post(http://127.0.0.1:8000/api/mgr/customers/,jsonpayload)
pprint.pprint(response.json())
