博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之路_django中ajax应用
阅读量:5286 次
发布时间:2019-06-14

本文共 4838 字,大约阅读时间需要 16 分钟。

一、Ajax介绍

  AjaxAsynchronous Javascript And XML)翻译成中文就是异步JavascriptXML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

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

  Ajax除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)。因此使用ajax的主要特点有如下几点:(1)Ajax使用Javascript技术向服务器发送异步请求;(2)Ajax无须刷新整个页面;(3)因为服务器响应内容不再是整个页面,而是页面中的局部,所以Ajax性能高。在django入门项目中我们已经简单的介绍了一下ajax应用。下面我们将做详细介绍。

二、ajax实现方式

  具体实现方式实例如下:

html文件部分:

后端函数部分:

三、$.Ajax的参数

1、contentType类型一 

  上述实例中是我们对ajax的基本使用,也是ajax中参数contentType的默认使用方式,他决定了发送信息至服务器时内容编码的类型。现将此参数的默认使用方式总结如下:

data:        当前ajax请求要携带的数据,是一个object对象,ajax方法就会默认地把它编码成某种格式(urlencoded:?a=1&b=2)发送给服务端;此外,ajax默认以get方式发送请求。 contentType:"application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。用来指明当前请求的数据编码格式;urlencoded:?a=1&b=2;

2、contentType类型二  

  上述这种默认参数形式,data中的csrf跨站请求伪造键值对会被中间件自动识别,contentType参数还有如下一种形式,介绍如下:

contentType:"application/json",即向服务器发送一个json字符串。注意:contentType:"application/json"一旦设定,data必须是json字符串,不能是json对象

html文件部分:

后端函数部分:

  上述通过headers参数发送csrf跨站请求伪造其实共有两种方式获取那个值,分别总结如下:

方式一:   headers:{
"X-CSRFToken":$("[name='csrfmiddlewaretoken']").val()} 方式二:   headers:{
"X-CSRFToken":$.cookie("csrftoken")}, #其中方式二需引用jquery.cookie.js文件,如:
                           

 四、上传文件

1、form表单上传

  如下实例以注册页面为例,form表单提交的时候需要在form中设置enctype="multipart/form-data"属性,使得form中数据和file文件以不同的方式发送值后端,后端通过不同的方法取出相应的数据进行处理。

html文件:

{% csrf_token %}

注册页面

{
{ error_msg }}

后端处理函数:

import os from day78.settings import BASE_DIR
def formreg(request):    if request.method=="POST":        print(request.POST)        user=request.POST.get("username")        userpswd1=request.POST.get("userpswd1")        userpswd2=request.POST.get("userpswd2")        print(user,userpswd1,userpswd2)        if userpswd1==userpswd2:            User.objects.create_user(username=user,password=userpswd1)            print(request.FILES)            file_obj=request.FILES.get("img_file")    #获取文件对象            file_name=file_obj.name                   #获取文件名字            path = os.path.join(BASE_DIR, "app01", "static", file_name)            with open(path,"wb") as f:                for line in file_obj:                    f.write(line)            return HttpResponse("注册成功")    return render(request,"formreg.html")

2、ajax上传文件

html文件部分:

{
% csrf_token %}

注册页面

后端处理函数:

  与form提交处理的方式一样,如下:

import osfrom day78.settings import BASE_DIRdef ajaxreg(request):    if request.is_ajax():        username = request.POST.get("username")        userpswd1 = request.POST.get("userpswd1")        userpswd2 = request.POST.get("userpswd2")        print(username, userpswd1, userpswd2)        if userpswd1 == userpswd2:            User.objects.create_user(username=username, password=userpswd1)            print(request.FILES)            file_obj = request.FILES.get("img_file")  # 获取文件对象            file_name = file_obj.name                 # 获取文件名字            path = os.path.join(BASE_DIR, "app01", "static", file_name)            with open(path, "wb") as f:                for line in file_obj:                    f.write(line)            return HttpResponse("注册成功")        else:            return HttpResponse("注册失败")    return render(request,"ajaxreg.html")

 

转载于:https://www.cnblogs.com/seven-007/p/8034043.html

你可能感兴趣的文章
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
css & input type & search icon
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
MetaWeblog API Test
查看>>
c# 文件笔记
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
线程池的概念
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>