#### 服务器相关逻辑
from django.shortcuts import render, HttpResponse, redirect, reverse
from app01 import models
from django.http import JsonResponse
from app01.myforms.server import ServerModelForm
"""
标签渲染
数据校验
信息展示
forms组件的功能
modelform组件也可以完成上面的三个要求,并且功能更加的强大简单
"""
class ServerModelForm(ModelForm):
class Meta:
model = models.Server
fields = "__all__"
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
# print(self.fields) # OrderedDict([('hostname', <django.forms.fields.CharField object at 0x10c99c198>)])
# 给所有的字段加class属性
for k,field_obj in self.fields.items():
field_obj.widget.attrs['class'] = 'form-control'
# 查
def server_list(request):
# 获取服务器所有的数据展示到前端页面
server_queryset = models.Server.objects.all()
return render(request, 'server_list.html', locals())
# 增
def server_add(request):
# 1、先实例化modelform的额空对象
form_obj = ServerModelForm()
if request.method == 'POST':
# 3、校验数据
form_obj = ServerModelForm(data=request.POST)
# 4、判断是否合法
if form_obj.is_valid():
form_obj.save()
# 跳转到服务器的展示页
# return redirect('/server/list/') # 可以写路径
return redirect('server_list') # 可以写别名,但是如果出现有名无名分组的反向解析,还是得使用reverse
# 2、将该对象传给HTML文件
return render(request, 'form.html', locals())
# 改
def server_edit(request, edit_id):
edit_obj = models.Server.objects.filter(pk=edit_id).first()
"""
将对象传递给html页面,然后展示对象的所有信息
由于添加页面和编辑页面其实是一模一样的,所以我们直接用同一个页面
"""
# 1、生成一个待编辑的modelform对象
form_obj = ServerModelForm(instance=edit_obj)
if request.method == 'POST':
# 如果不把instance=obj加上那就是新增了
form_obj = ServerModelForm(data=request.POST, instance=edit_obj)
if form_obj.is_valid():
form_obj.save() # 编辑操作
return redirect('server_list')
return render(request, 'form.html', locals())
# 删
def server_delete(request, delete_id):
"""真正的删除应该只是修改字段,但是我们这里就直接删除了"""
models.Server.objects.filter(pk=delete_id).delete()
return JsonResponse({'statue':True})
针对删除功能,我们想做一个二次确认的过程(ajax结合sweetalert实现二次确认弹框)
<script>
function removeData(ths,sid) {
var res = confirm('你缺点要删除吗?');
{#alert(res) // 布尔值#}
if (res){
// 朝后端发送删除数据的请求
$.ajax({
url:'/server/delete/' + sid + '/',
type:'get',
success:function (args) {
// 删除成功之后 页面应该立刻展示删除之后的效果
// 1 直接刷新 不太好 设计到分页的情况不太好
{#window.location.reload()#}
if (args.status){
// 2 利用DOM操作实时删除
$(ths).parent().parent().remove()
}
}
})
}
}
</script>