python+django实现前后端的增删改查及数据交互

实现与前端界面对接数据库的增删改查,并记录注意事项和常见问题

1.增:实现前端对接数据库的增加操作

  • 首先html层的每个字段要加上它的name,视图层的逻辑要根据这个name取值,最后通过.save存入数据库,例如

    # 路径需要跳转的接口函数
    def sendView(request):
        # 拿到前端form表单的值,要通过post方法
        if request.method == 'POST':
            # 开始取到前端操作的值,其中“new_activity”命名随意,"models.send"是拿到相应的models模型
            new_activity = models.send(
                #通过下面的方法拿到值,括号内部是form表单内每一个字段的name
                party_name=request.POST.get("activity_name"),
                party_img = request.FILES.get("party_img"),
                party_s_time=request.POST.get("activity_start_time"),
                party_e_time=request.POST.get("activity_end_time"),
                party_area1 = request.POST.get("province"),
                party_area2 = request.POST.get("city"),
                party_lx = request.POST.get('leixing'),
                party_ny = request.POST.get('neirong')
            )
            #通过这个方法保存到数据库
            new_activity.save()
            print("添加的值为:",new_activity)
            #成功后重定向到括号内部的html界面
            return redirect('../../pc/sended_party')
        #失败继续返回这个界面
        return render(request,'send.html')
    

2.查:数据库取值并显示到静态页面上

  • 首先是views层的数据库取值

    # 显示html界面内容的函数入口
    def sendedView(request):
        print("走了取值逻辑")
        #数据库取值的话用的是get方法
        if request.method == 'GET':
            print("走了get方法")
            # 拿到数据库的字段信息数据
            all = models.send.objects.all().values('party_id','party_name','party_img')
            # 渲染到html界面
            return render(request,'sended.html',{'all':all})
    
  • 然后是前端界面的交互

    <form action="#" method="get">
    
        {% for i in all %}
    
            <tr>
            <td class="text-center">
            <input type="checkbox" name="checkbox">
            </td>
            <td class="text-center">
            <p>{{ i.party_id }}</p>
            </td>
            <td>
            <p>{{ i.party_name }}</p>
            </td>
            <td class="text-center">
            <img src="../media/{{ MEDIA_URL }}{{ i.party_img }}" alt="" id="img_id"  class="party_img">
            </td>
            </tr>
      	{% endfor %}
      	
      	</form>
    
  • 注意1:要用django的方法遍历views层取到的数据库数据

        {% for i in all %}
    	{% endfor %}
    
    
  • 注意2:form的表单方法要用get(因为是取值)

  • 注意3:图片的取值首先要配置url和settings

    • settings.py末尾要加上

      MEDIA_URL = '/media/'
      MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
      
    • url的配置末尾要加上一部分内容,例如

      from django.contrib import admin
      from django.urls import path, include
      from send_party_to_pc import views
      from django.conf.urls.static import static
      from django.conf import settings
      
      
      urlpatterns = [
          path('send_party/',views.sendView),
          path('modify_send_party/',views.modify_sendView),
          path('sended_party',views.sendedView)
      ]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
      
      
  • 注意4:html的图片路径根据需要变动
    在这里插入图片描述

  • 注意:时间的年/月/日 时:分:秒 的格式化,在html界面操作

    {{ i.party_s_time | date:"Y-m-d H:i:s" }}
    

3.改:点击前端修改按钮,进行数据库的修改:点击按钮会提供id,根据id修改:

  • 首先要将url配置上id

    path('modify_send_party/<id>',views.modify_sendView,name="edit_send_party"),
    
  • 接着就是配置按钮的a标签了

    <button type="button" class="btn btn-sm btn-success" style="margin-top: 10px" ><i class="icon-edit"></i>
    <a href="{% url 'edit_send_party' id=i.party_id  %}"  style="color: white" > 修改</a>
    </button>
    
  • 修改用的字段是update,以上面的获取的id为例,修改该id下的内容,views层的代码如下(因为是修改,所以首先要通过get方法拿到数据展示到界面上,这样方便客户在原基础上修改,下一步就是通过post方法进行数据更新和提交了):

    def modify_sendView(request,id):
        print("走了修改逻辑")
        print(id)
        #数据库取值的话用的是get方法
        if request.method == 'GET':
            print("走了get方法")
            # 拿到数据库的字段信息数据
            edit_all = 																			models.send.objects.all().values('party_name','party_s_time','party_e_time',   				'party_area1','party_area2','party_lx','party_ny').filter(party_id=id)
            # 渲染到html界面
            return render(request,'send1.html',{'edit_all':edit_all,'id':id})
        if request.method == 'POST':
            #根据返回的id更新除图片外的字段,其中"party_id"表示的数据库存入的id字段,"id"页面返回的id
            models.send.objects.all().filter(party_id=id).update(
            # 通过下面的方法拿到值,括号内部是form表单内每一个字段的name
                party_name=request.POST.get("activity_name"),         								party_s_time=request.POST.get("activity_start_time"),           					party_e_time=request.POST.get("activity_end_time"),
                party_area1=request.POST.get("province"),
                party_area2=request.POST.get("city"),
                party_lx=request.POST.get('leixing'),
                party_ny=request.POST.get('neirong'),
    
            )
            #"party_pic"随便命名即可,他的作用是接收一下需要更新的字段信息
            #通过"models.send.objects.get"拿到models层的send函数,给定一个限制,即"party_id=id",目的是更改这个条件下的这一行内部的party_img
            party_pic = models.send.objects.get(party_id=id)
            #拿到限定条件"party_id=id"下的图片字段"party_img",替换为界面修改的图片"request.FILES.get("party_img")"
            party_pic.party_img = request.FILES.get("party_img")
            # 最后保存一下即可
            party_pic.save()
            #取到更改后的值显示到界面上
            all = models.send.objects.all().values('party_id', 'party_name', 'party_img',
                                                   'party_s_time', 'party_e_time',
                                                   'party_area1', 'party_area2', 														'party_lx', 'party_ny')
            print("筛选的id的值是",id)
            return render(request,"sended.html",{"all":all})
    
  • 注意1:函数参数的地方要加上id,这个id要用于获得界面的id

在这里插入图片描述

  • 注意2:django的update是不支持图片的更新操作的,想要用到图片的更新操作需要用到save()方法(我的上面代码就是分开更新的),详情请看我的另外一篇博客:

    [https://blog.csdn.net/Q893448322/article/details/107556303]:

4.删:界面的删除操作,实时对接数据库:和修改的整体思想一致,也是通过id这个桥段建立链接的

  • 首先还是配置删除操作的url:

        path('del_send_party/<id>',views.del_sendedView,name="del_send_party"),
    
  • 接着将这个url的name字段添加到“删除”按钮的a标签上面:

    <button type="button" class="btn btn-sm btn-danger" style="margin-top: 10px"><i class="icon-trash" ></i>
        <a href="{% url 'del_send_party' id=i.party_id  %}"  style="color: white" > 删除</a>
    </button>
    
  • 接着就是要走views里面的删除逻辑了,用delete

    def del_sendedView(request,id):
        #这里用到的是get方法
        if request.method == 'GET':
            print("走了删除逻辑!!!1")
            # 根据返回的id删除该id的内容,其中"party_id"表示的数据库存入的id字段,"id"页面返回的id
            models.send.objects.all().filter(party_id=id).delete()
            #删除后还要拿到数据库的所有剩余信息
            all = models.send.objects.all().values('party_id', 'party_name', 'party_img',
                                                   'party_s_time', 'party_e_time',
                                                   'party_area1', 'party_area2', 														'party_lx', 'party_ny')
            print("筛选的id的值是", id)
            #继续渲染到该界面,此时展示的就是删除某条数据后的结果
            return render(request, "sended.html",{'all':all})
        return HttpResponse("删除失败")
    

5.至此整理了在给客户做项目的过程中遇到的知识点、注意事项等,记录一下。

毕设没思路看这里https://blog.csdn.net/Q893448322/article/details/107642349?spm=1001.2014.3001.5501

❤如果对您有帮助,赏口饭吃 ❤ 谢谢老板!

  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值