代码发布服务器管理


#### 服务器相关逻辑

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>
原文地址:https://www.cnblogs.com/yafeng666/p/12710487.html