如何实现后端开发

该博客主要展示了使用Django框架进行后端开发的一些关键操作,包括但不限于首页、开发指引和联系我们的视图函数实现,以及数据处理相关的方法,如获取Echarts图标数据和执行脚本。此外,还涉及到API接口的创建,例如查询业务信息、主机信息和执行脚本等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- coding: utf-8 --

import json
import os
from datetime import datetime
from datetime import date
from string import split
import requests
import xlrd
from django.db.models import Q
from django.http import JsonResponse, HttpResponse

from common.mymako import render_mako_context
from common.mymako import render_json
from conf.default import APP_ID, APP_TOKEN, BK_PAAS_HOST
from home_application.esb_helper import cc_search_biz, cc_search_set, run_fast_execute_script, cc_search_host,
get_job_instance_log, get_host_ip_list, cc_get_job_detail, run_execute_job, cc_fast_push_file, get_all_user
from models import CheckTemplate, CheckTask, CheckResult, CheckDetail, Test, ExamResult, ZdSx, DBManager, HostInfo

def home(request):
“”"
首页
“”"
id = request.GET.get(‘id’)
return render_mako_context(request, ‘/home_application/home.html’, {“id”: id})

def dev_guide(request):
“”"
开发指引
“”"
return render_mako_context(request, ‘/home_application/dev_guide.html’)

def contactus(request):
“”"
联系我们
“”"
return render_mako_context(request, ‘/home_application/contact.html’)

def check_task(request):
“”"
巡检任务
“”"
id = request.GET.get(‘id’)
return render_mako_context(request, ‘/home_application/check_task.html’, {“id”: id})

def template(request):
“”"
巡检模板
“”"
return render_mako_context(request, ‘/home_application/template.html’)

def check_message(request):
“”"
巡检模板
“”"
return render_mako_context(request, ‘/home_application/check_message.html’)

def exam(request):
“”"
考试
“”"
return render_mako_context(request, ‘/home_application/exam.html’)

def form(request):
“”"
图表
“”"
return render_mako_context(request, ‘/home_application/form.html’)

def test1(request):
“”"
联系1
“”"
return render_mako_context(request, ‘/home_application/test1.html’)

def DB_manage(request):
“”"
联系1
“”"
return render_mako_context(request, ‘/home_application/DB_manage.html’)

def beikao(request):
“”"
备考前端页面
“”"
return render_mako_context(request, ‘/home_application/aaa.html’)

def modal(request):
“”"
测试
“”"
return render_mako_context(request, ‘/home_application/modal.html’)

def getJson(request):
data = [
{‘time’: ‘1月1日’, ‘cpu’: 89.3, ‘men’: 96.4, ‘disk’: 88},
{‘time’: ‘1月2日’, ‘cpu’: 79.3, ‘men’: 88.4, ‘disk’: 78},
{‘time’: ‘1月3日’, ‘cpu’: 88.3, ‘men’: 78.4, ‘disk’: 84},
{‘time’: ‘1月4日’, ‘cpu’: 78.3, ‘men’: 63.4, ‘disk’: 76},
{‘time’: ‘1月5日’, ‘cpu’: 74.3, ‘men’: 94.4, ‘disk’: 79},
{‘time’: ‘1月6日’, ‘cpu’: 85.3, ‘men’: 87.4, ‘disk’: 98}
]
return render_json({“result”: True, “data”: data})

返回echarts 图标拼接格式数据

series 下面的type 表示需要渲染哪种图表类型

line:折线图 bar:柱状图

def getEchartsJson(request):
data = {
“xAxis”: [“1月”, “2月”, “3月”, “4月”, “5月”, “6月”, “7月”, “8月”, “9月”, “10月”, “11月”, “12月”],
“series”: [
{
“name”: “cpu”,
“type”: “line”,
“data”: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
},
{
“name”: “men”,
“type”: “line”,
“data”: [3.6, 6.9, 8.0, 21.4, 23.7, 78.7, 165.6, 152.2, 68.7, 28.8, 7.0, 8.3]
},
{
“name”: “disk”,
“type”: “bar”,
“data”: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
}
]
}
return render_json({“result”: True, “data”: data})

该方法一般不作修改

def search_set(request):
“”"
传递参数
:param 业务id biz_id
:param request:
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
data = cc_search_set(biz_id)
return JsonResponse(data)

def fast_execute_script(request):
“”"
:param request:
传递参数
:param 业务id biz_id,
ip_list = [
{
“bk_cloud_id”: 0,
“ip”: “10.92.190.214”
}
{
“bk_cloud_id”: 0,
“ip”: “10.92.190.215”
}
]
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
script_content = “”"
df -h
“”"
ip_list = [
{
“bk_cloud_id”: 0,
“ip”: “192.168.240.43”
}
]
data = run_fast_execute_script(biz_id, script_content, ip_list, request.user.username)
return JsonResponse(data)

def execute_job(request):
“”"
:param request:
传递参数
:param 业务id biz_id,
:param 作业模板id job_id,
:param ip列表 ip_list = [
{
“bk_cloud_id”: 0,
“ip”: “10.92.190.214”
}
{
“bk_cloud_id”: 0,
“ip”: “10.92.190.215”
}
]
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
job_id = request.GET.get(‘job_id’)
ip_list = [
{
“bk_cloud_id”: 0,
“ip”: “192.168.240.43”
}
]
data = run_execute_job(biz_id, job_id, ip_list, request.user.username)
return JsonResponse(data)

def get_log_content(request):
“”"
:param request:
传递参数
:param 业务id biz_id,
:param 作业实例id instance_id,
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
job_instance_id = request.GET.get(‘instance_id’)
result = get_job_instance_log(biz_id, job_instance_id, request.user.username)
data = {
“data”: result
}
return JsonResponse(data)

def job_detail(request):
“”"
:param request:
传递参数
:param 业务id biz_id,
:param 作业实例id instance_id,
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
job_id = request.GET.get(‘job_id’)
data = cc_get_job_detail(biz_id, job_id, request.user.username)
return JsonResponse(data)

def fast_push_file(request):
biz_id = request.GET.get(‘biz_id’)
file_target_path = “/tmp/”
target_ip_list = [{
“bk_cloud_id”: 0,
“ip”: “192.168.240.52”
},
{
“bk_cloud_id”: 0,
“ip”: “192.168.240.55”
}
]
file_source_ip_list = [{
“bk_cloud_id”: 0,
“ip”: “192.168.240.43”
}
]
file_source = ["/tmp/test12.txt", “/tmp/test123.txt”]
data = cc_fast_push_file(biz_id, file_target_path, file_source, target_ip_list, file_source_ip_list,
request.user.username)
return JsonResponse(data)

“”“test1"”"

def add_zd(request):
info = json.loads(request.body)
message = ZdSx()
message.type = ‘,’.join(info[‘type’])
message.name = info[‘name’]
message.zd_name = info[‘zd_name’]
if info[‘remark’]:
message.remark = info[‘remark’]
else:
message.remark = ‘’
message.save()
return render_json({‘result’: True})

def get_zd(request):
info = json.loads(request.body)
message = ZdSx.objects
if info[‘name’]:
message = message.filter(Q(name__icontains=info[‘name’]))
if info[‘type’]:
message = message.filter(Q(type__icontains=info[‘type’]))
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)

def del_zd(request):
info = json.loads(request.body)
ZdSx.objects.filter(id=info).delete()
return render_json({‘result’: True})

def add_db_manage(request):
info = json.loads(request.body)
message = DBManager()
message.type = info[‘type’]
message.name = info[‘name’]
message.biz_name = info[‘biz_name’]
message.port = info[‘port’]
message.host = info[‘host’]
message.instance_name = info[‘instance_name’]
message.user = info[‘user’]
message.zd_sx = info[‘zd_sx’]
message.save()
return render_json({‘result’: True})

def get_db_manage(request):
info = json.loads(request.body)
message = DBManager.objects
if info[‘biz_name’]:
message = message.filter(biz_name=info[‘biz_name’])
if info[‘host’]:
message = message.filter(host=info[‘host’])
if info[‘type’]:
message = message.filter(type=info[‘type’])
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)

def del_db_manage(request):
info = json.loads(request.body)
DBManager.objects.filter(id=info).delete()
return render_json({‘result’: True})

详情

def get_db_info(request):
info = json.loads(request.body)
message = DBManager.objects.filter(id=info).values()
return render_json({‘result’: True, ‘data’: message[0]})

“”“模拟考”""

def test(request):
info = request.GET
username = request.user.username
time = datetime.now().strftime(’%Y-%m-%d %H:%M:%S’)
info[‘username’] = username
info[‘time’] = time
return render_json({‘result’: True, “data”: info})

def add_check_template(request):
info = json.loads(request.body)
tempalte = CheckTemplate()
tempalte.name = info[‘name’]
tempalte.script = info[‘script’]
tempalte.val = info[‘val’]
tempalte.time = datetime.now().strftime(’%Y-%m-%d %H:%M:%S’)
tempalte.remark = info[‘remark’]
tempalte.biz_name = info[‘biz_name’]
tempalte.save()
return render_json({‘result’: True})

def get_check_template(request):
“”“查询工单”""
info = json.loads(request.body)
message = CheckTemplate.objects
if info[‘biz_name’]:
message = message.filter(biz_name=info[‘biz_name’])
if info[‘name’]:
message = message.filter(Q(name__icontains=info[‘name’]))
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)

def del_check_template(request):
id = json.loads(request.body)
CheckTemplate.objects.filter(id=id).delete()
return render_json({‘result’: True})

def add_check_task(request):
info = json.loads(request.body)
task_info = CheckTask()
task_info.type = info[‘type’]
task_info.name = info[‘task_name’]
task_info.time = datetime.now().strftime(’%Y-%m-%d %H:%M:%S’)
task_info.host = “,”.join(info[‘host’])
task_info.biz_id = info[‘biz_id’]
task_info.template_name = info[‘template_name’]
task_info.template_id = CheckTemplate.objects.filter(name=info[‘template_name’]).values()[0][‘id’]
task_info.save()
return render_json({‘result’: True})

def get_check_task(request):
“”“查询巡检任务”""
info = json.loads(request.body)
message = CheckTask.objects
if info[‘task_name’]:
message = message.filter(Q(name__icontains=info[‘task_name’]))
if info[‘task_type’]:
message = message.filter(type=info[‘task_type’])
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)

def check_result(request):
data = json.loads(request.body)
info = CheckTask.objects.filter(id=data[‘id’]).values()
messages = CheckResult.objects.filter(task_id=data[‘id’]).values()
for message in messages:
message[‘name’] = info[0][‘name’]
message[‘host’] = info[0][‘host’]
message_list = list(messages)
mes = {}
mes[‘message’] = message_list
return render_json(mes)

第二次模拟考

def get_app_info(request):
url = BK_PAAS_HOST + ‘/api/c/compapi/v2/bk_paas/get_app_info/’
kwargs = {
“bk_app_code”: “lukelee”,
“bk_app_secret”: “fca019b8-3d3a-4a5c-b94f-7eb27acf13e0”,
“bk_username”: “admin”,
“target_app_code”: “lukelee”,
“fields”: “bk_app_code;bk_app_name;bk_app_code;bk_app_name;introduction;creator;developer”
}
response = requests.post(url, json.dumps(kwargs), verify=False)
result = json.loads(response.content)
return render_json(result)

def get_exam_result(request):
messages = ExamResult.objects.all().values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)

“”“查询业务信息”""

def search_biz(request):
token = request.COOKIES[‘bk_token’]
data = cc_search_biz(token)
return JsonResponse({‘result’: True, ‘data’: data[‘data’][‘info’]})

“”“查询主机信息”""

def search_host(request):
data = request.body
biz_id = int(data)
token = request.COOKIES[‘bk_token’]
ip_list = []
result = cc_search_host(biz_id, ip_list, token)
hosts = []
for hostinfo in result[“data”][“info”]:
host = {}
host[“inner_ip”] = str(hostinfo[“host”][“bk_host_innerip”])
hosts.append(host)
print hosts
return render_json({‘result’: True, ‘hosts’: hosts})

“”“执行脚本”""

def script_execute(request):
“”“执行脚本”""
info = json.loads(request.body)
if info[‘type’] == ‘立即’:
biz_id = info[‘biz_id’]
li = info[‘host’]
tem = CheckTemplate.objects.filter(name=info[‘template_name’]).values()
script_content = tem[0][‘script’]
message = CheckResult()
message.task_id = CheckTask.objects.filter(name=info[‘task_name’]).values()[0][‘id’]
message.run_time = datetime.now().strftime(’%Y-%m-%d %H:%M:%S’)
message.save()
a = 0
b = 0
for ip in li:
hostip = {}
hostip[‘ip’] = ip
hostip[‘bk_cloud_id’] = 0
ip_list = []
ip_list.append(hostip)
result = run_fast_execute_script(biz_id, script_content, ip_list)
data = get_job_instance_log(biz_id, result[‘data’])
res = CheckResult.objects.filter(task_id=info[‘id’]).values()
detail = CheckDetail()
value = float(data[0][“log_content”][4:-2])
detail.value = value
a = a + 1
if value <= tem[0][‘val’]:
detail.result = ‘正常’
else:
detail.result = ‘异常’
b = b + 1
detail.result_id = res[0][‘id’]
detail.ip = ip
detail.save()
result = ‘本次共巡检%d台服务器,%d台存在异常’
CheckResult.objects.filter(task_id=info[‘id’]).update(detail=result)
return render_json({‘result’: True})

“”“查询所有登入用户”""

def all_username(request):
token = request.COOKIES[‘bk_token’]
data = get_all_user(token)
names = []
for info in data[‘data’]:
name = info[‘bk_username’]
names.append(name)
return render_json({‘result’: True, ‘data’: names})

“”“上传并处理excel文件”""

def upload_excel(request):
upload_file = request.FILES.get(‘file’)
data = upload_file.read()
with open("./static/" + upload_file.name, ‘wb+’) as file:
file.write(data)
data1 = xlrd.open_workbook("./static/" + upload_file.name)
table = data1.sheets()[0]
nrows = table.nrows # 行数
ncols = table.ncols # 列数
colnames = table.row_values(0) # 某一行数据
tpl_items = []
for rowindex in range(1, nrows):
row = table.row_values(rowindex)
if row:
kwargs = {}
for i in range(ncols):
kwargs[colnames[i]] = row[i]
tpl_items.append(kwargs)
data = {}
data[‘tpl_items’] = tpl_items
return JsonResponse({“result”: “success”, “data”: data}, safe=False)

“”“增删该查”""

def add_exam_detail(request):
info = json.loads(request.body)
message = Test()
message.biz_name = info[‘biz_name’]
message.test_name = info[‘test_name’]
message.test_type = info[‘test_type’]
message.person = info[‘person’]
message.tel = info[‘tel’]
message.date = info[‘date’]
message.site = info[‘site’]
message.test_state = ‘未开始’
message.exam_name = info[‘exam_name’]
message.save()
return render_json({‘result’: True})

获取全部信息或者选择

def get_exam_detail(request):
info = json.loads(request.body)
message = Test.objects
if info[‘test_name’]:
message = message.filter(Q(biz_name__icontains=info[‘test_name’]))
if info[‘site’]:
message = message.filter(Q(site__icontains=info[‘site’]))
if info[‘test_type’]:
message = message.filter(Q(test_type__icontains=info[‘test_type’]))
if info[‘person’]:
message = message.filter(Q(person__icontains=info[‘person’]))
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
data[‘val’] = len(message_list)
return render_json(data)

def del_exam_detail(request):
info = json.loads(request.body)
Test.objects.filter(id=info).delete()
return render_json({‘result’: True})

详情

def get_one_detail(request):
info = json.loads(request.body)
message = Test.objects.filter(id=info).values()
return render_json({‘result’: True, ‘data’: message[0]})

def upload(request):
myFile = request.FILES.get(“file”) # 获取上传的文件,如果没有文件,则默认为None
if not myFile:
return HttpResponse(“no files for upload!”)
destination = open(os.path.join("./static/", myFile.name), ‘wb+’) # 打开特定的文件进行二进制的写操作
for chunk in myFile.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
exam_name = myFile.name
return JsonResponse(exam_name, safe=False)

def test2(request):
result = run_execute_job(biz_id=‘2’, job_id=‘1008’)
res_list = get_job_instance_log(biz_id=‘2’, job_instance_id=result[‘data’][‘job_instance_id’])
for info in res_list:
date, mem_rate, disk_rate, cpu_rate = split(info[“log_content”], “|”)
cpu_rate = split(cpu_rate, “\n”)[0]
host_info = HostInfo()
host_info.ip = info[‘ip’]
host_info.cpu_rate = float(cpu_rate[:len(cpu_rate) - 1])
host_info.mem_rate = float(mem_rate[:len(mem_rate) - 1])
host_info.disk_rate = float(disk_rate[:len(disk_rate) - 1])
host_info.search_time = date
host_info.save()
return render_json({‘result’: True})

def search_host_info(request):
data1 = HostInfo.objects.filter(ip=‘192.168.240.43’).values()
data2 = HostInfo.objects.filter(ip=‘192.168.240.44’).values()
for info1 in data1:
info1[‘search_time’] = info1[‘search_time’].strftime(’%Y-%m-%d %H:%M:%S’)
for info2 in data2:
info2[‘search_time’] = info2[‘search_time’].strftime(’%Y-%m-%d %H:%M:%S’)
info_list1 = list(data1)
info_list2 = list(data2)
data = {}
data[‘info_list1’] = info_list1
data[‘info_list2’] = info_list2
return render_json(data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值