django框架——ajax 请求
ajax请求
异步提交 局部刷新
发送请求的方式
1.浏览器地址栏输入url GET请求
2.a标签href属性 GET请求
3.form表单 GET请求/POST请求
4.ajax GET请求/POST请求
ajax发送普通数据
$('#btn').click(function () {
$.ajax({
url:'',
type:'post',
data:{'i1':$('#d1').val(),'i2':$('#d2').val()},
success:function (args) {
$('#d3').val(args)
}
})
})
后端是用HttpResponse返回的数据 回调函数不会自动反序列化
后端用的是JsonResponse返回的数据 回调函数会自动反序列化
HttpResponse解决方式
1.在前端利用JSON.parse()
2.在ajax里面配置一个参数
ajax里加dataType:'json'
前后端传输数据的编码格式(contentType)
urlencoded
formdata
json
form表单
默认的数据编码格式是urlencoded
formdata
form表单是不能发送json格式数据
ajax
默认的编码格式urlencoded
post,json
ajax发送json格式数据
ajax发送json格式数据需要注意点
1.contentType参数指定成:application/json
2.发送的数据一定是json格式,对应
3.django后端不会处理json格式数据 要从request.body获取并处理
request.is_ajax()
判断是否是ajax请求
<script>
$('#d1').click(function () {
$.ajax({
url:'',
type:'post',
data:JSON.stringify({'username':'jason','age':25}),
contentType:'application/json', // 指定编码格式
success:function (视图函数的返回值) {
回调函数
}
})
})
</script>
json_bytes = request.body
json_str = json_bytes.decode('utf-8')
json_dict = json.loads(json_str)
# json.loads自动解码反序列化 跟Python解释器版本有关,3.5 还不行
json_dict = json.loads(json_bytes)
ajax发送文件
ajax发送文件需要借助于js内置对象FormData
<script>
$('#d4').on('click',function () {
let formDateObj = new FormData();
formDateObj.append('username',$('#d1').val());
formDateObj.append('password',$('#d2').val());
formDateObj.append('myfile',$('#d3')[0].files[0])
$.ajax({
url:'',
type:'post',
data:formDateObj,
contentType:false, // 不需使用任何编码 django后端能够自动识别formdata对象
processData:false, // 告诉浏览器不要对数据进行任何处理
success:function (args) {
}
})
})
</script>
序列化器
需求:在前端获取到后端用户表里面所有的数据 并且要是列表套字典
import json
from django.http import JsonResponse
from django.core import serializers
def ab_ser(request):
user_queryset = models.User.objects.all()
# 自己凑出来
user_list = []
for user_obj in user_queryset:
tmp = {
'pk':user_obj.pk,
'username':user_obj.username,
'age':user_obj.age,
'gender':user_obj.get_gender_display()
}
user_list.append(tmp)
return JsonResponse(user_list,safe=False)
自己形成列表的数据
[
{"pk": 1, "username": "jason", "age": 25, "gender": "male"},
{"pk": 2, "username": "egon", "age": 31, "gender": "female"},
{"pk": 3, "username": "kevin", "age": 32, "gender": "others"},
{"pk": 4, "username": "tank", "age": 40, "gender": 4}
]
# 序列化
res = serializers.serialize('json',user_queryset)
return HttpResponse(res)
序列化组件serializers形成的数据
[
{ "model": "app01.user",
"pk": 1,
"fields": {"username": "jason", "age": 25, "gender": 1}},
{ "model": "app01.user",
"pk": 2,
"fields": {"username": "egon", "age": 31, "gender": 2}},
{ "model": "app01.user",
"pk": 3,
"fields": {"username": "kevin", "age": 32, "gender": 3}},
{ "model": "app01.user",
"pk": 4,
"fields": {"username": "tank", "age": 40, "gender": 4}}
]
ajax结合sweetalert
<script>
$('.del').on('click',function () {
// 先将当前标签对象存储起来
let currentBtn = $(this);
// 二次确认弹框
swal({
},
function(isConfirm) {
if (isConfirm) {
// 朝后端发送ajax请求删除数据之后 再弹下面的提示框
$.ajax({
url:'/delete/user/' + currentBtn.attr('delete_id'),
传递主键值方式1
url:'/delete/user/', // 2 放在请求体里面
type:'post',
data:{'delete_id':currentBtn.attr('delete_id')},
success:function (args) {
// args = {'code':'','msg':''}
// 判断响应状态码 然后做不同的处理
if(args.code === 1000){
swal("删了!", args.msg, "success");
// 1.lowb版本 直接刷新当前页面
window.location.reload()
// 2.利用DOM操作 动态刷新
currentBtn.parent().parent().remove()
}else{
swal('完了','出现了位置的错误','info')
}
}
})
} else {
swal("怂逼", "不要说我认识你", "error");
}
});
})
</script>
批量插入
# 批量插入
book_list = []
for i in range(100000):
book_obj = models.Book(title='第%s本书'%i)
book_list.append(book_obj)
models.Book.objects.bulk_create(book_list)
分类:
Django
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现