基于form表单的增删改查
项目urls.py
from django.conf.urls import url
from host import views
urlpatterns = [
url(r'list$',views.List.as_view()),
url(r'add$', views.Add.as_view()),
url(r'update/(\d+)/', views.Update.as_view()),
url(r'del', views.Del.as_view()),
]
form_class.py
from django.forms import Form
from django.forms import fields
from django.forms import widgets
from django.core.exceptions import ValidationError
from host import models
class HostForm(Form):
hostname=fields.CharField(
required=True,
widget=widgets.TextInput(attrs={'class': 'c1'})
)
cpu=fields.CharField(
required=True,
widget=widgets.TextInput(attrs={'class': 'c1'})
)
mem=fields.CharField(
required=True,
widget=widgets.TextInput(attrs={'class': 'c1'})
)
speed=fields.CharField(
required=True,
widget=widgets.TextInput(attrs={'class': 'c1'})
)
network=fields.CharField(
required=True,
widget=widgets.TextInput(attrs={'class': 'c1'})
)
lei=fields.CharField(
required=True,
widget=widgets.TextInput(attrs={'class': 'c1'})
)
source_id=fields.ChoiceField(
required=True,
choices=[],
widget=widgets.Select(attrs={'class': 'c1'})
)
def __init__(self,*args, **kwargs):
super(HostForm,self).__init__(*args, **kwargs)
self.fields['source_id'].choices=models.Source.objects.values_list('id','name')
views.py
from django.shortcuts import render,redirect,HttpResponse
from django.views import View
from host import models
from utils import form_class
class List(View):
def post(self,request,*args,**kwargs):
pass
def get(self, request, *args, **kwargs):
host_lsit=models.Host.objects.all()
return render(request,'host.html',locals())
class Add(View):
def post(self,request,*args,**kwargs):
form=form_class.HostForm(data=request.POST)
if form.is_valid():
models.Host.objects.create(**form.cleaned_data)
return redirect('/host/list')
else:
return render(request,'add.html',locals())
def get(self, request, *args, **kwargs):
form=form_class.HostForm()
return render(request,'add.html',locals())
class Update(View):
def post(self,request,reg):
form=form_class.HostForm(data=request.POST)
if form.is_valid():
models.Host.objects.filter(id=reg).update(**form.cleaned_data)
return redirect('/host/list')
else:
return render(request,'add.html',locals())
def get(self, request, reg):
obj=models.Host.objects.filter(id=reg).first()
form=form_class.HostForm(
initial={'hostname':obj.hostname,
'cpu':obj.cpu,
'mem':obj.mem,
'speed':obj.speed,
'eth1_network':obj.eth1_network,
'ecsname':obj.ecsname,
'source_id':obj.source_id,
}
)
return render(request,'update.html',locals())
class Del(View):
def post(self,request,*args,**kwargs):
pass
def get(self, request, *args, **kwargs):
get_id=int(request.GET.get('id'))
models.Host.objects.filter(id=get_id).delete()
return redirect('host/list')
add.html/update.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>增加页面</title>
</head>
<body>
<form method="post" novalidate role="form">
{% csrf_token %}
<p id="hostname">阿里云主机名:{{ form.hostname }}{{ form.errors.hostname.0 }}</p>
<p id="cup">CPU:{{ form.cpu }}{{ form.errors.cpu.0 }}</p>
<p id="mem">内存/G:{{ form.mem }}{{ form.errors.mem.0 }}</p>
<p id="speed">带宽/M:{{ form.speed }}{{ form.errors.speed.0 }}</p>
<p id="ip">IP:{{ form.network }}{{ form.errors.network.0 }}</p>
<p id="lei">来源类型:{{ form.lei }}{{ form.errors.lei.0 }}</p>
<p id="source_id">所属区域:{{ form.source_id }}{{ form.errors.source_id.0 }}</p>
<input type="submit" value="提交">
</form>
</body>
</html>