一.Ajax
ajax(Asynchronous Javascript And XML)翻译成中午就是"异步JavaScritp和XML"。即是使用JavaScript语言与服务器进行异步交互,传输的数据为XML(现在更多使用json数据)。
ajax就是一种前后端数据交互的方式
特点:
1.异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求
2.局部刷新
基本用法:
$.ajax({
url:'/index/', 指定路径
type:'post', 指定请求方式
data:{'name':'Yven','age':18}, 往后台提交的数据 success:function (data) { 成功时回调该函数 console.log(data) } })
二.上传文件
请求头ContentType
1.application/x-www-form-urlencoded
这是最常见的POST提交数据的方式,浏览器的原生<form>表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded方式提交数据,请求类似下面这样:
POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset-utf-8
user=yven&&age=18
2.multipart/form-data
这又是一个常见的POST数据提交的方式,我们使用表单上传文件时,必须让<form>表单的enctype等于multipart/form-data。如下:
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="user" yuan ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ... ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
3.application/json
application/json这个Content-Type作为响应头大家肯定不陌生。这也是越来越流行的一种请求头,用来告诉服务端消息主体是序列化后的JSON字符串,由于JSON规范的流行,除了低版本IE之外的各大浏览器都原生支持JSON.stringify,服务端语言也都有处理JSON的函数,使用JSON不会有书名麻烦。 JSON格式支持比键值对复杂的多的结构化数据,这一点也很有用,
基于Ajax上传文件
<form>
<input type="file" name="files" class="files"> </form> <button class="btn" type="submit">提交</button> </body> <script> $('.btn').click(function () { var formdata = new FormData(); formdata.append('files', $('.files')[0].files[0]); $.ajax({ url: '', type: 'post', // 不预处理数据 contentType:false, // 指定往后台传数据的编码格式 // 告诉jQuery不要去设置Content-Type请求头 processData:false, data: formdata, success: function (data) { alert(data) } }) }) </script>
三.Ajax提交json格式数据
模板层
<script src="/static/bootstrap-3.3.7-dist/js/jquery-3.3.1.js"></script> <script> $('.btn').click(function () { var data = {'name':$('#name').val(),'pwd':$('#password').val()}; {#console.log(typeof data);#} var post_data = JSON.stringify(data) $.ajax({ url:'/json_login/', type:'post', data:post_data, contentType:'application/json', success:function (data) { if (data.user){ window.location = 'https://www.baidu.com' }else { alert(data.msg) } } }); }); </script>
试图层
if request.method == 'GET':
return render(request,'json_login.html') data = request.body import json res = json.loads(data.decode('utf-8')) name = res['name'] pwd = res['pwd'] dic = {'user':None,'msg':None} try: user = models.User.objects.get(name=name) if user.password == pwd: dic['user'] = 1 dic['msg'] = '登录成功' else: dic['msg'] = '密码错误' return JsonResponse(dic) except: dic['msg'] = '用户名不存在' return JsonResponse(dic)
四.Django内置的serializers
from django.core import serializers
# serializers把对象序列化成json字符串
def test(request): book = Book.objects.all() res = sserializers.serialize('json',book) return HttpResponse(res)