django中的ajax组件教程详解(2)

def login(request): # print(request.POST) user = request.POST.get('user') pwd = request.POST.get('pwd') from .models import User user = User.objects.filter(user=user, pwd=pwd).first() ret = { 'user': None, 'msg': None } if user: ret['user'] = user.user else: ret['msg'] = 'username or password is wrong!' import json return HttpResponse(json.dumps(ret))

首先打开浏览器,输入错误的用户名和密码:

然后开始输入正确的用户名和密码,就会直接跳转到百度的首页了。

利用form表单进行文件上传

# urls.py path('file_put/', views.file_put), # views.py # 文件的上传 def file_put(request): if request.method == 'POST': print(request.POST) return render(request, 'file_put.html') # file_put.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <h3>基于form表单实现的文件上传</h3> <form action="" method="post" enctype="multipart/form-data"> 用户名 <input type="text"> 头像 <input type="file"> <input type="submit"> </form> </body> </html>

此时咱们输入完用户名和选中完图片后,点击提交咱们查看下打印的信息。

那么是我们的图片没有上传过来吗?当然不是的,是因为上传的图片就不在这里面。让我们在views.py中执行这个代码:

print(request.FILES)

看到的是这个样子:

那么此时我们就可以确定,这个文件是上传过来了,存放在request.FILES中,那么咱们使用request.FILES.get就可以把这个图片对象拿到了。

# views.py def file_put(request): if request.method == 'POST': print(request.POST) # # print(request.body) print(request.FILES) # 图片信息 # 将文件给取出来 img_obj = request.FILES.get('avatar') with open(img_obj.name, 'wb') as f: for line in img_obj: f.write(line) return HttpResponse('ok!') return render(request, 'file_put.html')

那么此时直接上传的话,那么就会在当前项目下展示这张照片。

利用ajax实现文件上传

首先我们需要新开一个url或者将之前的注释掉:

# urls.py path('file_put/', views.file_put),

ajax提交文件的方式同样使用form表单,但是不需要给input设置name属性,只需要设置class或者id就可以了:

# file_put.html <form action="" method="post"> 用户名 <input type="text"> 头像 <input type="file" > <input type="button" value="ajax"> </form>

那么咱们需要给btn设置点击click动作:

$('.btn').click(function(){ //涉及到文件上传 需要创建formdata对象 var formdata = new FormData(); formdata.append('user',$('#user').val()); formdata.append('avatar',$('#avatar')[0].files[0]); $.ajax({ url:'', type:'post', contentType:false, // 交给FormData处理编码 processData:false, //对数据是否进行预处理 如果不做预处理的话 就不做任何编码了 data:formdata, success:function(data){ console.log(data) } }) })

最后在试图函数中进行文件保存操作:

def file_put(request): if request.method == "POST": print("body", request.body) # 请求报文中的请求体 json print("POST", request.POST) # if contentType==urlencoded ,request.POST才有数据 print('FILES', request.FILES) file_obj=request.FILES.get("avatar") with open(file_obj.name,"wb") as f: for line in file_obj: f.write(line) return HttpResponse("OK") return render(request, "file_put.html") Content-Type

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/57695a19e88788fb78df2203c0290308.html