Django前端输入变量通过内部脚本返回前端展示之二

背景说明

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 makemigrationspython 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

可以看到,返回的页面正确的输出了本次各个参数!剩下还有三部分:

  1. 做一个python脚本,把脚本加工的结果返回到前端;
  2. 用css/js把界面加工一下;
  3. 加入javascript,在前端输入的时候判断输入值是否合法;

参考资料

http://blog.51cto.com/lannyma/1735751
http://www.liujiangblog.com/course/django/152
https://www.jianshu.com/p/46188b39eae5

-------------This article is over!Thanks for reading!-------------
感谢您请我喝咖啡!(o´ω`o)
0%