Django后端之ajax

1 > ajax简介

   ajax的作用就是可以在页面不刷新的情况下,实现与后端进行数据交互。其中它的重点就是一个异步提交和局部刷新的这么一个机制。例如:码云用户注册无需点击按钮内部也可完成数据交互。

   ajax不是一门全新的知识,本质就是一些js代码。我们学习ajax直接使用jQuery封装之后的版本(语法更加的简单)使用ajax的前提必须要引入jQuery文件。

1.1 > 案例学习

   学习ajax一定要能够发现与form表单提交数据的区别。


	ajax提交数据页面不用刷新 原始数据还在 处理数据的过程中不影响页面其他的操做
	form表单提交数据页面刷新 原始数据不在 并且处理数据的过程中无法做其他操做
	

   页面上有 三个input框和一个提交按钮 前俩个框输入数字 点击按钮最后一个框里面展示数字的和,并且页面不能刷新。具体操做如下:


<script>
	$('#btn').click(function(){		# 查找标签绑定点击事件
			// 获取两个input框中的数据
			let i1Val = $('#i1').val();
            let i2Val = $('#i2').val();
            // 发送ajax请求传输数据
            $.ajax({
                url:'',  // 不写默认就是当前页面所在的地址
                type:'post', // 指定当前请求方式
                data:{'i1':i1Val,'i2':i2Val},  // 请求携带的数据
                success:function (args) {  // 异步回调函数 后端有回复自动触发
                    $('#i3').val(args)
                }
            })
		})
</script>

2 > 前后端传输数据编码格式


	请求体中携带编码格式
		Content-Type:...
	django针对不同编码方式对应的数据格式会采用不同的处理策略

2.1 > form表单默认发送的编码格式


	请求体中携带编码格式
		Content-Type: application/x-www-form-urlencoded
		
  	数据格式:
  		username=jason&password=123
  		
  	django后端会自动处理到:
  		request.POST

2.2 > form表单发送文件

	
	请求体中携带编码格式
		Content-Type: multipart/form-data
		
  	数据格式:
  		隐藏不让看
  		
  	django后端会自动处理到:
  		request.POST  request.FILES

2.3 > ajax默认的编码格式


	请求体中携带编码格式:
		Content-Type: application/x-www-form-urlencoded

	数据格式:
		username=jason&password=123

	django后端会自动处理到:
		request.POST
		

3 > ajax发送json格式数据

   form表单是无法发送json格式数据的!!!
   ajax发送的数据类型一定要跟数据的编码格式一致

	
	编码格式是urlencoded 
	数据格式就应该是username=jason&password=123
	但是你却发送了json格式数据

   django后端争对json格式的数据不会做任何的处理 就在request.body内
需要我们自行处理。


	$('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',  // 不写默认也是get请求
            contentType:'application/json',  // 不写默认是urlencoded编码
            data:JSON.stringify({'name':'jason','pwd':123}),  // 序列化方法
            success:function (args) {
            }
        })
    })

	def add(request):
	    if request.method =='POST':
	        print(request.POST)
	        print(request.body)
	        json_bytes = request.body
	        json_dict = json.loads(json_bytes)
	        print(json_dict)
	        print(json_dict.get('name'))
    return render(request, 'add.html')

4 > ajax携带文件数据


	$("#d1").click(function () {
	        // 需要利用内置js内置对象FormData
	        let myFormData = new FormData();
	        // 对象添加普通数据
	        myFormData.append('username',$('#name').val())
	        myFormData.append('password',$('#pwd').val())
	        // 对象添加文件数据
	        myFormData.append('my_file',$('#file')[0].files[0])
	        // 发送ajax请求
	        $.ajax({
	            url:'',
	            type:'post',
	            data:myFormData,
	            // 携带文件必须要指定的两个参数
	            contentType:false,
	            processData:false,
	            success:function (args) {
	                // 处理异步回调返回的结果
	            }
	        })
	    })

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Django 后端获取前端 Vue 数据,有以下几种方法: 1. 发送 Ajax 请求 前端通过 Ajax 请求将数据发送到 Django 后端Django 后端接收请求并处理数据。 Vue 代码: ``` axios.post('/api/data', { data: 'hello world' }) ``` Django 代码: ``` from django.http import JsonResponse def data(request): data = request.POST.get('data') # 处理数据 return JsonResponse({'message': 'success'}) ``` 2. 表单提交 前端通过表单提交将数据发送到 Django 后端Django 后端接收请求并处理数据。 Vue 代码: ``` <form method="post" action="/api/data"> <input type="hidden" name="data" value="hello world"> <button type="submit">提交</button> </form> ``` Django 代码: ``` from django.http import JsonResponse def data(request): data = request.POST.get('data') # 处理数据 return JsonResponse({'message': 'success'}) ``` 3. WebSocket 使用 WebSocket 实时通信,前端通过 WebSocket 将数据实时发送到 Django 后端Django 后端接收请求并处理数据。 Vue 代码: ``` const socket = new WebSocket('ws://localhost:8000/ws/') socket.onopen = () => { socket.send('hello world') } socket.onmessage = (event) => { // 处理数据 } ``` Django 代码: ``` import asyncio import websockets async def echo(websocket, path): async for message in websocket: # 处理数据 await websocket.send('success') start_server = websockets.serve(echo, 'localhost', 8000) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() ``` 需要注意的是,WebSocket 需要使用第三方库 `websockets`,需要安装。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值