实现与前端界面对接数据库的增删改查,并记录注意事项和常见问题
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
❤如果对您有帮助,赏口饭吃 ❤ 谢谢老板!