背景说明
python:3.6.5
Django:2.1.1
Project:Kubernetes
,文件夹路径就是/django/Kubernetes/
App:createyaml
,文件夹路径就是/django/Kubernetes/createyaml
前文地址:https://rorschachchan.github.io/2018/09/13/Django%E5%88%B6%E4%BD%9C%E5%89%8D%E7%AB%AF%E9%A1%B5%E9%9D%A2%E7%94%9F%E6%88%90yaml%E6%96%87%E4%BB%B6%E4%B9%8B%E6%94%B9%E8%BF%9B%E7%89%88/
sqlite3的用法
sqlite
是django默认的数据库,如果只是存一点简单的数据,那么它是足够胜任的。如果在django的APP文件夹里配置了models.py
而且执行了python manage.py makemigrations
和python manage.py migrate
的话,那么在project的文件夹里是会生成db.sqlite3
这个文件的。至于如何命令行操作sqlite和python调用sqlite,请去看:http://blog.51cto.com/zengestudy/1904680 ,里面说的已经很清楚了。
不过要注意的是execute
方法得到的是一个对象,是看不到具体的sql结果。还需要fetchall
方法进一步的解析,这样得到的是一个列表,然后取其中的具体元素,如图:

paradin
使用唯一标识符
由于yaml的参数是从前端传入的,如果同时有多个人传入数据,那么后端脚本在取参数就会出现错误:多个人在传入不同的数据之后得到的结果却是一样的,即服务器接收到的最后那个数据返回的结果。为了不出现这样的混乱,所以我们就要引入唯一标识符保证每个人得到都是他们的结果。
在数据库里是有一个主键的也就是id
,它是django生成数据库的时候自带的private key
,每一个id都是唯一的,既然唯一那肯定就是我们选做唯一标识符的首选。至于怎么用它,其实就是在原有的views.py
上做一点小手脚。如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| from django.shortcuts import render from django.http import HttpResponse from .models import parameter #引入同级的modes.py里的parameter类
def create_yaml(request): return render(request,'create_yaml.html') #这个页面是用来输入各值
def get_yaml(request): if request.method == 'POST': #如果是post传参,那么就记录下来 apiVersion = request.POST.get('apiVersion','v1') kind = request.POST.get('kind','RC') name = request.POST.get('name') replicas = request.POST.get('replicas','1') labels_app = request.POST.get('labels_app',None) containers_name = request.POST.get('containers_name',None) containers_image = request.POST.get('containers_image',None) containerPort1 = request.POST.get('containerPort1',None) containerPort2 = request.POST.get('containerPort2',None) containers_name2 = request.POST.get('containers_name2',None) containers_image2 = request.POST.get('containers_image2',None) containerPort2_1 = request.POST.get('containerPort2_1',None) containerPort2_2 = request.POST.get('containerPort2_2',None) signer = request.POST.get('signer', 'Micheal Jackson') else: return HttpResponse('404')
Parameter = parameter() #将parameter实例化 Parameter.apiVersion = apiVersion #把刚刚从前端得到的值对应赋值 Parameter.kind = kind Parameter.name = name Parameter.replicas = replicas Parameter.labels_app = labels_app Parameter.containers_name = containers_name Parameter.containers_image = containers_image Parameter.containerPort1 = containerPort1 Parameter.containerPort2 = containerPort2 Parameter.containers_name2 = containers_name2 Parameter.containers_image2 = containers_image2 Parameter.containerPort2_1 = containerPort2_1 Parameter.containerPort2_2 = containerPort2_2 Parameter.save() #保存修改
yaml = parameter.objects.get(id=Parameter.id) #通过object.get方法是得到保存的所有值,但是我们只要本次的值,也就是id与private key一致的 return HttpResponse('api版本:%s yaml类型:%s yaml名称:%s 副本数量:%s yaml所属APP:%s 容器名称:%s 容器镜像名:%s' % (yaml.apiVersion,yaml.kind,yaml.name,yaml.replicas,yaml.labels_app,yaml.containers_name,yaml.containers_image))) #输出部分刚输入的值到页面,检查一下是否正确
|
urls.py
如下:
1 2 3 4 5 6 7 8 9
| from django.contrib import admin from django.urls import path from createyaml import views
urlpatterns = [ path('admin/', admin.site.urls), path(r'create_yaml/', views.create_yaml), path(r'get_yaml/', views.get_yaml), ]
|
启动django,在前端页面测试一下看看是否得到的结果就是本次输入的结果,如图:

paradin
可以看到,返回的页面正确的输出了本次各个参数!剩下还有三部分:
- 做一个python脚本,把脚本加工的结果返回到前端;
- 用css/js把界面加工一下;
- 加入javascript,在前端输入的时候判断输入值是否合法;
参考资料
http://blog.51cto.com/lannyma/1735751
http://www.liujiangblog.com/course/django/152
https://www.jianshu.com/p/46188b39eae5