python前后端不分离结合modelFrom实现的增删改查

#在django的view文件的中代码如下

# 使用modleform比用from更高级-继承ModelForm这部分代码可以单独抽出来用封装继承的思路实现 这里是为了方便
class departModelfrom(ModelForm):
    # 为属性增加额外的验证
    title=forms.CharField(min_length=3,label='部门名称')
    # 为所有属性增加同样的样式
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            print(field)
            field.widget.attrs = {'class': 'form-control', 'placeholder': field.label}
    class Meta:
        model=Department
        fields=['title']

        # 用上面__init__封装的方法代替下面的方法
        # widgets={
        #     'title':forms.TextInput(attrs={'class':"form-control"})
        # }

# 查询和搜索一起处理
def showindex(request):
    # 搜索
    dict_serch = {}
    value = request.GET.get('q', '')
    if value:
        dict_serch['title__contains'] = value
    # sercher_result = models.Department.objects.filter(**dict_serch).order_by('-id')
    # print(sercher_result)

    # 查询
    object = models.Department.objects.filter(**dict_serch).order_by('id')
   

    return  render(request,'depart_infor.html',{"queryset":object,'value':value})
# 添加
def derpart_add(request):
    if request.method=='GET':
        model = departModelfrom()
        return render(request, 'depart_add.html',{'contenx1':model})
    model=departModelfrom(data=request.POST)
    print(model)
    if model.is_valid():
        model.save()
        return  redirect('../depart/')
    else:
        print(model.errors)
    return render(request,'depart_add.html',{"contenx1":model})

# 删除
def depart_userdelete(request,id):
    object= models.Department.objects.filter(id=id).delete()
    return redirect('../depart/')

# 结合modelForm实现编辑功能
def depart_update(request,id):
    object = models.Department.objects.filter(id=id).first()
    if request.method=="GET":
     form=departModelfrom(instance=object)
     return  render(request,'depart_eidtor.html',{'form':form})
    form = departModelfrom(data=request.POST,instance=object)
    if request.method=="POST":
        if form.is_valid():
            form.save()
            return redirect('../../depart/')
    return  render( request,'depart_infor.html',{'form':form})

在url中配置路由如下:

需要注意的是这里使用了二级路由,具体情况根据自己情况灵活运用


from django.urls import path
from newdjangoapp import views
urlpatterns = [
path('depart/',views.showindex,name='showindex'),
path('<int:id>/depart_update/',views.depart_update,name='depart_update'),

path('depart_userdelete/<int:id>',views.depart_userdelete,name='depart_userdelete'),

path('derpart_add/',views.derpart_add,name='derpart_add'),
path('depart_sercher/',views.depart_sercher,name='depart_sercher')

    ]

前端页面采用了Bootstrap框架,快速建站的目的,需要说明了的是。此处是将公共组件独立出来,其他页面是需要继承其页面即可,由于页面较多,这里只将继承逻辑演示一下

公共组件页面: 

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    <link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">

{% block css %}{% endblock %}
<style>
    .navbar{
        border-radius: 0;
    }
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light container">
  <a class="navbar-brand" href="#">sales管理系统</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="{% url 'showindex' %}">部门列表<span class="sr-only"></span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="{% url 'booklist' %}">用户列表</a>
      </li>
      <li class="nav-item">
        <a class="nav-link">书籍列表</a>
      </li>
          <li class="nav-item">
{#        <a class="nav-link" href="{% url 'datacollection' %}">数据统计</a>#}
      </li>
    </ul>

  </div>
</nav>



{% block content %}

    {% endblock %}



{% block js %}

{% endblock %}

<script type="text/javascript" src="{% static 'jquery.min.js'%}"></script>
<script type="text/javascript" src="{% static 'js/bootstrap.min.js'%}"></script>
<script type="text/javascript" src="{% static 'js/bootstrap.js'%}"></script>
</body>
</html>

继承页面-这里注意查看继承规则-即头部引用文件处

{% extends 'depart_index.html' %}
{% load static %}
{% block css %}


{% endblock %}
{% block content %}
    <div class="panel panel-default">
  <!-- Default panel contents -->
  <div class="panel-heading container"><span class="glyphicon " aria-hidden="true"></span><a href="{% url 'derpart_add' %}" STYLE="text-decoration: none">添加部门</a>

       <div style="float:right;">
      <form method="get">
      <input type="text" title="搜索" name="q" value="{{ value }}"><input type="submit" value="搜索"></form></div>
  </div>



  <!-- Table -->
  <table class="table container">
    <tr>
        <td>序号</td>
        <td>部门名称</td>

        <td>操作</td>
    </tr>
      {% for items in queryset %}
      <tr>
        <td>{{ items.id }}</td>
        <td>{{ items.title}}</td>

        <td><a id="delt" href="../depart_userdelete/{{ items.id}}" style="text-decoration: none">删除</a>
            <a href="../{{ items.id }}/depart_update/" style="text-decoration: none">修改</a>
{#            <a href="../{{ items.id }}/modelupdate/" style="text-decoration: none">修改</a>#}
        </td>

    </tr>

       {% endfor %}
  </table>

      <div class="container">
        <ul class="pagination">

           {{ page_string }}


        </ul>
      </div>
   </div>


{% endblock %}



{% block js %}

{% endblock %}

实现效果

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赖同学啊

跟着大师走,路不会太差

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值