Ajax简介

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
Ajax = 异步 JavaScript 和 XML(标准通用标记语言的子集)。
Ajax 是一种用于创建快速动态网页的技术。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
 

向服务器发送请求的方式

1、浏览器地址栏,默认get 请求

2、form表单:

  get请求

  post请求

3、a标签,默认get请求

4、Ajax

  get请求

  post请求

 特点:

   1、异步请求

   2、局部刷新

Ajax简单应用

1、首先先创建一个简单的django项目

urls.py

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index),
path('test_ajax/',views.ajax)
]

views.py

from django.shortcuts import render,HttpResponse
def index(request):
return render(request,'index.html') # Create your views here.
def ajax(request):
return HttpResponse('ok')

templates/index.html


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<h1>index</h1>
<button class="Ajax">Ajax</button>
<p class="content"></p>
<script>
$('.Ajax').click(function () {
alert('123')#
//发送Ajax请求
$.ajax({
url:'/test_ajax/',//请求url
type:'get',//请求方式 post
//data:{},#请求数据
success:function (data) {//回调函数,某个动作执行完之后执行的函数
console.log(data);
$('.content').html(data)

}
})

})
</script>
</body>
</html>
 

2、以上代码实现效果

当我们访问 index的时候

等我们在点击Ajax按钮的时候

这里到底发生了什么

访问流程

1、首先咱们访问index,是一次get请求。

2、当我们点击Ajax按钮的时候,这里触发了 模板里写好的函数,Ajax去请求url

    $('.Ajax').click(function () {
alert('123')
//发送Ajax请求
$.ajax({
url:'/test_ajax/',//请求url
type:'get',//请求方式 post

3、请求url得到在试图函数中写好的逻辑,返回了‘ok’值,这里data接收了这个值

进行前端日志打印,和给 ‘content’添加html的值。

success:function (data) {//回调函数,某个动作执行完之后执行的函数
console.log(data);
$('.content').html(data)

4、此次请求没有刷新页面,url没有改变,只是进行了局部的刷新,对p标签进行赋值。

Ajax计算器

刚刚说过Ajax 可以发送 get 请求与post 请求,这次计算器就用到post请求,直接上代码

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<h1>index</h1>
<input id="num1" type="number">+<input id="num2" type="number">=<input id="result" type="number"><button class="cal">计算</button>
<script>
$('.cal').click(function () {
//发送Ajax请求
$.ajax({
url:'/ual/',//请求url
type:'post',//请求方式 post
data:{
'n1':$('#num1').val(),//获取用户输入值并赋值给n1,通过post请求发送给 'ual'
'n2':$('#num2').val(),
},//请求数据
success:function(data){//回调函数,某个动作执行完之后执行的函数
$('#result').val(data);
console.log(data); }
}) })
</script>
</body>
</html>

views.py

from django.shortcuts import render,HttpResponse
def index(request):
return render(request,'index.html') # Create your views here.
def ajax(request):
print(request.GET)
return HttpResponse('ok')
def ual(request):
print(request.POST)
n1 = int(request.POST.get('n1')) #获取传递过来的变量,并取值
n2 = int(request.POST.get('n2'))
ret =n1+n2 #相加操作
return HttpResponse(ret) #返回结果给模板。

urls.py

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index),
path('test_ajax/',views.ajax),
path('ual/',views.ual),
]

#注意,这里需要先在settings.py 中注释掉 csrf相关行,后面验证会说道。不然前端页面无法正常显示。

效果

这里的步骤相对于上面的get请求的是,Ajax发送post请求给后端试图,后端服务器进行计算操作,将值传递给模板进行显示。

登录验证

大概思路

1、前端获取用户输入信息

2、通过ajax传给后端服务器

3、后端服务器通过orm 调用数据库信息对前端接受信息进行验证

4、验证过后因为 HttpResponse() 只返回字符串,这里就用到之前学到对json 序列化,将验证结果序列化后返回给前端模版

5、模版将字符串反序列化,变成js对象,这里要注意跟python内部序列化和反序列化有一定不通,这里是跨语言传输

6、前端通过逻辑判断用户是否正确反馈给用户。

下面开始上菜

这里就不啰嗦了,直接开始从模版开始

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"></script>
</head>
<body>
<form >
用户名<input type="text" id="user">
密码<input type='password' id="pwd">
<input type="button" value="submit" class="login_btn"><span class="error"></span>
</form>
<script>
//登录验证
$(".login_btn").click(function(){ $.ajax({
url:"/login/",//请求url
type:"post",
data:{
"user":$("#user").val(),//获取用户输入
"pwd":$("#pwd").val(),
},
success:function(data){
console.log(data);
var data=JSON.parse(data); //反序列化 object {}
console.log(data);//json 字符串
if (data.user){ //判断是否有值
location.href='http://www.baidu.com' //登录成功后跳转页面,这个应该是跳转到自己到程序页面,这里用百度先代替一下 }
else{
$('.error').html(data.msg).css({"color":"red","margin-left":"10px"}) //判断失败后在前端页面显示错误信息
} } }) })
</script> </body>
</html>

url.py

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index),
path('login/',views.login),
]

views.py

from django.shortcuts import render,HttpResponse
from app01.models import * # Create your views here.
def index(request): return render(request,'index.html')
def login(request):
print(request.POST)
  #获取post信息
user=request.POST.get('user')
pwd=request.POST.get('pwd')
  #查询数据库该内容是否存在  
ret = Users.objects.filter(user=user,pwd=pwd).first()  #这里如果存在就会返回一个对象,否则返回None
  
ret_dict = {'user':None,'msg':None} #这里生成一个字典,放置需要传递给前端的数据,也为了进行序列化操作
  #根据查询结果对字典内容进行修改
if ret:
ret_dict['user'] = user
else:
ret_dict['msg'] = 'user or password error ' import json
return HttpResponse(json.dumps(ret_dict)) #序列还传给前端

这里models.py  就不写了,如果不会对小伙伴可以参考我以前对博客

最终效果

登录成功

后端输出

<QueryDict: {'user': ['liu'], 'pwd': ['123']}>
Users object (1)
[28/Nov/2018 15:01:43] "POST /login/ HTTP/1.1" 200 28

前端直接跳转到指定页面

登录失败

后端输出

<QueryDict: {'user': ['liu'], 'pwd': ['222']}>
None

前端输出

用户名 密码  user or password error

整体流程就是这样,要注意json序列化和反序列化。

Ajax(简介、基础操作、计算器,登录验证)的更多相关文章

  1. AJAX - 实现一个简单的登录验证

    /**Ajax 编写流程 * 1.创建 XHR (XMLHttpRequest)对象 var xmlHttpReq = false; // var xmlHttpReq = ""; ...

  2. (2.2)学习笔记之mysql基础操作(登录及账户权限设置)

    本系列学习笔记主要讲如下几个方面: 本文笔记[三:mysql登录][四:账户权限设置][五:mysql数据库安全配置] 三.mysql登录 常用登录方式如下: 四.账户权限设置 (4.1)查看用户表, ...

  3. 关于AJAX的基础操作

    AJAX开发 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 Java ...

  4. 基于Ajax与用户认证系统的登录验证

    一.登录页面 from django.contrib import admin from django.urls import path from blog import views urlpatte ...

  5. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

  6. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)   Django基础七之 ...

  7. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

  8. jQuery之标签操作和返回顶部、登录验证、全选反选、克隆示例

    一.样式操作 1.JQ中的样式类 somenode.addClass();// 添加指定的CSS类名. somenode.removeClass();// 移除指定的CSS类名. somenode.h ...

  9. 2-功能1:基于用户认证组件和Ajax实现登录验证(图片验证码)

    1.登录页面的设计 (1)label标签的id属性 label标签的id属性,点击label标记,相当于点击了input框 bootstarp样式 class="form-group&quo ...

随机推荐

  1. HTTP 常用状态码200 301 302 403 500

    200(OK):成功处理了请求. 301 redirect: 301 代表永久性转移(Permanently Moved) //助记 1 永恒,如果你记住了这一条就算这篇博客没白写.302 redir ...

  2. Mybatis利用Intercepter实现物理分页

    一.Interceptor介绍 Mybatis 允许用户使用自定义拦截器对SQL语句执行过程中的某一点进行拦截.默认情况,可以拦截的方法如下: Executor 中的 update().query() ...

  3. TurtleBot3 Waffle (tx2版华夫)(2)系统安装

    Tx2系统默认是安装好的,由于镜像文件大于20G,无法上传百度网盘,所以如有需要请联系我们客服:下面主要是操作步骤: 2.1.准备工作 a.准备好利用Jetpack刷过机的Ubuntu的主机(HOST ...

  4. Redis性能篇(二)CPU核和NUMA架构的影响

    Redis被广泛使用的一个很重要的原因是它的高性能.因此我们必要要重视所有可能影响Redis性能的因素.机制以及应对方案.影响Redis性能的五大方面的潜在因素,分别是: Redis内部的阻塞式操作 ...

  5. TCP三次握手(通俗易懂)

    一--导读 前不久中国和外国RPEC协议的签订,标志着东亚自贸区的建立成功.现在韩国和日本要做贸易.日本一直监听着韩国总统的一举一动,但他又不会主动.(服务器的监听状态)只是被动的等着韩国总统先开口. ...

  6. ocelot 中间件的变化

    ocelot 中间件的变化 Intro 之前我们使用 ocelot 的时候自定义了一些中间件来实现我们定制化的一些需求,最近博客园上有小伙伴问我怎么使用,他用的版本是 16.0 版本,16.0 和 1 ...

  7. Task1:知识图谱介绍(1天)

    一.知识图谱简介 "知识图谱本质上是语义网络(Semantic Network)的知识库".但这有点抽象,所以换个角度,从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图( ...

  8. Java JVM——9.方法区

    前言 方法区是运行时数据区的最后一个部分: 从线程共享与否的角度来看: 大家可能在这里有些疑惑,方法区和元空间的关系到底是怎样的?请往下看,下面会为大家解惑. 栈.堆.方法区的交互关系 下面就涉及了对 ...

  9. xtrabackup不完全恢复

    例如,在2014年6月26日下午14:00的时候有人误操作drop掉了一张表,由于库不是很大,并且为测试库,并没有访问,这个时候,我们可以进行基于位置和时间点的不完全恢复 先找到早上的备份,查看那xt ...

  10. Electron入门Demo之桌面应用计算器笔记(二)

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14307996.html 在之前总结了一篇自学笔记,通过之前学习到的方法和知识,完成了 ...