• ajax-简介和实现注册登录


    ajax知识点介绍:

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

    优点:

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

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

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

    $.ajax参数

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

    csrf跨站请求伪造三种

     1 第一种
     2 同一个xml里面,不需要写csrf_token
     3 $.ajaxSetup({
     4     data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
     5 });
     6 
     7 第二种
     8 需要写csrf_token
     9 <form>
    10 {% csrf_token %}
    11 </form><br><br><br>$.ajax({<br>...<br>data:{
    12 
    13 提交时候 ajax data里面的键值对
    14 "csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val();
    15 
    16 第三种
    17 需引用jquery.cookie.js
    18 <script src="{% static 'js/jquery.cookie.js' %}"></script>
    19 $.ajax({
    20 headers:{"X-CSRFToken":$.cookie('csrftoken')},
    21 })

    登陆注册实例

    创建django app01项目

    无数据库models

    1. urls

    1 urlpatterns = [
    2     url(r'^admin/', admin.site.urls),
    3     url(r'^login/', views.login),
    4     url(r'^reg/', views.reg),
    5 ]

    2. views

     1 from django.shortcuts import render,HttpResponse
     2 
     3 # Create your views here.
     4 
     5 
     6 def login(request):
     7     if request.is_ajax(): # 判断是不是ajax提交的数据
     8         print(request.body) # b'{"user":"alex","pwd":"123"}'
     9         # b'user=alex&pwd=123&csrfmiddlewaretoken=PCLE4jNWOmLcmd5LiY1qrwTWQZLpZdSktwwwPswNKg7DhblKO6X1fBDkB05yoNMm'
    10         print(request.POST) # {'user': ['alex'], 'pwd': ['123'], 'csrfmiddlewaretoken': ['PCLE4jNWOmLcmd5LiY1qrwTWQZLpZdSktwwwPswNKg7DhblKO6X1fBDkB05yoNMm']}
    11         print(request.GET)  # {}
    12 
    13         # user=request.POST.get("user")
    14         # pwd=request.POST.get("pwd")
    15  
    16         # import json
    17         # s=request.body.decode("utf8")
    18         # d=json.loads(s)
    19         # print(d.get("user"))
    20         # print(d.get("pwd"))
    21         return HttpResponse("OK")
    22 
    23     return render(request,"index.html")
    24 
    25 
    26 
    27 def reg(request):
    28     if request.is_ajax():
    29         print(request.POST,"=======")
    30 
    31         return HttpResponse("OK")
    32 
    33     return render(request,"reg.html")

    3. index.html

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
     7     <script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
     8 </head>
     9 <body>
    10 
    11 {##}
    12 {#<form action="">#}
    13 {#    自动生成一个input标签#}
    14 {#    {% csrf_token %}#}
    15 {#    <p>姓名:<input type="text" id="user"></p>#}
    16 {#    <p>密码:<input type="password" id="pwd"></p>#}
    17 {#    <input type="button" value="submit" id="button">#}
    18 {#</form>#}
    19 
    20 <button class="send_Ajax">send_Ajax</button>
    21 
    22 
    23 
    24 {#<script>#}
    25 {#    $(":button").click(function () {#}
    26 {#        第一种方式,表单里面不需要写{% csrf_token %}#}
    27 {#        $.ajaxSetup({#}
    28 {#          data: {csrfmiddlewaretoken: '{{ csrf_token }}'}#}
    29 {#        });#}
    30 {##}
    31 {#        $.ajax({#}
    32 {#            url:"/login/",#}
    33 {#            type:"POST",#}
    34 {#            data:JSON.stringify({   传送到前端的是json对象#} 
    35 {#                user:$("#user").val(),#}
    36 {#                pwd:$("#pwd").val(),#}
    37             # 预期服务器返回的数据类型,ajax会根据服务器返回的content Type来进行转换,没有这行也可以,相当于下面的contentType
    38 {#              dataType:"json",} 
    39 {#                第二种方式#}
    40 {#                csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val()#}
    41 {#            }),  // 'user=alex&pwd=123'#}
    42 {#            //contentType:"application/x-www-form-urlencoded",  // (默认)#}
    43 {#            第三种方式,数据都在body里面#}
    44 {#            headers:{"X-CSRFToken":$("[name='csrfmiddlewaretoken']").val()},#}
    45 {#            同上#}
    46 {#            headers:{"X-CSRFToken":$.cookie("csrftoken")},#}
    47 {#            contentType:"application/json", 预期服务器返回的数据类型#}
    48 {#            success:function (data) {#}
    49 {#                 console.log(data)#}
    50 {#            }#}
    51 {#        })#}
    52 {#    })#}
    53 {#</script>#}
    54 
    55 
    56 <script>
    57     $('#butsend_Ajaxon').click(function () {
    58 {#        $.ajaxSetup({#}
    59 {#            data:{csrfmiddlewaretoken: '{{ csrf_token }}'}#}
    60 {#            data:{csrfmiddlewaretoken:'{{ csrf_token }}'}#}
    61 {#        });#}
    62 
    63         $.ajax({
    64             url:'/login/',
    65             type:'POST',
    66             date:{
    67                 user:'alex',
    68                 pwd:'123'
    69 {#                user:$('#user').val(),#}
    70 {#                pwd:$('#pwd').val()#}
    71             },
    72 {#            csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),#}
    73 {#            contentType:'application/x-www-form-urlencoded',#}
    74             success:function (data) {
    75                 console.log(data)
    76             }
    77         })
    78     })
    79 </script>
    80 
    81 </body>
    82 </html>

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

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

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

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

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

    4. reg.html

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
     7     <script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
     8 </head>
     9 <body>
    10 
    11 
    12 <form id="myForm" action="/reg/" method="post">
    13     {% csrf_token %}
    14     <input name="uid" type="hidden" value="1" />
    15     <input id=user name="username" type="text" value="张三" />
    16     <input name="password" type="text" value="123456" />
    17     <select name="grade" id="grade">
    18         <option value="1">一年级</option>
    19         <option value="2">二年级</option>
    20         <option value="3" selected="selected">三年级</option>
    21         <option value="4">四年级</option>
    22         <option value="5">五年级</option>
    23         <option value="6">六年级</option>
    24     </select>
    25     <input name="sex" type="radio" checked="checked" value="1" />26     <input name="sex" type="radio" value="0" />27     <input name="hobby" type="checkbox" checked="checked" value="1" />游泳
    28     <input name="hobby" type="checkbox" checked="checked" value="2" />跑步
    29     <input name="hobby" type="checkbox" value="3" />羽毛球
    30     <input name="btn" id="btn" type="button" value="点击" />
    31 
    32 </form>
    33 
    34 
    35 <script>
    36     $("#btn").click(function () {
    37 
    38         $.ajax({
    39             url:"/reg/",
    40             type:"POST",
    41             //data:$("#myForm").serialize(),  #序列化<form>内的所有表单元素
    42             data:$(":checkbox,:radio,#user,[name='csrfmiddlewaretoken']").serialize(), # 直接对部分表单元素进行序列化。
    43             success:function (data) {
    44                 console.log(data)
    45             }
    46 
    47         })
    48         
    49       
    50     })
    51 </script>
    52 <script>
    53 {#    $(":button").click(function () {#}
    54 {##}
    55 {#        $.ajax({#}
    56 {#            url:"/login/",#}
    57 {#            type:"POST",#}
    58 {#            data:JSON.stringify({#}
    59 {#                user:$("#user").val(),#}
    60 {#                pwd:$("#pwd").val()#}
    61 {#                //csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val()#}
    62 {#            })#}
    63 {#            ,  // 'user=alex&pwd=123'#}
    64 {#            //contentType:"application/x-www-form-urlencoded",  // (默认)#}
    65 {#            //headers:{"X-CSRFToken":$("[name='csrfmiddlewaretoken']").val()},#}
    66 {#            headers:{"X-CSRFToken":$.cookie("csrftoken")},#}
    67 {#            contentType:"application/json",#}
    68 {#            success:function (data) {#}
    69 {#                 console.log(data)#}
    70 {#            },#}
    71 {##}
    72 {#        })#}
    73 {#    })#}
    74 </script>
    75 </body>
    76 </html>
  • 相关阅读:
    文件的类型
    读取文件,并按原格式输出文件内容的三种方式
    react hook代码框架
    器具的行为模式
    设计模式
    cpu 内存 机器语言 汇编 高级语言 平台之间的关系
    操作系统之内存
    操作系统之文件
    操作系统之IO
    七层模型之应用层
  • 原文地址:https://www.cnblogs.com/jokerbj/p/8153336.html
Copyright © 2020-2023  润新知