最新要闻
- PCIe 5.0 SSD终于满血了!读写都是14GB/s、容量8TB
- 热消息:蔚来遭遇225万美元数据勒索 官方声明
- 当前讯息:铃木“大G”!吉姆尼五门版无伪谍照:最多能塞进7个人
- 奇迹!女子手机从26楼掉落未摔坏 真身竟是这款手机
- 5499元 联合创新推出新款32英寸显示器:4K MiniLED屏、144Hz高刷
- “非洲之王”拥抱新技术:传音首台折叠屏手机已通过蓝牙SIG认证
- 天天短讯!世界北极熊之都升温过快 已危及北极熊生存:吃不上饭了
- 即时看!1月1日起:澳门私家车可经港珠澳大桥出入内地
- 观速讯丨巡游大巴太高 梅西险些撞上电缆!他带回阿根廷的大力神杯居然是复制品
- 天天短讯!中国联通科技人才占比已达30% 曾发话不能再用老眼光看电信行业
- 空难曾致346人死亡 波音737 Max飞机延期采用最新安全标准
- 每日观察!广州多个外卖平台下单后配送慢 平台:员工已是全负荷工作
- 热消息:Intel第二代独立显卡1年后见:要追上RTX 4070!
- 主页不刷新了 小红书崩了累坏网友:WiFi、流量疯狂切换
- 罗永浩称他的失败不是理想主义的错 是他们自己的错
- 世界热讯:吴京《流浪地球2》吃苹果皮:大年初一上映
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界速递!框架第九课---ajax补充说明,多对多三种创建方式,django内置序列化组件(drf前身),ORM批量操作数据(ORM操作优化),自定义分页器,form组件
表相关SQL语句复习
alter table 表名 rename 新表名; # 修改表名---------------------alter table 表名 add 字段名 字段类型(数字) 约束条件; # 添加字段名在原来已有的最后一个字段后面再加一个字段!!!---------------------alter table 表名 add 字段名 字段类型(数字) 约束条件 after 已有字段; # 添加字段名在after后面指定的字段下面添加一个字段!!!---------------------alter table 表名 add 字段名 字段类型(数字) 约束条件 first 已有字段; # 添加字段名在已有的字段最前面再添加一个字段!!!---------------------alter table 表名 change 旧字段名 新字段名 字段类型(数字) 约束条件; # 修改字段名change不仅支持修改字段名也支持在在修改字段名的同时也修改字段类型!!!change也支持不修改字段名就修改字段类型,这样新字段名就要与旧字段名写一样了!!!---------------------alter table 表名 drop 字段名; # 删除字段名每次只能删一个字段!!!删字段要慎重,删一个字段,该字段下的所有数据全没了!!!!!!
昨日内容回顾
Q查询进阶操作
from django.db.models import Qq_obj = Q()q_obj.connector = "or"q_obj.children.append("name",1)q_obj.children.append("price__gt",2000)models.Book.objects.filter(q_obj)目的就是能够把查询条件变成字符串的形式!!!
ORM查询优化
(资料图片仅供参考)
惰性查询、分页处理1.only与deferonly会将括号内填写的字段封装到数据对象中 后续获取不走SQL但是获取括号内没有的字段数据则需要走SQLdefer与only恰巧相反----------------------------------------2.select_related与prefetch_relatedselect_related括号内填写一对多、一对一字段 自动连表然后数据封装到对象res1 = models.Author.objects.select_related("author_detail")-----------------------------------------prefetch_related括号内填写一对多、一对一字段 基于子查询然后数据封装到对象res = models.Book.objects.prefetch_related("publish")这两种方法的封装的对象,样子一样,数据也是一样,在使用的时候,是感觉不出来,用的那种方法的产生的对象的。
ORM事务操作
方式1:配置文件数据库相关配置添加一个键值对 "AUTOMIC_REQUESTS":True方式2:装饰器 from django.db import transaction @transaction.atomic def index(request):pass方式3:with上下文管理 with transaction.atomic(): pass
ORM常用字段类型
AutoFieldCharFieldIntegerFieldBigIntegerFieldDecimalFieldEmailFieldDateFieldDateTimeFieldTextFieldBooleanFieldFileField
ORM常用字段参数
primary_keymax_lengthmax_digitsdecimal_placesverbose_namenulldefaultauto_nowauto_now_addchoicesuniquedb_indextoto_fieldon_delete
Ajax操作
异步提交 局部刷新-------- 我们所学习的是jQuery封装的版本 所以页面上必须要提前导入jQuery资源-------- $.ajax({ url:"", 控制数据提交的地址 有三种填写方式 与form标签action一致 type:"", 控制数据的提交方式 默认也是get data:{"name":"jason","age":18}, 控制提交的数据 success:function(args){ 异步回调函数的代码 } }) 使用ajax交互 那么后端返回的数据会被args接收 不再直接影响整个浏览器页面------------
数据编码格式
1.urlencodedname=jason&age=123&hobby=readrequest.POST\request.GET2.formdatarequest.POST request.FILES3.application/jsonrequest.body
ajax发送json格式数据
1.确保data对应的数据是json格式字符串 data:JSON.stringify({}) 2.修改数据编码格式(默认是urlencoded) contentType:"applicaton/json"
- ajax携带文件数据
ajax携带文件数据,需要利用js内置函数产生一个对象,然后将相关的数据添加到对象里面去,最后将对象作为一个整体数据给ajax发送给后端!! let myFormObj = new FormData(); myFormObj.append("name","jason") myFoemObj.append("myfile",标签对象.files[0]) data:myFormObj contentType:false # 不要任何的编码 processData:false # 不要任何的操作
今日内容概要
- ajax补充说明
- 多对多三种创建方式
- django内置序列化组件(drf前身)
- ORM批量操作数据(ORM操作优化)
- 自定义分页器
- form组件
今日内容详细
ajax补充说明 主要是针对回调函数args接收到的响应数据
-------------------------------------------------------------------1.后端request.is_ajax()用于判断当前请求是否由ajax发出-------------------------------------------------------------------2.后端返回的三板斧都会被args接收不再影响整个浏览器页面-------------------------------------------------------------------3.选择使用ajax做前后端交互的时候 , 后端一般返回的都是字典数据user_dict = {"code": 10000, "username": "小阳人", "hobby": "哎呦喂~"}import jsonuser_data = json.dumps(user_dict)return HttpResponse(user_data)这个时候,前端args接收到的字典已经变成了字符串类型的数据,需要在前端用js代码反序列化,才能拿到真正的字典对象!!!--------------------------------------user_dict = {"code": 10000, "username": "小阳人", "hobby": "哎呦喂~"}from django.http import JsonResponsereturn JsonResponse(user_dict)这个时候JsonResponse会自动将字典序列化,传给ajax,ajax能识别出JsonResponse,会自动将 传来的数据自动再反序列化,就不需要再手动JSON.parse(args) 反序列化了!!!-------------------------------------------------------------------4. ajax自动反序列化后端的json格式的bytes类型数据,需要在ajax代码体里面加一行代码 $.ajax({ url:"", type:"post", data:{"name":"jason"}, dataType:"json", # 加上这行代码就行了!!! success:function (args) { console.log(args); console.log(typeof args) console.log(args.username) }这样也能实现自动反序列化的效果!!!-------------------------------------------------------------------
HttpResponse返回,前端args接收到的字典已经变成了字符串类型的数据,需要在前端用js代码反序列化,才能拿到真正的字典对象!!!....
多对多三种创建方式
1.全自动创建class Book(models.Model): title = models.CharField(max_length=32) authors = models.ManyToManyField(to="Author")class Author(models.Model): name = models.CharField(max_length=32)优势:自动创建第三张表 并且提供了add、remove、set、clear四种快捷操作劣势:第三张表无法创建更多的字段 扩展性较差!!!---------------------------------------------------2.纯手动创建 class Book(models.Model): title = models.CharField(max_length=32) class Author(models.Model): name = models.CharField(max_length=32) class Book2Author(models.Model): book = models.ForeignKey(to="Book") author = models.ForeignKey(to="Author") others = models.CharField(max_length=32) join_time = models.DateField(auto_now_add=True) 优势:第三张表完全由自己创建 扩展性强 劣势:编写繁琐 并且不再支持add、remove、set、clear以及正反向概念-------------------------------------------------------3.半自动创建在外键的括号里面加参数,主动告诉ORM:1. to= 书与作者有多对多的关系的.2. through= 通过已经建好的第三张表来维护,书与作者多对多的关系.3. through_fields= 用这个第三张表的哪两个外键字段,来维护书与作者的外键关系!!!--------- class Book(models.Model): title = models.CharField(max_length=32) authors = models.ManyToManyField(to="Author", through="Book2Author", # through_fields=("book","author") # 这个地方顺序别写反了,在哪个表里面建的外键,哪个表名就放前面 ) class Author(models.Model): name = models.CharField(max_length=32) class Book2Author(models.Model): book = models.ForeignKey(to="Book", on_delete=models.CASCADE) author = models.ForeignKey(to="Author", on_delete=models.CASCADE) others = models.CharField(max_length=32) join_time = models.DateField(auto_now_add=True)------------------------------优势:第三张表完全由自己创建 扩展性强 正反向概念依然清晰可用劣势:编写繁琐不再支持add、remove、set、clear------------------------------
....
django内置序列化组件(drf前身)
"""前后端分离的项目 视图函数只需要返回json格式的数据即可"""from app01 import modelsfrom django.http import JsonResponsedef ab_ser_func(request): # 1.查询所有的书籍对象 book_queryset = models.Book.objects.all() # queryset [对象、对象] # 2.封装成大字典返回 data_dict = {} for book_obj in book_queryset: temp_dict = {} temp_dict["pk"] = book_obj.pk temp_dict["title"] = book_obj.title temp_dict["price"] = book_obj.price temp_dict["info"] = book_obj.info data_dict[book_obj.pk] = temp_dict # {1:{},2:{},3:{},4:{}} return JsonResponse(data_dict)序列化组件(django自带 后续学更厉害的drf)# 导入内置序列化模块from django.core import serializers# 调用该模块下的方法,第一个参数是你想以什么样的方式序列化你的数据res = serializers.serialize("json", book_queryset)return HttpResponse(res)
....
批量操作数据
def ab_bk_func(request): # 1.往books表中插入10万条数据 # for i in range(1, 100000): # models.Books.objects.create(title="第%s本书" % i) """直接循环插入 10s 500条左右""" book_obj_list = [] # 可以用列表生成式[... for i in ... if ...] 生成器表达式(... for i in ... if ...) for i in range(1, 100000): book_obj = models.Books01(title="第%s本书" % i) # 单纯的用类名加括号产生对象 book_obj_list.append(book_obj) # 批量插入数据 models.Books01.objects.bulk_create(book_obj_list) """使用orm提供的批量插入操作 5s 10万条左右""" # 2.查询出所有的表中并展示到前端页面 book_queryset = models.Books01.objects.all() return render(request, "BkPage.html", locals())
....
分页器思路
分页器主要听处理逻辑 代码最后很简单 推导流程1.queryset支持切片操作(正数)2.研究各个参数之间的数学关系 每页固定展示多少条数据、起始位置、终止位置 3.自定义页码参数 current_page = request.GET.get("page") 4.前端展示分页器样式5.总页码数问题 divmod方法 6.前端页面页码个数渲染问题 后端产生 前端渲染
自定义分页器的使用
django自带分页器模块但是使用起来很麻烦 所以我们自己封装了一个只需要掌握使用方式即可def ab_pg_func(request): book_queryset = models.Books01.objects.all() from app01.utils.mypage import Pagination current_page = request.GET.get("page") page_obj = Pagination(current_page=current_page, all_count=book_queryset.count()) page_queryset = book_queryset[page_obj.start:page_obj.end] return render(request, "pgPage.html", locals()){% for book_obj in page_queryset %} {{ book_obj.title }}
{% endfor %}{{ page_obj.page_html|safe }}
....
form组件
小需求:获取用户数据并发送给后端校验 后端返回不符合校验规则的提示信息 form组件1.自动校验数据2.自动生成标签3.自动展示信息 from django import formsclass MyForm(forms.Form): username = forms.CharField(min_length=3, max_length=8) # username字段最少三个字符最大八个字符 age = forms.IntegerField(min_value=0, max_value=200) # 年龄最小0 最大200 email = forms.EmailField() # 必须符合邮箱格式 校验数据的功能(初识) form_obj = views.MyForm({"username":"jason","age":18,"email":"123"}) form_obj.is_valid() # 1.判断数据是否全部符合要求 False # 只要有一个不符合结果都是False form_obj.cleaned_data # 2.获取符合校验条件的数据 {"username": "jason", "age": 18} form_obj.errors # 3.获取不符合校验规则的数据及原因 {"email": ["Enter a valid email address."]}1.只校验类中定义好的字段对应的数据 多传的根本不做任何操作2.默认情况下类中定义好的字段都是必填的
作业
1.整理今日内容及博客2.使用今日内容完善图书管理系统
-
世界速递!框架第九课---ajax补充说明,多对多三种创建方式,django内置序列化组件(drf前身),ORM批量操作数据(ORM操作优化),自定义分页器,f
表相关SQL语句复习altertable表名rename新表名; 修改表名altertable表名add字段名字段类型(数字)约束条...
来源: -
每日关注!hibernate validate工具,小心你的姿势不对
问题出在validatorFactory和validator这两个局部对象的初始化上。尤其是初始化validatorFactory调用Validation buildDefaultValid
来源: 世界速递!框架第九课---ajax补充说明,多对多三种创建方式,django内置序列化组件(drf前身),ORM批量操作数据(ORM操作优化),自定义分页器,f
WPF工控组态软件之温度计
每日播报!Iceberg在袋鼠云的探索及实践
每日关注!hibernate validate工具,小心你的姿势不对
PCIe 5.0 SSD终于满血了!读写都是14GB/s、容量8TB
热消息:蔚来遭遇225万美元数据勒索 官方声明
当前讯息:铃木“大G”!吉姆尼五门版无伪谍照:最多能塞进7个人
奇迹!女子手机从26楼掉落未摔坏 真身竟是这款手机
5499元 联合创新推出新款32英寸显示器:4K MiniLED屏、144Hz高刷
“非洲之王”拥抱新技术:传音首台折叠屏手机已通过蓝牙SIG认证
天天短讯!世界北极熊之都升温过快 已危及北极熊生存:吃不上饭了
天天热资讯!深度学习炼丹-数据处理和增强
世界热门:记录--可视化大屏-用threejs撸一个3d中国地图
Python操作Excel(openpyxl)
全球热点评!Html5 canvas创意特效合集
即时看!1月1日起:澳门私家车可经港珠澳大桥出入内地
观速讯丨巡游大巴太高 梅西险些撞上电缆!他带回阿根廷的大力神杯居然是复制品
天天短讯!中国联通科技人才占比已达30% 曾发话不能再用老眼光看电信行业
空难曾致346人死亡 波音737 Max飞机延期采用最新安全标准
每日观察!广州多个外卖平台下单后配送慢 平台:员工已是全负荷工作
世界视讯!数据结构堆(Heap)&排序&二叉树
今日播报!用好这个任务管理工具,轻松躲避职场明枪暗箭
世界今日报丨彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-登录与图形验证码(captcha)EP06
今日热闻!低代码:如何成为企业业务价值提升的一大利器?
热消息:Intel第二代独立显卡1年后见:要追上RTX 4070!
主页不刷新了 小红书崩了累坏网友:WiFi、流量疯狂切换
罗永浩称他的失败不是理想主义的错 是他们自己的错
世界热讯:吴京《流浪地球2》吃苹果皮:大年初一上映
世界要闻:中国移动千兆宽带用户已达2.4亿!你是其中之一吗?
安全信息流工具-中文安全RSS小程序
supervisor+gunicorn+uvicorn部署fastapi项目
天天实时:四年保质期囤货无压力!900压缩饼干8斤85元
天天热资讯!iPhone 15系列或重新划分机型组合:14 Plus太拉胯 要大改
一加11质感绝了!刘作虎给员工秀真机:围观群众都发出WOW
美国“显卡税”又推迟9个月:一旦征收 最多涨价25%
全球讯息:大无语 车主称理想L9半个月坏三次 充电口从电动变手动
天天关注:企业转型难?火山引擎数智平台提供数智升级新路径
焦点热门:Dubbo架构设计与源码解析(一) 架构设计
Redis的AOF持久化
【报资讯】防火墙功能(锐捷安全篇)
当前热文:多方安全计算(4)MPC万能积木:秘密共享
【全球时快讯】多方安全计算(3)MPC万能钥匙:混淆电路
全力推进企业数智赋能发展主线,低代码任重道远
天天要闻:linux安装stable diffusion2.0完整教程-还不会安装sd2.0?一篇文章教会你AI绘画
焦点速读:proto IDL管理工具buf使用实践
P2329 栅栏
全球观点:Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套
世界动态:用Python写一个一次性计算出加减乘除的运算小程序
世界热文:实验一:获取主机信息
全球播报:MySQL-InnoDB磁盘结构
今日热议:pkg对egg项目打包
天天精选!java的final关键字
环球快报:【验证码逆向专栏】某片滑块、点选验证码逆向分析
环球热议:别再用 JWT 作为 Session 系统了,问题重重,后果很危险!
全球球精选!Osx10.14升级watchman踩坑记
时讯:二分法
用Python来写个小型购物车程序
天天观速讯丨基于 Dubbo Admin 动态进行流量隔离
赫德-德普官司以一百万美元赔偿和解
百度地图首发自研“北斗高精”技术 升级“真”车道级导航
【环球时快讯】中国版“猛禽”!长城山海炮大型皮卡实车现身:配自研3.0T、9AT
上海首张城市高级辅助驾驶地图许可来了 百度率先获批
环球快看点丨伊朗男子65厘米创吉尼斯最矮纪录:站起来才到到成人膝盖处
热门:如何基于 Spring Boot 快速开发一个 Dubbo 微服务应用
【世界时快讯】安卓抄错了?iPhone 15 Pro最新概念图:告别纯直边
当前关注:网络谣言别再传了!短视频中梅西抱的不是母亲:是阿根廷队女厨师
天天通讯!微软、谷歌之后 欧盟反垄断又对美国Meta下手:可罚款上百亿美元
每日视讯:4K游戏串流没了 NVIDIA删除使用9年的GameStream功能引用户不满
2022最后一跌!今起油价下调:加满一箱92号汽油少花19.5元
消息!苹果App Store被法国罚款100万美元:Epic CEO、扎克伯格都曾痛批
多次骂新能源!丰田再度质疑汽车全面电动化:中国品牌弯道超车
35岁本泽马宣布从法国队退役:球迷唏嘘 祝福俱乐部继续精彩
Python单元测试框架unittest
环球播报:北京等多地天空疑现震撼的火箭夜光云:原理科普
年出货3亿只、逛店必买的一次性碱性电池:被宜家正式停售了
环球新资讯:抖音在世界杯上下的功夫 远不止撒币10亿买版权这么简单
差评如潮!《三体》动画评分暴跌至6.4:网友"口吐芬芳"
快讯:Epic与美国FTC和解:36.6亿元摆平两起官司
Spring IOC官方文档学习笔记(二)之Bean概述
焦点观察:FreeSWITCH学习笔记:通道变量
焦点关注:32开书本大小!华硕新款12代酷睿i7迷你机PC发布:零噪音
环球即时:内蒙古上空巨大发光体划破天际 网友:像手电筒一样
192个框框的怪兽!AMD Zen4线程撕裂者7000来了
世界快报:Django框架:9、Ajax简介、基本语法、数据编码格式、携带文件数据
马斯克现身世界杯观战阿根廷对法国:赛后发出灵魂拷问
【环球播资讯】梅西夺冠穿的黑纱是什么登上热搜:官方科普涨知识 意义非凡
今日快讯:小米13 Pro 8.38mm机身塞入太多强悍功能!雷军:相当不容易
当前快播:明年初亮相 全新东风标致408X即将发布:最美法系车来了
被裁员工报仇?近60%人赞成!马斯克将卸任推特CEO 没继承者还是我掌权
今日快讯:真值200+一张票价吗?《阿凡达2》用户评分:特效很棒 剧情稀烂
观察:小姐姐最爱!小米米家首款无线直板夹上架:30秒速热 369元
环球速看:Java关键词final解读
环球视点!简单排序
全球观焦点:数据结构与算法概念
AMD/Intel CES 2023新品发布会官宣:5大CPU齐飞
《阿凡达2:水之道》若大卖 《阿丽塔:战斗天使》续作可能有戏了!
OPPO首款竖向折叠屏Find N2 Flip评测:电池不再是遗憾 媲美传统直板手机
【环球播资讯】你能接受么?微软计划推出更廉价XGP:广告是代价
确认了!小米13系列没有砍掉Wi-Fi 7:将择机打开功能
安装VScode