1.models.py

ASSET_STATUS = (
(str(1), u"使用中"),
(str(2), u"未使用"),
(str(3), u"故障"),
(str(4), u"其它"),
) ASSET_TYPE = (
(str(1), u"物理机"),
(str(2), u"虚拟机"),
(str(3), u"容器"),
(str(4), u"网络设备"),
(str(5), u"安全设备"),
(str(6), u"其他")
) class Idc(models.Model):
ids = models.CharField(u"机房标识", max_length=255, unique=True)
name = models.CharField(u"机房名称", max_length=255, unique=True)
address = models.CharField(u"机房地址", max_length=100, blank=True)
tel = models.CharField(u"机房电话", max_length=30, blank=True)
contact = models.CharField(u"客户经理", max_length=30, blank=True)
contact_phone = models.CharField(u"移动电话", max_length=30, blank=True)
jigui = models.CharField(u"机柜信息", max_length=30, blank=True)
ip_range = models.CharField(u"IP范围", max_length=30, blank=True)
bandwidth = models.CharField(u"接入带宽", max_length=30, blank=True)
memo = models.TextField(u"备注信息", max_length=200, blank=True) def __str__(self):
return self.name class Meta:
verbose_name = u'数据中心'
verbose_name_plural = verbose_name class Host(models.Model):
hostname = models.CharField(max_length=50, verbose_name=u"主机名", unique=True)
ip = models.GenericIPAddressField(u"管理IP", max_length=15)
idc = models.ForeignKey(Idc, verbose_name=u"所在机房", on_delete=models.SET_NULL, null=True, blank=True)
other_ip = models.CharField(u"其它IP", max_length=100, blank=True)
asset_no = models.CharField(u"资产编号", max_length=50, blank=True)
asset_type = models.CharField(u"设备类型", choices=ASSET_TYPE, max_length=30, null=True, blank=True)
status = models.CharField(u"设备状态", choices=ASSET_STATUS, max_length=30, null=True, blank=True)
os = models.CharField(u"操作系统", max_length=100, blank=True)
vendor = models.CharField(u"设备厂商", max_length=50, blank=True)
up_time = models.CharField(u"上架时间", max_length=50, blank=True)
cpu_model = models.CharField(u"CPU型号", max_length=100, blank=True)
cpu_num = models.CharField(u"CPU数量", max_length=100, blank=True)
memory = models.CharField(u"内存大小", max_length=30, blank=True)
disk = models.CharField(u"硬盘信息", max_length=255, blank=True)
sn = models.CharField(u"SN号 码", max_length=60, blank=True)
position = models.CharField(u"所在位置", max_length=100, blank=True)
memo = models.TextField(u"备注信息", max_length=200, blank=True) def __str__(self):
return self.hostname

2.forms.py

from django import forms
from .models import Host
from django.forms.widgets import * class HostForm(forms.ModelForm):
class Meta:
model = Host
exclude = ("id",)
widgets = {
'hostname': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;', 'placeholder': u'必填项'}),
'ip': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;', 'placeholder': u'必填项'}),
'other_ip': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'group': Select(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'asset_no': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'asset_type': Select(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'status': Select(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'os': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'vendor': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'up_time': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'cpu_model': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'cpu_num': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'memory': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'disk': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'sn': TextInput(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'idc': Select(attrs={'class': 'form-control', 'style': 'width:530px;'}),
'position': TextInput(
attrs={'class': 'form-control', 'style': 'width:530px;', 'placeholder': u'物理机写位置,虚机写宿主'}),
'memo': Textarea(attrs={'rows': 4, 'cols': 15, 'class': 'form-control', 'style': 'width:530px;'}),
}

3.urls.py

url(r'^host_get', views.host_get, name="host_get")

4.views.py

from t1.models import Idc, Host
from t1.forms import HostForm def host_get(request):
if request.method == "GET":
h_form = HostForm()
idc_obj = Idc.objects.all().values("name")
print(idc_obj)
return render(request, "t1/host_get.html", locals()) elif request.method == "POST":
h_form = HostForm(request.POST)
if h_form.is_valid():
print(h_form.cleaned_data)
# Host.objects.create(**h_form.cleaned_data)
h_form.save()
return HttpResponse("数据添加成功")
else:
info_error = h_form.errors # <ul class="errorlist"><li>hostname<ul class="errorlist"><li>具有 主机名 的 Host 已存在。</li></ul></li></ul>
print(info_error.as_json())
# msg_error = info_error.as_json()
msg_error = info_error
return render(request, "msg_error.html", locals())

5.html

#msg_error.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <span style="color: red;">{{ msg_error }}</span> </body>
</html> #host_get.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form action=" {% url 'host_get' %}" method="POST">
{{ h_form.as_p }}
<input type="submit" value="提交">
{% csrf_token %}
</form>
</body>
</html>

5.测试

Django ModelForm 小实例1的更多相关文章

  1. Python自学笔记-Django分页器小实例

    from django.core.paginator import Paginator iter = 'abcdefhijklmnopqw' paginator = Paginator(iter,4) ...

  2. django进阶-小实例

    前言: 这篇博客对上篇博客django进阶作下补充. 一.效果图 前端界面较简单(丑),有两个功能: 从数据库中取出书名 eg: 新书A 在form表单输入书名,选择出版社,选择作者(多选),输入完毕 ...

  3. django Form 表单 总结与小实例

    开头寄语: 这几天一直在看Django的form表单验证,然后想对于这几天要有个总结. 首先,先来看一下找到的一个form表单验证的流程: 验证过程 流程详解1. 函数full_clean()依次调用 ...

  4. Django 小实例S1 简易学生选课管理系统 11 学生课程业务实现

    Django 小实例S1 简易学生选课管理系统 第11节--学生课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,学生需要拥 ...

  5. Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现

    Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...

  6. Django 小实例S1 简易学生选课管理系统 5 实现注册功能

    Django 小实例S1 简易学生选课管理系统 第5节--实现注册功能 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新的额外知识点: ...

  7. Django 小实例S1 简易学生选课管理系统 12 CSS样式完善

    Django 小实例S1 简易学生选课管理系统 第12节--CSS样式完善 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块的逻辑代码到这里 ...

  8. Django 小实例S1 简易学生选课管理系统 9 创建课程模型(model)

    Django 小实例S1 简易学生选课管理系统 第9节--创建课程模型(model) 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 对于课程模块, ...

  9. Django 小实例S1 简易学生选课管理系统 8 CSS样式优化

    Django 小实例S1 简易学生选课管理系统 第8节--CSS样式优化 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 前面的几节下来,用户模块基 ...

随机推荐

  1. linux/cmd中python路径导入ModuleNotFoundError: No module named 'xxx'

    在linux或者直接在cmd中运行python文件时 会遇到导包错误的情况ModuleNotFoundError: No module named 'xxx’由于不在pycharm中 所以这里不能将上 ...

  2. [HAOI2017] 新型城市化

    给出的图中恰包含2个团,则图的补图为一个二分图,其最大独立集为原图的最大团. 我们知道,二分图的最大独立集=V-最小顶点覆盖,最小顶点覆盖=最大匹配. 问题转化为:计算删去后最大匹配减小的边集. 所以 ...

  3. appium键盘事件

    driver.pressKeyEvent(66); 附录 keycode 电话键 KEYCODE_CALL 拨号键 5KEYCODE_ENDCALL 挂机键 6KEYCODE_HOME 按键Home ...

  4. c++11并行、并发与多线程编程

    首先,我们先理解并发和并行的区别. 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行. 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并 ...

  5. Python学习的路上,Anaconda送你一双遮天神翼

    一.背景 ​ 最近在学习python,发现在本地搭建python环境的时候,要是想要同时搭建不同python版本的环境,就比较麻烦,很容易就出现冲突了,很是头疼.然后光明就出现这山重水复疑无路的时候, ...

  6. 配置IIS的负载均衡

    在大型Web应用系统中,由于请求的数据量过大以及并发的因素,导致Web系统会出现宕机的现象,解决这一类问题的方法我个人觉得主要在以下几个方面: 1.IIS 负载均衡. 2.数据库 负载均衡. 3.系统 ...

  7. Apollo 1 融合 Spring 的三个入口

    前言 Spring 作为 Java 世界非官方标准框架,任何一个中间件想要得到良好的发展,必须完美支持 Spring 的各种特性,即:无缝融入 Spring. Apollo 作为分布式配置中心,服务于 ...

  8. music-api-next:一款支持网易、xiami和QQ音乐的JS爬虫库

    音乐,无界 让音乐无界 如果你苦于挑选一个全方位.多平台.简便易用的音乐爬虫库,music-api-next是不二选择. 特性: 支持网易.虾米和QQ三大主流音乐平台 支持音乐关键词搜索 支持音乐链接 ...

  9. 手把手教你实现Confluence6.7.1安装与破解

    Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki. 一.准备工作 下载confluence6.7.1 wget https://downloads.atlassian ...

  10. linux学习笔记-grub模式引导进入系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.设置系统启动盘所在位置 set root='hd0,msdosx' 2.手动加载内核驱动程序并配置root目录位置 linu ...