本文目录

一 什么是Ajax

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。

  • 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
  • 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。

AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

场景:

aaarticlea/png;base64,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" alt="" width="473" height="317" />

优点:

  • AJAX使用Javascript技术向服务器发送异步请求
  • AJAX无须刷新整个页面
 

二 基于jquery的Ajax实现

<button class="send_Ajax">send_Ajax</button>
<script> $(".send_Ajax").click(function(){ $.ajax({
url:"/handle_Ajax/",
type:"POST",
data:{username:"Yuan",password:123},
success:function(data){
console.log(data)
},
      
error: function (jqXHR, textStatus, err) {
console.log(arguments);
}, complete: function (jqXHR, textStatus) {
console.log(textStatus);
}, statusCode: {
'403': function (jqXHR, textStatus, err) {
console.log(arguments);
}, '400': function (jqXHR, textStatus, err) {
console.log(arguments);
}
} }) }) </script>

Ajax---->服务器------>Ajax执行流程图

 

三 案例

一 通过Ajax,实现前端输入两个数字,服务器做加法,返回到前端页面

def test_ajax(requests):
n1=int(request.POST.get('n1'))
n2=int(request.POST.get('n2'))
return HttpResponse(n1+n2)

视图函数

$("#submit").click(function(){
$.ajax({
url:'test_ajax',
type:'post',
data:{
n1:$('#num1').val(),
n2:$('#num2').val()
}
success:$(function(data)){
console.log(data)
$("#sum").val(data) }
})
})

js代码

<input type="text" id="num1">+<input type="text" id="num2">=<input type="text" id="sum">
<button id="submit">计算</button>

HTML代码

二 基于Ajax进行登录验证

用户在表单输入用户名与密码,通过Ajax提交给服务器,服务器验证后返回响应信息,客户端通过响应信息确定是否登录成功,成功,则跳转到首页,否则,在页面上显示相应的错误信息

def auth(request):
back_dic={'user':None,'message':None}
name=request.POST.get('user')
password=request.POST.get('password')
print(name)
print(password)
user=models.user.objects.filter(name=name,password=password).first()
print(user)
# print(user.query)
if user:
back_dic['user']=user.name
back_dic['message']='成功'
else:
back_dic['message']='用户名或密码错误'
import json
return HttpResponse(json.dumps(back_dic))

视图函数

$("#submit3").click(function () {
$.ajax({
url: '/auth/',
type: 'post',
data: {
'user': $("#id_name").val(),
'password': $('#id_password').val()
}, success: function (data) {
{#console.log(data)#}
var data=JSON.parse(data)
if (data.user){
location.href='https://www.baidu.com'
}else {
$(".error").html(data.message).css({'color':'red','margin-left':'20px'})
}
} })
}
) Js代码

JS代码

四 文件上传

请求头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=lqz&age=22

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--

这个例子稍微复杂点。首先生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 multipart/form-data 来编码,本次请求的 boundary 是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束。关于 multipart/form-data 的详细定义,请前往 rfc1867 查看。

这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持。

上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 <form> 表单也只支持这两种方式(通过 <form> 元素的 enctype 属性指定,默认为 application/x-www-form-urlencoded。其实 enctype 还支持 text/plain,不过用得非常少)。

随着越来越多的 Web 站点,尤其是 WebApp,全部使用 Ajax 进行数据交互之后,我们完全可以定义新的数据提交方式,给开发带来更多便利。

3 application/json

application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。

JSON 格式支持比键值对复杂得多的结构化数据,这一点也很有用。记得我几年前做一个项目时,需要提交的数据层次非常深,我就是把数据 JSON 序列化之后来提交的。不过当时我是把 JSON 字符串作为 val,仍然放在键值对里,以 x-www-form-urlencoded 方式提交。

基于Form表单上传文件

<form action="/file_put/" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name">
头像:<input type="file" name="avatar" id="avatar1">
<input type="submit" value="提交">
</form>

必须指定 enctype="multipart/form-data"

视图函数:

def file_put(request):
if request.method=='GET':
return render(request,'file_put.html')
else:
# print(request.POST)
# print(request.POST)
print(request.body) # 原始的请求体数据
print(request.GET) # GET请求数据
print(request.POST) # POST请求数据
print(request.FILES) # 上传的文件数据
# print(request.body.decode('utf-8'))
print(request.body.decode('utf-8')) print(request.FILES)
file_obj=request.FILES.get('avatar')
print(type(file_obj))
with open(file_obj.name,'wb') as f:
for line in file_obj:
f.write(line)
return HttpResponse('ok')

基于Ajax上传文件

    $("#ajax_button").click(function () {
var formdata=new FormData()
formdata.append('name',$("#id_name2").val())
formdata.append('avatar',$("#avatar2")[0].files[0])
$.ajax({
url:'',
type:'post',
processData:false, //告诉jQuery不要去处理发送的数据
contentType:false,// 告诉jQuery不要去设置Content-Type请求头
data:formdata,
success:function (data) {
console.log(data) } })
})

浏览器请求头为:

Content-Type:
multipart/form-data; boundary=----WebKitFormBoundaryA5O53SvUXJaF11O2

五 Ajax提交json格式数据

    $("#ajax_test").click(function () {
var dic={'name':'lqz','age':18}
$.ajax({
url:'',
type:'post',
contentType:'application/json', //一定要指定格式 contentType: 'application/json;charset=utf-8',
data:JSON.stringify(dic), //转换成json字符串格式
success:function (data) {
console.log(data)
} }) })

提交到服务器的数据都在 request.body 里,取出来自行处理

 

六 Django内置的serializers(把对象序列化成json字符串)

from django.core import serializers
from django.core import serializers
def test(request):
book_list = Book.objects.all()
ret = serializers.serialize("json", book_list)
return HttpResponse(ret)

七:Ajax登录验证

View层

from django.shortcuts import render
from app01 import models
from django.http import JsonResponse
# Create your views here. def index(request):
if request.method=='GET':
return render(request,'index.html') def login(request):
if request.method=='GET':
return render(request,'index.html')
else:
name=request.POST.get('name')
password=request.POST.get('password')
dic={'status':100,'msg':None}
user=models.User.objects.all().filter(name=name,password=password).first()
if user:
dic['msg']='login successfully' else:
dic['status']=101
dic['msg']='用户名或密码错误'
return JsonResponse(dic)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="/static/jquery-3.3.1.js"></script>
<title>Title</title>
</head>
<body>
<p>用户名:<input type="text" name="name" id="name"></p>
<p>密码:<input type="text" name="password" id="password"></p>
<p>
<button id="btn">提交</button>
</p>
<span id="error"></span>
<script>
$('#btn').click(function () {
$.ajax({
url: '/login/',
type: 'post',
data: {'name': $("#name").val(), 'pwd': $("#password").val()},
dataType: 'json',
success: function (data) {
if (data.status == 100) {
location.href = 'https://www.baidu.com'
} else {
$("#error").html(data.msg).css({'color': 'red'})
setTimeout(function () {
$("#error").html("")
//alert(1)
}, 1000)
}
}
})
})
</script>
</body>
</html>

models层

from django.db import models
# Create your models here.
class User(models.Model):
name=models.CharField(max_length=32)
password=models.CharField(max_length=32)

Django和Ajax的更多相关文章

  1. python Django之Ajax

    python Django之Ajax AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步 ...

  2. django 接受 ajax 传来的数组对象

    django 接受 ajax 传来的数组对象 发送:ajax 通过 POST 方式传来一个数组 接收:django 接受方式 array = request.POST.getlist(‘key[]’) ...

  3. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  4. Django使用AJAX调用自己写的API接口

    Django使用AJAX调用自己写的API接口 *** 具体代码和数据已上传到github https://github.com/PythonerKK/eleme-api-by-django-rest ...

  5. Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件

    一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...

  6. Django之Ajax提交

    Ajax 提交数据,页面不刷新 Ajax要引入jQuery Django之Ajax提交 Js实现页面的跳转: location.href = "/url/" $ajax({ url ...

  7. Django框架第九篇--Django和Ajax、序列化组件(serializers)、自定义分页器、模型表choice参数

    Django和Ajax 一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语 ...

  8. Django之AJAX传输JSON数据

    目录 Django之AJAX传输JSON数据 AJAX 中 JSON 数据传输: django响应JSON类型数据: django 响应 JSON 类型数据: Django之AJAX传输JSON数据 ...

  9. Django之ajax(jquery)封装(包含 将 csrftoken 写入请求头方法)

    由于支持问题,未使用 es6 语法 _ajax.js /** * 发起请求 * @param url 请求地址 * @param data 请求数据 { } json格式 * @param type ...

  10. Django学习——图书管理系统图书修改、orm常用和非常用字段(了解)、 orm字段参数(了解)、字段关系(了解)、手动创建第三张表、Meta元信息、原生SQL、Django与ajax(入门)

    1 图书管理系统图书修改 1.1 views 修改图书获取id的两种方案 1 <input type="hidden" name="id" value=& ...

随机推荐

  1. Linux function: unshare

    When a new process is created with the clone() system call, a set of flags is provided which tells t ...

  2. CollabNet Subversion Edge 安装笔记(1):基本安装设定篇

    转载于:http://blog.miniasp.com/post/2011/12/30/CollabNet-Subversion-Edge-Installation-Notes-Part-1-Basi ...

  3. 如何重启 Windows 10 子系统(WSL) ubuntu

    如何重启 Windows 10 子系统(WSL) ubuntu WSL 子系统是基于 LxssManager 服务运行的. 只需要将 LxssManager 重启即可. 可以做成一个 bat 文件. ...

  4. Javascript 中 switch case 等于 (== )还是 恒等于(===)?

    Javascript 中 switch case 等于 (== )还是 恒等于(===)? 可以测试一下以下代码,这个 case 中是 等于(==)还是恒等于(===) <script> ...

  5. Dubbo 基础教程

    原文地址:Dubbo 基础教程 博客地址:http://www.extlight.com 一.前言 当服务越来越多时,容量的评估,小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心基于访问压力实 ...

  6. httpd编译安装

    Apache安装问题:configure: error: APR not found . Please read the documentation: Linux上安装Apache时,编译出现错误: ...

  7. 基于PhantomJS的网页抓取及写入文件

    # coding=utf-8 from selenium import webdriver from selenium.webdriver.common.desired_capabilities im ...

  8. sqlnet.ora限制客户端IP访问

    实现功能: 只允许某几个IP访问数据库服务端(白名单): $ORACLE_HOME/network/admin/sqlnet.ora 添加2个主要参数 TCP.VALIDNODE_CHECKING=y ...

  9. 生成式对抗网络(GAN)

    生成对抗网络(GAN),是深度学习模型之一,2014年lan Goodfellow的开篇之作Generative Adversarial Network, GAN概述 GAN包括两个模型,一个是生成模 ...

  10. Mysql总结(一)

    数据库命令:创建create database 数据库名 charset=utf8;删除drop database 数据库名;查看所有数据库:show databases;使用数据库:use 数据库名 ...