本周内容
今日内容
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}}告诉这是安全的可以读取