一、csrf_token问题
使用post请求时,需要加csrf验证
(一)如果传输的是字典格式,则在字典中添加一项
'csrfmiddlewaretoken': $("[name='csrfmiddlewaretoken']").val()
或者
'csrfmiddlewaretoken':'{{ csrf_token }}'
(二)如果传输的是标准json格式,则可在头部添加csrf验证
$.ajax({
url:'sum/',
dataType:'json',
type:'post',
contentType:'application/json',
headers:{"X-CSRFToken":$.cookie('csrftoken')},//此种方法需要script一个jq的cookie插件
//或者headers:{"X-CSRFToken":getCookie('csrftoken')}
...
})
二、ajax向后端传输数据问题
(一)字典格式
var data = {'csrfmiddlewaretoken': $("[name='csrfmiddlewaretoken']").val(),'account': account}
$.ajax({
url: "",
type: 'post',
data: data,
dataType:"json",
success: function(data) {
...}
})
直接发送即可,但记住要加csrf验证
此时,后台使用request.POST.get(key)来接收数据
(二)标准json格式
如
[ { 'name':123,
'age':19,
'gender':1},
{ 'name':123,
'age':19,
'gender':1},
...
]
则需要预处理数据
JSON 通常用于与服务端交换数据。在向服务器发送数据时一般是字符串。我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。
$.ajax({
url:'sum/',
dataType:'json',
type:'post',
headers:{"X-CSRFToken":$.cookie('csrftoken')},
data:JSON.stringify(data),
success:function(data){
...}
})
此时,后台使用request.body来接收数据,但接收的数据是“位”类型,如
b'[{"week":"2020-W34","account_name":"\xe6\x81\x92\xe5\xa4\xa7\xe8\x82\x89\xe9\xa3\x9f","account":"19930304","account_bank":"\xe4\xb8\xad\xe5\x9b\xbd\xe9\x93\xb6\xe8\xa1\x8c","bank_code":"123456","summary":"44","amount":"44","code":"4","clss":"1"}]'
需要使用decode()来解码
info = request.body.decode('utf-8')
但解码后,使用type方法发现,info的类型为str,无法使用
因此还需使用json.loads()方法(将已编码的 JSON 字符串解码为 Python 对象)
info = json.loads(request.body.decode('utf-8'))
print(type(info))
>>><class 'list'>
至此,前端json格式数据转换为后端可迭代对象
三、ajax参数列表
(一)基本格式
$.ajax({
url:'',
dataType:'',
type:'post',
headers:,
data:,
success:function(data){
...}
})
(二)参数
async | 布尔值,表示请求是否异步处理。默认是 true。 |
beforeSend(xhr) | 发送请求前运行的函数。 |
cache | 布尔值,表示浏览器是否缓存被请求页面。默认是 true。 |
complete(xhr,status) | 请求完成时运行的函数(在请求成功或失败之后均调用,即在 success 和 error 函数之后)。 |
contentType | 发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。 |
context | 为所有 AJAX 相关的回调函数规定 "this" 值。 |
data | 规定要发送到服务器的数据。 |
dataFilter(data,type) | 用于处理 XMLHttpRequest 原始响应数据的函数。 |
dataType | 预期的服务器响应的数据类型。 |
error(xhr,status,error) | 如果请求失败要运行的函数。 |
global | 布尔值,规定是否为请求触发全局 AJAX 事件处理程序。默认是 true。 |
ifModified | 布尔值,规定是否仅在最后一次请求以来响应发生改变时才请求成功。默认是 false。 |
jsonp | 在一个 jsonp 中重写回调函数的字符串。 |
jsonpCallback | 在一个 jsonp 中规定回调函数的名称。 |
password | 规定在 HTTP 访问认证请求中使用的密码。 |
processData | 布尔值,规定通过请求发送的数据是否转换为查询字符串。默认是 true。 |
scriptCharset | 规定请求的字符集。 |
success(result,status,xhr) | 当请求成功时运行的函数。 |
timeout | 设置本地的请求超时时间(以毫秒计)。 |
traditional | 布尔值,规定是否使用参数序列化的传统样式。 |
type | 规定请求的类型(GET 或 POST)。 |
url | 规定发送请求的 URL。默认是当前页面。 |
username | 规定在 HTTP 访问认证请求中使用的用户名。 |
xhr | 用于创建 XMLHttpRequest 对象的函数。 |
(三)常用参数
url | 规定发送请求的 URL。默认是当前页面。 |
type | 规定请求的类型(GET 或 POST)。 |
data | 规定要发送到服务器的数据。 |
dataType | 预期的服务器响应的数据类型。 |
contentType | 发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。 |
success | 当请求成功时运行的函数。 |
error | 如果请求失败要运行的函数。 |