zoukankan      html  css  js  c++  java
  • 8.Django --Ajax

    Django --Ajax

    1.简介

    以前:往后台提交数据,form表单标签
    
    js语言中封装的一个发送http请求的模块,xmlhttprequest对象,经过jquery的封装起名为ajax
    
    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。
    AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行
    
    ​		a.同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
    ​		b.异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
    
    AJAX特点:
      1.异步传输数据
      2.浏览器页面局部刷新
    

    2.使用Ajax需要引入jQuery文件

    1.引入静态文件
    	在根目录创建statics(名字随意)目录,把jquery.js文件复制到目录下
    	在settings.py配置--引入静态文件路径,如下:
    	STATICFILES_DIRS = [
       		 os.path.join(BASE_DIR,'statics')
    	]
    2.html文件引入jquery.js
    	1.首先引入静态文件{% load static %} <!--引入静态文件-->
    	2.script引入jquery.js
    	<script src="{% static 'jquery.js' %}"></script>
    

    3.修改响应状态码

    def login(request):
    
        if request.method == 'GET':
            # return render(request,'login.html') #响应状态码是200
            res = render(request,'login.html')
            res.status_code = 202 # 修改响应状态码
            return res
    

    4.ajax简单使用

    路由: urls.py

    from app01 import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^login/', views.login),
        url(r'^ajax_login/', views.ajax_login),
        url(r'^home/', views.home),
    ]
    

    视图: views.py

    from django.shortcuts import render,redirect,HttpResponse
    
    def ajax_login(request):
    
        if request.method == 'GET':
            return render(request,'login.html')
        else:
            print(request.POST)
            username = request.POST.get('username')
            password = request.POST.get('password')
            if username == 'jia' and password == '123':
                return HttpResponse('okk') #ajax一般不回复页面,会页面变成字符串,没用
                # HttpResponse默认状态码为200
            else:
                # return HttpResponse('not okk') #返回200状态码,
                ret = HttpResponse('not okk')
                ret.status_code = 400 #更改状态码
                return ret # 返回错误状态码,ajax执行error匿名函数
    
    
    def login(request):
    
        if request.method == 'GET':
            # return render(request,'login.html')
            ret = render(request,'login.html')
            ret.status_code = 202 # 修改响应状态码
            return ret
        else:
            print(request.POST)
            username = request.POST.get('username')
            password = request.POST.get('password')
            if username == 'jia' and password == '123':
                return render(request,'home.html')
            return redirect('/login/') # redirect默认使用状态码302
    
    def home(request):
        return render(request,'home.html')
    

    templates目录下html文件

    login.html -- 写ajax代码

    {% load static %} <!--引入静态文件-->
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .error{
                color: red;
                font-size: 12px;
            }
        </style>
    </head>
    <body>
    
    <form action="" method="post">
        用户名:<input type="text" name="username">
        密码:<input type="password" name="password">
        <input type="submit">
    </form>
    
    <hr>
        用户名:<input type="text" id="username">
        密码:<input type="password" id="pwd">
        <span class="error"></span> <!--如果密码不对,用来存放错误信息-->
        <button id="btn">ajax提交数据</button>
    
    </body>
    
    <script src="{% static 'jquery.js' %}"></script>
    <script>
        //ajax发送请求提交数据
        $('#btn').click(function (){ //触发点击事件
    
            var user = $('#username').val() //通过id获取标签中数据
            var pwd = $('#pwd').val()
    
            $.ajax({
                url:'/ajax_login/',//发送请求路径,往本网站发可以用相对路径
                // url:'http://127.0.0.1:8000/ajax_login/',//往其他网站发只能用绝对路径
                type:'post', //请求方法,post或get小写
                data:{username:user,password:pwd}, //向后台提交的数据
    
                // 接收请求成功之后的响应结果
                // 1.ajax会判断响应状态码,当状态码为2xx,3xx等时,那么表示请求和响应是正常的,那么ajax会将响应数据进行加工,并传递给success对应的匿名函数作为他的参数,也就是我们下面定义的res形参,
    
                {#success:function(res){ //后台return回来的数据#}
                {#    console.log('success>>>',res);// success>>> not ok#}
                {##}
                {#    if (res === 'okk'){#}
                {#        alert('登陆成功!!')#}
                {#    }else {#}
                {#        $('.error').text('用户名或密码有误!'); //向span标签添加错误信息#}
                {#    }#}
                {#},#}
    
                // 2.当状态码为4xx(请求错误),5xx(服务端错误)等时,那么ajax会加工响应数据并传递给error对应的函数
    
                success:function (res){
                    alert('登陆成功!!')
                    location.href = '/home/' //网页跳转到home路径,使用的浏览器的机制
                },
                error:function (error){ //后台返回更改4xx的状态码时,执行该语句
                    console.log('error>>>',error);
                    if (error.status === 400){
                        $('.error').text('用户名或密码有误!'); //向span标签添加错误信息
                        alert('用户名或密码有误')
                    }
                },
            })
        })
    
    </script>
    </html>
    

    home.html -- 通过 location.href = '路径' 跳转的页面

    <body>
    
    <h1>欢迎来到首页</h1>
    
    </body>
    
  • 相关阅读:
    微信小程序真机预览跟本地不同的问题。原文地址:https://blog.csdn.net/qq_27187991/article/details/69664247/
    java 获取目标时间到当前时间中间的月份和每月最大时间
    关于事物与性能的测试
    两步搞定一台电脑同时开启多个tomcat
    一个java新手配置IIS服务器的血泪史
    16、指数加权平均算法介绍及偏差修正
    15、优化算法之Mini-batch 梯度下降法
    14、改善深层神经网络之梯度检验
    13、改善深层神经网路之权重初始化方法
    12、改善深层神经网络之梯度消失与梯度爆炸及其具体解决方案
  • 原文地址:https://www.cnblogs.com/jia-shu/p/14589825.html
Copyright © 2011-2022 走看看