ajxa
choices参数
# 一般用在字段存储数据的情况可能被列举完全的情况
eg:性别 学历 来源
# 针对以上这些可能被列举完的情况,我们一般步存中文字符,男 女 未知,
利用到了choices参数
gender_choices = (
(1, '男'),
(2, '女'),
)
gender= models.IntegFiled(choices=gender_choices)
edu_choices=(
('xiaoxue', 小学),
('chuzhogn',初中)
)
'''以后我们在数据库中添加数据的时候,就存对应的数字'''
# 取值
user_obj.gender -------> 1, 2
user_obj.get_字段_display() ------》如果查出来的数字在范围中,就会映射对应的关系,如果超出了范围,就原样输出
MTV和MVC
# 这两个其实就是一个,本质都是MVC模式,他就是web应用的一种开发模式,说白了就是分层
M V C
# django自称是MTV模式
M T V
# 普遍情况下,都是分三层,当一些项目比较复杂的时候,还可能在加一层,S层,services层,逻辑层
多对多的创建方式
# 1. 全自动
authors = models.MantToManyField(to='被关联的表')
# 特点就是扩展性太差,可以正反向查询,还可以使用那4个方法,add set remove clear
# 2. 全手动
第三张表完全有我们自己创建,在第三张表种,自己创建外键关系
# 扩展性高,
# 3. 半自动的
第三张表也是我们自己创建,外键关系我们自己建立,
# 还需要在表中添加authors = models.MantToManyField(to='被关联的表')
'''放在book表中'''
authors = models.MantToManyField(to='被关联的表', through='指定第三张表',through_fields=('book', 'author'))
'''放在author表中'''
book = models.MantToManyField(to='被关联的表', through='指定第三张表',through_fields=('author', 'book'))
class Book2Author():
book = 外键
author = 外键
Ajax技术
# 特点:异步提交 局部刷新
例子:github的注册功能,实时验证邮箱的合法性,每次输完邮箱,就朝后盾发起一次请求
# 如何使用ajax
'''我们学习的是jQuery封装之后的版本,js原生的我们不在学了,js发送ajax需要4步'''
# 要想使用ajax,必须导入jQuery文件!!!!!!!
# 能发起ajax请求的不但只是jQuery可以,其他的也可以,axios,vue
# ajax的书写结构
$.ajax({
url:'',
type:'post',
data:{'a':1, 'b':1, c:2},
dataType:'json'
# 当后端成功返回数据的时候,回调的函数
success:function(res) {
# res--------->后盾返回的数据
}
})
# 总结:
当后端用HttpResponse返回的时候,前端应该
1. 反序列化:JSON.parse(res)
2. 指定一个参数:dataType:'json'
# 后端直接用JsonResponse,前端什么都不用做,直接取值
今日内容概要
-
前后端传输数据的编码格式(理论)
- urlencoded
- form-data
- json
-
ajax提交json格式的数据
-
ajax也可以提交文件数据
-
ajax结合layer弹窗实现删除的二次确认
-
django自带的序列化组件(Serializers了解)--->drf中---->大量使用序列化组件
-
批量插入数据----->在django中,一次性插入大量的数据
今日内容详细
前后端传输数据的编码格式(理论)Content-Type
# urlencoded form-data json
"""
我们只研究post请求的编码格式,get请求不在研究
url?username=a&password=b
"""
form表单它能够2种:urlencoded form-data
json格式的数据form表单是没办法提交的
能够提交json格式的数据的方式:
1. ajax
2. 第三方的工具:postman
# 1. form表单提交数据的编码格式
form表单默认提交的数据编码格式是urlencoded(application/x-www-form-urlencoded)
# 对于urlencoded格式的数据,django后端都会给封装到request.POST中取、
数据格式:username=dsdsa&password=dsdas
# urlencode也可以改成form-data(multipart/form-data),改完之后,它可以提交文件数据
multipart/form-data; boundary=----WebKitFormBoundaryAib88pAWSV5kUOJw
针对form-data格式的数据,django后端会把普通数据还是封装到rquest.POST中,对于文件数据封装到了request.FILES中了
# 研究ajax
默认的提交格式是:Content-Type: application/x-www-form-urlencoded
django后端也是把数据都封装到了request.POST中
ajax提交json格式的数据
ajax要想提交json格式的数据,必须满足两个条件:
1. content-type必须是:json (因为默认是urlencoded)
2. 传输的数据必须是json格式的
'''ajax提交的json格式数据,django后端没有把数据封装到request.POST中'''
# 如何获取ajax提交的json格式数据?
# 在Django后端使用request.body
'''针对ajax提交的json格式数据,django后端没有做任何的封装,纯原生数据,在request.body中,需要我们自己手动处理数据格式!!!!!!!!!'''
# 总结:
$.ajax({
url: '',
type: 'post',
# 2. data: JSON.stringify({'a': 1, 'b': 2, c: 3}),
// 更改contenttype
# 1. contentType:'application/json',
success: function () {
}
})
ajax提交文件数据
// 获取数据
var username = $("#username").val();
var password = $("#password").val();
var myfile = $("#myfile")[0].files[0];
// ajax提交文件数据,需要借助于form-data
var myFormDataObj = new FormData();
myFormDataObj.append('username', username);
{#myFormDataObj.append('username', $("#username").val());#}
myFormDataObj.append('password', password);
// 提交文件数据、
myFormDataObj.append('myfile', myfile);
$.ajax({
url: '',
type: 'post',
data: myFormDataObj,
// 更改contenttype
// 需要加两个参数
contentType: false, // 告诉浏览器不要给我修改任何的编码格式
processData:false,// 告诉浏览器不要对我的数据进行任何的修改或者干扰
success: function () {
}
})
##################################################################################
总结:
1. var myFormDataObj = new FormData();
2. 获取数据,然后添加到myFormDataObj
myFormDataObj.append('password', password);
// 提交文件数据、
myFormDataObj.append('myfile', myfile);
3. 修改参数:
contentType: false, // 告诉浏览器不要给我修改任何的编码格式
processData:false,// 告诉浏览器不要对我的数据进行任何的修改或者干扰
4. 在django后端,普通数据还是在request.POST中,文件数据在
request.FILES里面
##################################################################################
ajax结合layer弹窗实现删除的二次确认
# 1. 学会如何使用第三方工具-------》去看人家写的文档,根据文档把工具学会使用就行
https://layuiweb.com/demo/layer.html
https://layuiweb.com/layer/index.htm
django自带的序列化组件(了解)
# 让你从数据库总查询几条数据,然后序序列化给到前端,列表套字段的形式[{},{},{}]
from django.core import serializers
def ab_ser(request):
user_list = models.Book.objects.all()
# print(user_list) # <QuerySet [<Book: Book object (2)>, <Book: Book object (3)>, <Book: Book object (4)>]>
# book_list = []
# for obj in user_list:
# tmp = {
# 'pk':obj.pk,
# 'username':obj.username,
# }
# book_list.append(tmp)
book_list = serializers.serialize('json', user_list) # 了解
return JsonResponse(book_list,safe=False)
批量插入数据
# 让你往book表插入10000条数据
select * from app01 limit 1,500 # 第一页
select * from app01 limit 501,1000 # 第二页
select * from app01 limit 1001,1500 # 第三页
# select * from app01
select * from app01 limit 99501,100000 # 最后一页
from app01 import models
# for i in range(10000):
# models.Book.objects.create(username='%s' % i)
book_list = []
for i in range(100000):
book_obj = models.Book(username='%s' % i)
book_list.append(book_obj)
# book_list 一次插入多条数据 insert into table (username) values(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin')
models.Book.objects.bulk_create(book_list)
# 不管数据有多大,只要不去查库,效率都可以忽略,
'''以后再实际项目中,能够一次操作数据库完成的动作,就要尽量使用一次性的,'''

浙公网安备 33010602011771号