django框架 day07
今日内容:
1.choices字段(也可以成为参数)
2.MTV与MVC模型
3.contentType前后端传输数据编码格式
4.Ajax
5.序列化组件
6.Ajax结合sweetalert组件
7.自定义分页器的使用
1.choices字段(也可以称为参数)
建立一个对应关系的,比如说有一个性别字段,分为男和女,你写字符比较占用资源,可以用数字来代表,用choices来建立一个对应关系,比如说0代表男,1代表女,这样数量一旦多了起来,就大大的节省了资源。
代码实现:models里面
class User(models.Model):username = models.CharField(max_length=32)age = models.IntegerField()choices = ((1,'男'),(2,'女'),(3,'其他'))gender = models.IntegerField(choices=choices)
1 存choice里面罗列的数字与中文对应关系 print(user_obj.get_gender_display()) 只要是choices字段 在获取数字对应的注释 固定语法 get_choices字段名_display() 2 存没有罗列出来的数字 不会报错 还是展示数字 测试文件:tests里面固定写法
user_obj = models.User.objects.filter(pk=7).first() print(user_obj.get_gender_display())
"""只要是choices字段 在获取数字对应的注释 固定语法get_choices字段名_display()"""
2.MTV与MVC模型
MTV与MVC模型django框架 自称为是MTV框架M:modelsT:templatesV:viewsMVCM:modelsV:viewsC:controller 控制器(urls)ps: 本质上MTV其实也是MVC
3.contentType前后端传输数据编码格式
前后端传输数据编码格式 1.urlencoded 2.formdata 3.json
form表单:
默认使用的编码和格式是urlencoded数据的格式:name=jason&pwd=123 就是什么等于什么django后端针对urlencoded编码格式的数据会自动解析并放到request.POST中供用户获取我们也可以修改为formdata 来传文件: django后端针对只要是符合urlencoded编码格式的数据(name=jason&pwd=123)都会自动解析并放到request.POST中供用户获取如果是文件 只要你指定的编码是formdata 就会自动解析并放到request.FILES中 总结:前后端传输数据的时候 一定要保证数据格式和你的编码格式是一致的 不能骗人家!!!前端代码:
1 <form action="" method="post" enctype="multipart/form-data"> 2 username:<input type="text" name="name"> 3 password:<input type="text" name="pwd"> 4 info:<input type="file" name="myfile"> 5 <input type="submit"> 6 </form>
View Code
后端代码:
1 def index(request): 2 # 验证前后端传输数据的编码格式 3 if request.method == 'POST': 4 print('request.POST',request.POST) 5 print('request.FILES',request.FILES) 6 return render(request,'index.html')
View Code
Ajax提交数据:
ajax默认数据提交方式也是urlencoded ajax发送json格式数据django后端针对json格式的数据 并不会自动解析放到request.POST或者request.FILES里面 它并不会解析json格式数据 而是将它原封不动的放在request.body中了
4.Ajax简介:
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求; 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
简单来说:
异步提交,局部刷新请求方式 GET POSTa标签href属性 GET请求浏览器窗口输入url GET请求form表单 GET/POSTAjax GET/POST首先Ajax这门技术是js中的,但是原生的js操作Ajax比较繁琐,我们这里为了提高效率,直接使用jQuery封装版本的Ajax Ajax基本语法:url:提交的地址(不写的话就朝当前的地址发送)type:提交的方式data:提交的数据success:回调函数
基于Ajax写一个小列子:
页面上有三个input框 在前两个input框中输入数字 点击按钮 发送ajax请求 不刷新页面的情况下 第三个框中自动算出两数之和
前端:
1 <input type="text" id="i1">+<input type="text" id="i2">=<input type="text" id="i3"> 2 <button id="b1">求和</button> 3 4 5 <script> 6 $('#b1').on('click',function () { 7 //点击按钮 朝后端发送post请求 8 $.ajax({ 9 url: '', // 控制发给谁,不写就是朝当前地址提交 10 type: 'post', //发送方式是post请求 11 data:{'i1':$('#i1').val(),'i2':$('#i2').val()}, // 发送的数据,点val是拿到input框里面的值 12 success:function (data) { //data形参是用来接收异步提交的结果的 ,回调函数 13 {#alert(data)#} 14 //将后端计算好的结果,通过DOM操作,渲染到第三个input框中 15 $('#i3').val(data) 16 } 17 }) 18 })
View Code
后端:
1 def index(request): 2 # print(request.is_ajax()) # 可以用来判断当前请求方式是否为ajax请求 3 if request.is_ajax(): 4 if request.method == 'POST': 5 # 获取提交过来的数据,然后进行相加 6 i1 = request.POST.get('i1') 7 i2 = request.POST.get('i2') 8 # 不能直接相加,因为后端获取的前端数据,都是字符串格式 9 res = int(i1) + int(i2) 10 return HttpResponse(res) 11 return render(request,'index.html')
View Code
Ajax提交json格式的数据:
ajax默认数据提交方式也是urlencoded ajax发送json格式数据django后端针对json格式的数据 并不会自动解析放到request.POST或者request.FILES里面 它并不会解析json格式数据 而是将它原封不动的放在request.body中了 需要注意的点:前端
1.你需要告诉后端这次你提交的是json格式的数据:
contentType:'application/json'2.你需要把你的数据转为json格式,因为前后端传输数据的话,一定要保证数据格式和你的编码格式是一致的
后端要注意的点:1.后端接收数据的时候,必须要自己处理一下数据,数据再body里面,先解码,然后在loads反序列化一下 前端代码:
1 2 <input type="text" id="i1">+<input type="text" id="i2">=<input type="text" id="i3"> 3 <button id="b1">求和</button> 4 5 $('#b1').on('click',function () { 6 //点击按钮 朝后端发送post请求 7 $.ajax({ 8 url: '', // 控制发给谁,不写就是朝当前地址提交 9 type: 'post', //发送方式是post请求 10 data:JSON.stringify({'username':'zy','password':123}), // 发送json格式的数据,需要明确的指定一下 11 contentType:'application/json',//告诉后端你这次的数据是json格式 12 success:function (data) { //data形参是用来接收异步提交的结果的 ,回调函数 13 {#alert(data)#} 14 //将后端计算好的结果,通过DOM操作,渲染到第三个input框中 15 $('#i3').val(data) 16 } 17 }) 18 })
View Code
后端代码:
1 def index(request): 2 3 if request.method == 'POST': 4 print('request.POST',request.POST) 5 print('request.FILES',request.FILES) 6 # print(request.body) # 打印出来是二进制数据 7 # 后端需要手动去request.body中获取json格式数据,然后自己处理 8 json_str = request.body 9 import json 10 dic_bytes = json_str.decode('utf-8') 11 rel_d = json.loads(dic_bytes) 12 print(rel_d) 13 return render(request,'index.html')
View Code
Ajax传输文件数据:
注意点:
1.Ajax传输文件数据建议使用内置队象formdata: var formData = new FormData(); 因为formDatafeicha非常牛逼,既可以传普通的键值对,也可以传文件 2.添加普通的键值:formData.append();3.传文件,如何获取文件标签所存储的文件对象。固定语法 1.先用jQuery查找到存储文件的input标签 2.将jQuery查找到存储文件的input标签 3.利用原生js对象的方法去点files[0]获取到标签内部存储的文件对象formData.append('my_file',$('#d1')[0].files[0]);注意:ajax发送文件需要指定俩个额外的参数 processData:false,//告诉前端不要处理数据 contentType:false,//不适用任何编码,因为formdata对象自身自带编码 django后端也能够识别formdata对象 前端代码:
1 <button id="b1">求和</button> 2 3 {#ajax上传文件#} 4 <input type="file" id="d1"> 5 6 7 $('#b1').on('click',function () { 8 // ajax传输文件 建议使用内置对象formdata 9 var formData = new FormData(); //既可以传普通的键值对,也可以传文件 10 // 添加普通的键值 11 formData.append('username','zy'); 12 formData.append('password','123'); 13 //传文件,如何获取文件标签所存储的文件对象。固定语法 14 //1.先用jQuery查找到存储文件的input标签 15 //2.将jQuery查找到存储文件的input标签 16 //3.利用原生js对象的方法去点files[0]获取到标签内部存储的文件对象 17 formData.append('my_file',$('#d1')[0].files[0]); 18 $.ajax({ 19 url: '', // 控制发给谁,不写就是朝当前地址提交 20 type: 'post', //发送方式是post请求 21 data:formData, // 发送数据 22 // ajax发送文件需要指定俩个额外的参数 23 processData:false,//告诉前端不要处理数据 24 contentType:false,//不适用任何编码,因为formdata对象自身自带编码 django后端也能够识别formdata对象 25 success:function (data) { //data形参是用来接收异步提交的结果的 ,回调函数 26 {#alert(data)#} 27 //将后端计算好的结果,通过DOM操作,渲染到第三个input框中 28 $('#i3').val(data) 29 } 30 }) 31 })
View Code
后端代码:
1 def index(request): 2 3 if request.method == 'POST': 4 print('request.POST',request.POST) 5 print('request.FILES',request.FILES) 6 return HttpResponse('OK') 7 8 return render(request,'index.html')
View Code
5.序列化组件
from django.core import serializers # django自带的一个小型的序列化工具 def reg(request):user_list = models.User.objects.all()# 将所有的数据都组织成一个符合json的一个个的字典# user_l = []# for user_obj in user_list:# user_l.append(# json.dumps({'username':user_obj.username,# 'age':user_obj.age,# 'gender':user_obj.get_gender_display()# })# )res = serializers.serialize('json',user_list) # return render(request,'index.html',locals())
转载于:https://www.cnblogs.com/zahngyu/p/11575571.html
django框架 day07相关推荐
- Django框架之第二篇
Django框架之第二篇 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中). view ...
- Windows上python开发--2安装django框架
Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...
- Python技术学习之Django框架设计思想
Python是目前比较流行的计算机编程语言,据用丰富和强大的库,被称为胶水语言,能够把用其他语言制作的各种模块很轻松地联结在一起. Python功能强大,用途广泛,可广泛应用于云计算.web开发.科学 ...
- django框架使用mysql报错,及两种解决方法
1.django框架 settings.py文件中部分代码: DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# ...
- django框架--路由系统
目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...
- Python3搭建Django框架浅析
前言 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django 是一个开放源代码的 Web 应用框架,由 Pyt ...
- Django框架学习索引
索引目录 1.Django介绍与安装 2.Django流程及模式 3.Django基本配置 4.Django模板(Templages) 1.Django的介绍和安装 3.Django框架模式 4.数据 ...
- Django 框架入门篇(安装与创建项目)
什么是Django框架? 官方定义:Django是一个高级Python Web框架,鼓励快速开发和简洁实用的设计.它由经验丰富的开发人员构建,可以解决大部分Web开发的麻烦,因此您可以专注于编写应用程 ...
- 第九章 Django框架——csrf请求伪造和csrf_token使用
第九章 Django框架--csrf请求伪造和csrf_token使用 一.csrf请求伪造 二.csrf_token使用 三.简单的csrf_token应用 四.Ajax使用csrf_token 一 ...
最新文章
- WordPress页面Page和文章Post的相互转换
- Scikit-learn 更新至 0.24 版,这 10 个新特性你需要了解
- mysql $lt_MongoDB与Mysql常用命令解释
- 前端一HTML:十五: 层叠,权重,优先级的关系
- cmakelist .so_卡罗拉汽车音响改装SO匠心三分频,黄金声学
- Webshell免杀绕过waf
- (转)淘淘商城系列——maven工程debug调试
- 【报告分享】2020中国企业数字化转型研究报告-清华大学.pdf(附下载链接)
- 流媒体相关资源下载地址(整理)
- 常见的SSL证书错误代码及解决方法
- 企业技术中心申报条件
- 论文的可复现性,能否量化分析?
- AcWing 1714.混合牛奶
- 三个常见博弈游戏以及 SG 函数和 SG 定理
- word设置每页50行
- css3论坛,css3学习参考手册
- php发送邮箱乱码,PHP使用STMP发送电子邮件,PHP使用STMP发送电子邮件乱码解决
- Java如何模拟双色球彩票系统?
- 怎么把计算机设置在桌面显示器,笔记本怎么设置双屏显示 双屏显示设置方法...
- 网易100天---26、What Is Artificial Intelligence (AI)?