0.回顾django一些内容
1.MTV和MVC
MTV:模型层,模板层,视图层
MVC:模型层,视图层,控制层
2.多对多关系的三种创建方式
第一种(全自动):author = models.ManyToManyField(to='Author')
第二种(纯手动):
class Book(models.Model):
name = models.CharField(max_length=32)
class Author(models.Model):
name = models.CharField(max_length=32)
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author)
第三种(半自动)(不仅可以查询表关系,而且可以拓展第三张表的字段):
class Book(models.Model):
name = models.CharField(max_length=32)
athor = models.ManyToManyField(to='Author', through='Book2Author', through_field='book', 'author')
class Author(models.Model):
name = models.CharField(max_length=32)
book = models.ManyToManyField(to='Author', through='Book2Author', through_field='author', 'book')
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author)
3.contentType参数(前后端传输数据的编码格式)
1.urlencoded(form表单与ajax默认的数据提交编码格式)
数据格式:name='jason'&password='123'
django后端识别到urlencoded数据格式将其封装到request.POST
2.formdata 传输文件
支持传普通键值对也可以传文件。
普通键值的处理放到request.POST中
文件数据处理放到request.FILES中
3.application/json(ajax支持)
JSON.stringify({'name':'jason'})
django后端对于json格式的数据不做任何处理,对原生的二进制数据存到request.body中,手动处理。
先解码再反序列化
3.ajax
特点:异步刷新,局部刷新
四个基本参数:
url: "" # 控制数据提交的地址,不写默认往当前位置提交
type: "get" # 控制的是数据的提交方式get, post
data: {"name":"jason"} # 提交的数据
success:function(data){
# 局部刷新的操作
alert(data)
}
# 绑定事件:
$('#b1').click(function(){
$.ajax({
url:'', # 控制数据提交的地址,不写默认往当前位置提交
type:'get', # 控制的是数据的提交方式 get,post,。。。
contentType:'application/json',
data:JSON.stringify({'name':'jason'}), # 提交的数据
success:function(data){
# 做局部刷新的操作
alert(data)
}
})
})
ajax发送文件:
1.利用一个js内置对象FormData
2.这个FormData既可以传普通的键值也可以传文件
3.需要修改两个默认参数processData,contentType
4.获取input框存储的文件数据
$('input[type="file"]')[0].files[0]
示例:
$('#b1').click(function(){
# 先生成一个内置对象
var formdata = new FormData();
formdata.append('键','值');
formdata.append('myfile',$('input[type="file"]')[0].files[0]);
$.ajax({
url:'', # 控制数据提交的地址,不写默认往当前位置提交
type:'get', # 控制的是数据的提交方式 get,post,。。。
contentType:false,
processData:false,
data:JSON.stringify({'name':'jason'}), # 提交的数据
success:function(data){
# 做局部刷新的操作
alert(data)
}
})
})
4.批量插入(bulk_create())
l = []
for i in range(100000000):
l.append(user_obj)
g = (models.User(name='%s'%i) for i in range(100000000))
自定义分页器:
后端
book_list = models.Book.objects.all()
page_obj = 自定义类 (current_page=request.GET.get('page',1),all_count=book_list.count())
book_queryset = book_list[page_obj.start:page_obj.end]
前端
将book_list全部替换为book_queryset
渲染分页器样式
{{ page_obj.page_html|safe }}
5.利用importlib实现包的导入
import importlib
s = 'xxx.b'
res = importlib.import_module(s)