ajax知识点介绍:

异步Javascript和XML,用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML),也有可能是json

优点:

  1. AJAX使用Javascript技术向服务器发送异步请求;

  2. AJAX无须刷新整个页面;

  3. 因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX性能高;

$.ajax参数

 ######################------------data---------################

        data: 当前ajax请求要携带的数据,是一个json的object对象,ajax方法就会默认地把它编码成某种格式
(urlencoded:?a=1&b=2)发送给服务端;此外,ajax默认以get方式发送请求。 function testData() {
$.ajax("/test",{ //此时的data是一个json形式的对象
data:{
a:1,
b:2
}
}); //?a=1&b=2
######################------------processData---------################ processData:声明当前的data数据是否进行转码或预处理,默认为true,即预处理;if为false,
那么对data:{a:1,b:2}会调用json对象的toString()方法,即{a:1,b:2}.toString()
,最后得到一个[object,Object]形式的结果。 ######################------------contentType---------################ contentType:默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。
用来指明当前请求的数据编码格式;urlencoded:?a=1&b=2;如果想以其他方式提交数据,
比如contentType:"application/json",即向服务器发送一个json字符串:
$.ajax("/ajax_get",{ data:JSON.stringify({
a:22,
b:33
}),
contentType:"application/json",
type:"POST", }); //{a: 22, b: 33} 注意:contentType:"application/json"一旦设定,data必须是json字符串,不能是json对象 views.py: json.loads(request.body.decode("utf8")) ######################------------traditional---------################ traditional:一般是我们的data数据有数组时会用到 :data:{a:22,b:33,c:["x","y"]},
traditional为false会对数据进行深层次迭代;

csrf跨站请求伪造三种

 第一种
同一个xml里面,不需要写csrf_token
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
}); 第二种
需要写csrf_token
<form>
{% csrf_token %}
</form><br><br><br>$.ajax({<br>...<br>data:{ 提交时候 ajax data里面的键值对
"csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val(); 第三种
需引用jquery.cookie.js
<script src="{% static 'js/jquery.cookie.js' %}"></script>
$.ajax({
headers:{"X-CSRFToken":$.cookie('csrftoken')},
})

登陆注册实例

创建django app01项目

无数据库models

1. urls

 urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^reg/', views.reg),
]

2. views

 from django.shortcuts import render,HttpResponse

 # Create your views here.

 def login(request):
if request.is_ajax(): # 判断是不是ajax提交的数据
print(request.body) # b'{"user":"alex","pwd":"123"}'
# b'user=alex&pwd=123&csrfmiddlewaretoken=PCLE4jNWOmLcmd5LiY1qrwTWQZLpZdSktwwwPswNKg7DhblKO6X1fBDkB05yoNMm'
print(request.POST) # {'user': ['alex'], 'pwd': ['123'], 'csrfmiddlewaretoken': ['PCLE4jNWOmLcmd5LiY1qrwTWQZLpZdSktwwwPswNKg7DhblKO6X1fBDkB05yoNMm']}
print(request.GET) # {} # user=request.POST.get("user")
# pwd=request.POST.get("pwd") # import json
# s=request.body.decode("utf8")
# d=json.loads(s)
# print(d.get("user"))
# print(d.get("pwd"))
return HttpResponse("OK") return render(request,"index.html") def reg(request):
if request.is_ajax():
print(request.POST,"=======") return HttpResponse("OK") return render(request,"reg.html")

3. index.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
</head>
<body> {##}
{#<form action="">#}
{# 自动生成一个input标签#}
{# {% csrf_token %}#}
{# <p>姓名:<input type="text" id="user"></p>#}
{# <p>密码:<input type="password" id="pwd"></p>#}
{# <input type="button" value="submit" id="button">#}
{#</form>#} <button class="send_Ajax">send_Ajax</button> {#<script>#}
{# $(":button").click(function () {#}
{# 第一种方式,表单里面不需要写{% csrf_token %}#}
{# $.ajaxSetup({#}
{# data: {csrfmiddlewaretoken: '{{ csrf_token }}'}#}
{# });#}
{##}
{# $.ajax({#}
{# url:"/login/",#}
{# type:"POST",#}
{# data:JSON.stringify({ 传送到前端的是json对象#}
{# user:$("#user").val(),#}
{# pwd:$("#pwd").val(),#}
# 预期服务器返回的数据类型,ajax会根据服务器返回的content Type来进行转换,没有这行也可以,相当于下面的contentType
{# dataType:"json",}
{# 第二种方式#}
{# csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val()#}
{# }), // 'user=alex&pwd=123'#}
{# //contentType:"application/x-www-form-urlencoded", // (默认)#}
{# 第三种方式,数据都在body里面#}
{# headers:{"X-CSRFToken":$("[name='csrfmiddlewaretoken']").val()},#}
{# 同上#}
{# headers:{"X-CSRFToken":$.cookie("csrftoken")},#}
{# contentType:"application/json", 预期服务器返回的数据类型#}
{# success:function (data) {#}
{# console.log(data)#}
{# }#}
{# })#}
{# })#}
{#</script>#} <script>
$('#butsend_Ajaxon').click(function () {
{# $.ajaxSetup({#}
{# data:{csrfmiddlewaretoken: '{{ csrf_token }}'}#}
{# data:{csrfmiddlewaretoken:'{{ csrf_token }}'}#}
{# });#} $.ajax({
url:'/login/',
type:'POST',
date:{
user:'alex',
pwd:''
{# user:$('#user').val(),#}
{# pwd:$('#pwd').val()#}
},
{# csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),#}
{# contentType:'application/x-www-form-urlencoded',#}
success:function (data) {
console.log(data)
}
})
})
</script> </body>
</html>

通过注册页面来看 jQuery.serialize()

serialize()函数用于序列化一组表单元素,将表单内容编码为用于提交的字符串

该函数主要根据用于提交有效表单控件的name和value,将它们拼接为一个可直接用于表单提交的文本字符串

该函数不会序列化不需要提交的表单控件,这和常规的表单提交行为是一致的。例如:不在<form>标签内的表单控件不会被提交、没有name属性的表单控件不会被提交、带有disabled属性的表单控件不会被提交、没有被选中的表单控件不会被提交。

serialize()函数的返回值为String类型,返回将表单元素编码后的可用于表单提交的文本字符串。

4. reg.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
</head>
<body> <form id="myForm" action="/reg/" method="post">
{% csrf_token %}
<input name="uid" type="hidden" value="" />
<input id=user name="username" type="text" value="张三" />
<input name="password" type="text" value="" />
<select name="grade" id="grade">
<option value="">一年级</option>
<option value="">二年级</option>
<option value="" selected="selected">三年级</option>
<option value="">四年级</option>
<option value="">五年级</option>
<option value="">六年级</option>
</select>
<input name="sex" type="radio" checked="checked" value="" />男
<input name="sex" type="radio" value="" />女
<input name="hobby" type="checkbox" checked="checked" value="" />游泳
<input name="hobby" type="checkbox" checked="checked" value="" />跑步
<input name="hobby" type="checkbox" value="" />羽毛球
<input name="btn" id="btn" type="button" value="点击" /> </form> <script>
$("#btn").click(function () { $.ajax({
url:"/reg/",
type:"POST",
//data:$("#myForm").serialize(), #序列化<form>内的所有表单元素
data:$(":checkbox,:radio,#user,[name='csrfmiddlewaretoken']").serialize(), # 直接对部分表单元素进行序列化。
success:function (data) {
console.log(data)
} }) })
</script>
<script>
{# $(":button").click(function () {#}
{##}
{# $.ajax({#}
{# url:"/login/",#}
{# type:"POST",#}
{# data:JSON.stringify({#}
{# user:$("#user").val(),#}
{# pwd:$("#pwd").val()#}
{# //csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val()#}
{# })#}
{# , // 'user=alex&pwd=123'#}
{# //contentType:"application/x-www-form-urlencoded", // (默认)#}
{# //headers:{"X-CSRFToken":$("[name='csrfmiddlewaretoken']").val()},#}
{# headers:{"X-CSRFToken":$.cookie("csrftoken")},#}
{# contentType:"application/json",#}
{# success:function (data) {#}
{# console.log(data)#}
{# },#}
{##}
{# })#}
{# })#}
</script>
</body>
</html>

ajax-简介和实现注册登录的更多相关文章

  1. 使用ajax 做注册登录示例,

    需求:使用AJAX 做一个注册登录示例, 如用户名已存在, 在填写用户名时给与提示. 1:首先创建一个新的django项目.做好配置 在settings.py文件里做好数据库配置: 1. 告诉Djan ...

  2. 再学ajax--第二天 | 基于php+mysql+ajax的表单注册、登录、注销

    写在前面 ajax学习到了第二天,这次是用第一天封装的ajax函数,后端使用了php+mysql实现基本的注册,登录,注销. php是我前几个月get到的技能,我已经学习到了面向对象,知道各修饰符的含 ...

  3. AJAX实现简单的注册页面异步请求

    p { margin: 0px; padding: 0px } AJAX简介 (1)AJAX = 异步 JavaScript 和 XML. (2)AJAX 是一种用于创建快速动态网页的技术. (3)通 ...

  4. Discuz! X2.5判断会员登录状态及外部调用注册登录框

    Discuz! X2.5判断会员登录状态及外部调用注册登录框 有关discuz论坛会员信息,收集的一些资料: 用dedecms+discuz做了个门户加论坛形式的网站,但是dedecms顶部目前只能q ...

  5. Node.js基于Express框架搭建一个简单的注册登录Web功能

    这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...

  6. Node.js原生及Express方法实现注册登录原理

    由于本文只是实现其原理,所以没有使用数据库,只是在js里面模拟数据库,当然是种中还是需要用数据库的. 1.node.js原生方法 ①html页面,非常简单,没有一丝美化~我们叫它user.html & ...

  7. 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能

    现在网站基本都用手机注册,很少用邮箱注册,本篇内容比较多,代码我会尽量加备注,有些操作需要连续添加几个文件才不报错,如果VS显示错误,请继续后续步骤. 前面已经有一篇文章讲到集成短信发送模块:http ...

  8. vue2.0+koa2+mongodb实现注册登录

    前言 前段时间和公司一个由技术转产品的同事探讨他的职业道路,对我说了一句深以为然的话: "不要把自己禁锢在某一个领域,技术到产品的转变,首先就是思维上的转变.你一直做前端,数据的交互你只知道 ...

  9. SpringBoot注册登录(三):注册--验证账号密码是否符合格式及后台完成注册功能

    SpringBoot注册登录(一):User表的设计点击打开链接SpringBoot注册登录(二):注册---验证码kaptcha的实现点击打开链接      SpringBoot注册登录(三):注册 ...

  10. ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录

    首先介绍下短信注册登录流程: 注册页面点击获取手机号验证码按钮,用jquery的click事件POST或GET方法把手机号发送到后台控制器: 后台控制器创建函数,收到手机号后生成随机码,例如:6位的随 ...

随机推荐

  1. Object有哪些方法?

    有9个方法 1 clone 2 toString() 3 getClass 4 finalize 5 equals 6 hascode 7 notify 8 notifall 9 wait

  2. docker下运行Gitlab CE+Jenkins+Nexus3+docker-registry-frontend

    DevOps - Gitlab CE - Jenkins - Nexus Gitlab CE https://hub.docker.com/r/gitlab/gitlab-ce/ https://do ...

  3. STM32F407: USART 遇到的问题

    今天初次使用STM32F407进行USART串口通讯实验,按照f103的代码写完了,发现没法发送数据, 查看文档后发现是由于没有将端口映射到USART1,然后添加如下代码: 1 GPIO_PinAFC ...

  4. laravel利用composer安装

    composer create-project laravel/laravel --prefer-dist blog prefer:提升,提拔 dist:距离 blog 创建的项目文件夹名称 lara ...

  5. notepad++去空格空行技巧

    选择视图显示所有字符,替换成空的就行

  6. AS3中ASCII码和字符互转函数

    AS3中ASCII码和字符互转函数 字符转成ASCII码: 格式:字符串变量.charCodeAt(字符位置); var str:String = “A”; trace(str.charCodeAt( ...

  7. jsp中的session

    浏览器和服务器的异常通话 常用方法 setAttribute(String key,Object value);//设置值 getAttribute(String key); //取值 Invalid ...

  8. 有了Docker的程序猿们就能开启“上帝视角”?

    现在,如果有程序猿说不知道Docker,这将是难以想象的. 百科是这样描述Docker的."Docker是dotCloud开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植 ...

  9. Ganymed实现基本的自动化部署API

    Ganymed SSH-2 for Java是一个纯Java实现的SHH2库,官网为http://www.ganymed.ethz.ch/ssh2/,最新的更新时间为2006年10月,在用之前,请仔细 ...

  10. matlab中double和im2double

    uint8的图像里 im2double其实就是double(I/255); 像素值被标准化到0-1. 16位图像以此类推.