ajax前后端分离

本周内容

​ 今日内容

​ ajax结合sweetalert实现删除按钮动态效果

​ bulk_create批量插入数据

​ 自定义分页器

​ 多对多三种创建方式

​ 明日内容

​ forms组件

​ cookies与session操作

​ django中间件

​ 跨站请求伪造csrf

​ auth模块

​ BBS小作业

​ FBV

上周内容回顾

​ orm查询优化

​ only与defer

​ only方法返回的是一个queryset对象,本质就是列表套数据对象

​ 该对象内只含有only括号内锁指定的属性(其他属性也可以获取但是要重新走数据库)

​ defer与之相反

​ select_related与prefetch_related

​ select_related

​ 括号内只能放外键字段,而且外键字段只能是一堆一,一对多

​ 内部是联表操作,会将外键关联的表与当前表直接拼接起来,然后再执行查询操作,返回的也是一个queryset,该数据对象获取当前表中的数据或者关联表中的数据 都不会再走数据库

​ prefetch_related

​ 括号内外键字段 类型全部支持,内部是子查询 但是给用户的感觉象是联表操作,返回的结果也是一个queryset 该数据对象获取当前表中的数据或者关联表中的数据 都不会再走数据库

​ 第一个方法耗时再联表操作

​ 第二个方法耗时再查询次数

​ choices参数

​ 主要用在一些可以明确给出所有可能性的地方

​ 如 性别,学历,婚否等

​ 先提前定义好对应关系

​ 再通过字段的choices参数来指定关系

​ MTV与MVC模型

​ models templates views

​ models views controller

​ django自称是mtv实际上还是mvc

​ ajax

​ 异步提交

​ 局部刷新

​ ajax基本语法结构

​ 我们学的是基于jquery封装好的ajax

​ 所以使用的时候一定要确保jquery正常导入

​ $.ajax({

​ url:'',

​ type:'',

​ data:{''},

​ success:function(data){}

​ })

​ 前后端数据编码格式

​ urlencoded

​ 数据格式username=jason&password=123

​ django针对符合urlencoded编码格式的数据,并会自动解析饼帮你放到request.POST总

​ formdata

​ form表单发送文件必须要指定的编码模式

​ 该变啊格式既可以发文件也可以发普通键值对

​ django会自动识别,讲内部符合urlencoded编码格式的数据自动解析,并放大到request.POST中

​ 讲文件类型的数据,自动解析放到request.FILES中

		application/json

​ 目前只有ajax可以发送json格式的数据 form表单是不支持的

​ ajax如何发送json格式的数据

​ 1.需要新建一个参数

​ contentType:'application/json'

​ 2.需要讲数据序列化成json格式的字符串

​ JSON.stringify({})

​ ajax发送文件(不单单可以发送文件也可以发普通键值对)

​ 1.先要生成一个内置对象

​ var myFormData =new FormData();

​ 2.你可以不停添加数据

​ myformdata.append('name','value')

​ 如歌获取inout文件标签内的文件数据

​ var myfileObj=$('input[type='file']')[0].file[0];

​ MyFormData.appendd('name2',myfileObj)

3.需要额外两个指定的参数

​ contentType:false, #不指定任何编码 对象自带编码 django能够识别

​ processData:false #浏览器不要对数据进行任何处理

django可以识别对象中的普通键值对和文件对象,然后分别放到不同的方法POST和FILES中

ajax与sweetalert参考代码即可

​ CV打法结合二次开发

bulk_create批量插入数据

​ for i in range (1000):

​ models.book.object.create(title='第%本书'%i)

​ (这里不复刻了,就是说这条指令运行很慢,花了六百多毫秒)

​ book_list=[]

​ for i in rage(10000):

​ book_list.append(models.book(title='第%本书'%i))

​ models.Book.object.bulk_create(book_list)

​ """两者差距很大"""

自定义分页器

​ 代码不需要掌握,只需要掌握推倒思路

要求你掌握的是自定义分页器的使用方法

后端

​ 自定义分页器的使用

book_queryset=models.book.objects.all()#你想要分页展示的数据

current_page=request.GET.get('page',1)#获取当前页

all_count=book_queryset.count()#看一共有多少条数据

page_queryset=book_queryset[page_obj.start:page_obj.end]

return render (request.'index.html',locals())

前端

​ {% for book in page_queryset %} 讲页面上原本的queryset全部还成切片之后的queryset即可

<p>{{book}}</p>

{% endfor %}

{{page_obj.page_html|safe}}告诉这是安全的可以读取

原文地址:https://www.cnblogs.com/jimGraymane/p/11979423.html