django ORM 多对多的主机管理
django ORM 多对多的主机管理
主要是对ORM 不是太好理解。后端一点都不是很难写,就是前段 的ajax 和JQ 很烦人,上班的时候写的发毛
进入主题吧=。-
表的结构如下:
from django.db import models # Create your models here. class Host(models.Model): # 主机表 nid=models.AutoField(primary_key=True) hostname=models.CharField(max_length=32,db_index=True) ip=models.GenericIPAddressField(db_index=True) port=models.IntegerField() b=models.ForeignKey("Business",to_field='id',on_delete=models.CASCADE,) class Business(models.Model): # 业务线 caption=models.CharField(max_length=32) code=models.CharField(max_length=32,null=True,default='SA') class Application(models.Model): #应用表 name=models.CharField(max_length=32) r=models.ManyToManyField("Host") # # class HosttoApp(models.Model): # # hobj 是对host的表建立关系 aobj 是跟app这个表建立关系 # # hobj 1~10 aobj 1~2 # hobj=models.ForeignKey("Host",to_field="nid",on_delete=models.CASCADE,) # aobj=models.ForeignKey("Application",to_field="id",on_delete=models.CASCADE,) #
这次用的是django 提供的第三张表的方式
核心代码很简单
from django.shortcuts import render,redirect,HttpResponse # Create your views here. from app01 import models import json def test_ajax(request): # 返回的是字典格式 ret={'status':True,'error':None,'data':None} try: # 获取客户端发送的post 数据 h = request.POST.get('hostname') i = request.POST.get('ip') p = request.POST.get('port') b = request.POST.get('b_id') print(h) #判断host 是否为空和大于5 if h and len(h) > 5: print("ja") # 新建 models.Host.objects.create(hostname=h, ip=i, port=p, b_id=b) return HttpResponse('OK') else: # 写入到字典中 ret['status']=False ret['error']="太短了" except Exception as e: # 返回字典 ret['status'] = False ret['error'] = "请求错误" return HttpResponse(json.dumps(ret)) def business(request): # 业务线的获取 v1=models.Business.objects.all() # QuerySet #[ ] #[obj1(id,caption,code),obj2(id,caption,code),obj3(id,caption,code)] v2 = models.Business.objects.all().values('id','caption') # QuerySet # [ ] # [{'id':1,'caption':xxx}] v3 = models.Business.objects.all().values_list('id', 'caption') # QuerySet # [ ] # [(1,运维),(2.开发),(3,测试)] return render(request,'business.html',{'v1':v1,'v2':v2,'v3':v3}) def host(requests): # host 页面的返回数据 if requests.method=='GET': v1=models.Host.objects.filter(nid__gt=0) v2 = models.Host.objects.filter(nid__gt=0).values('nid','hostname','ip','port','b_id','b__caption','b__code') v3=models.Host.objects.filter(nid__gt=0).values_list('nid','hostname','ip','port','b_id','b__caption','b__code') b_list=models.Business.objects.all() return render(requests,'host.html',{'v1':v1,'v2':v2,'v3':v3,'b_list':b_list}) # POST 的返回数据 elif requests.method=='POST': h=requests.POST.get('hostname') i=requests.POST.get('ip') p=requests.POST.get('port') b=requests.POST.get('b_id') print(h,i,p,b) #host 页面新建数据 models.Host.objects.create(hostname=h,ip=i,port=p,b_id=b) return redirect('/host/') def app(request): if request.method=='GET': app_list=models.Application.objects.all() # for row in app_list: # print(row.name) # print(row.r.all()) host_list=models.Host.objects.all() return render(request,'app.html',{'app_list':app_list,'host_list':host_list}) elif request.method=='POST': app_name=request.POST.get('app_list') host_list=request.POST.getlist('host_list') print(app_name,host_list) obj=models.Application.objects.create(name=app_name) obj.r.add(*host_list) return redirect('/app') def ajax_add_app(request): ret = {'status': True, 'error': None, 'data': None} try: app_name=request.POST.get('app_list') host_list= request.POST.getlist('host_list') print(app_name) if app_name and host_list: obj = models.Application.objects.create(name=app_name) obj.r.add(*host_list) else: ret['status'] = False ret['error'] = "不能为空" return HttpResponse(json.dumps(ret)) except Exception as e: # 返回字典 ret['status'] = False ret['error'] = "请求错误" return HttpResponse(json.dumps(ret)) def ajax_submit_edit(request): ret = {'status': True, 'error': None, 'data': None} try: app_name = request.POST.get('app_list2') host_list = request.POST.getlist('host_list') aid=request.POST.get('app_id3') print(app_name, host_list, aid) if app_name and host_list: if app_name==aid: obj=models.Application.objects.get(id=aid) obj.r.set(host_list) else: obj = models.Application.objects.get(id=app_name) obj.r.set(host_list) else: ret['status'] = False ret['error'] = "不能为空" return HttpResponse(json.dumps(ret)) except Exception as e: # 返回字典 ret['status'] = False ret['error'] = "请求错误" return HttpResponse(json.dumps(ret)) ''' def userdel(request,app_id): ret = {'status': True, 'error': None, 'data': None} try: if app_id: obj=models.Application.objects.filter(id=app_id).first() if obj.name: print(obj.name,obj.r.all()) except Exception as e: # 返回字典 ret['status'] = False ret['error'] = "请求错误" return HttpResponse('OK') ''' def userdel(request,nid): ret = {'status': True, 'error': None, 'data': None} try: if nid: obj = models.Application.objects.filter(id=nid).first() if obj.name: obj.r.clear() models.Application.objects.filter(id=nid).delete() else: ret['status'] = False ret['error'] = "删除失败" except Exception as e: # 返回字典 ret['status'] = False ret['error'] = "请求错误" return redirect('/app') def userinfo(request,nid): app=models.Application.objects.filter(id=nid).first() if app: app_name=app.name host=app.r.all() return render(request,'userinfo.html',{'app_name':app_name,'host':host}) else: return render(request, '404.html')
页面操作如下:
可以实现最简单的增删查改
添加:
删除:
编辑
还有一个主机的这种的没写:只是 写了一个最基本的
源代码如下:
http://www.o2oxy.cn/wp-content/uploads/2018/07/多对多管理系统.zip