计算机基础知识57

前后端数据传输的编码格式(contentType)

# 我们只研究post请求方式的编码格式:

            get请求方式没有编码格式-- index?useranme=&password=
            get请求方式没有请求体,参数直接在url地址的后面拼接着

# 有哪些方式可以提交post请求:form表单Ajaxapi工具

# 研究form表单的post请求:

          默认的编码格式:urlencoded
          数据传输的形式:title=dasdas&price=2312&date=&publish=2&authors=3

# 对于Django后端是如何接收数据的:
        把提交过来的数据都封装到了request.POST
# 提交文件数据:enctype:form-data
# 数据传输的形式:
           title=dasdas&price=2312&date=&publish=2&authors=3

        --------------binary-----------------------------
                       文件数据

# 对于Django后端接收数据的:
        普通数据还是在request.POST中
        文件数据呢还是在request.FILES中
能在POST和FILES中接收数据,是因为Django已封装了,提交过来的数据并不是queryDICT

# ajax提交post请求:
        默认情况下,Ajax提交的数据后端还是在request.POST中接收的
        默认的编码格式:urlencoded
        需要修改contentType类型:json格式的

"""对于符合urlencoded格式的数据后端都是在request.POST中接收数据的"""

Ajax提交json格式的数据

views.py
def index(request):if request.method == 'POST':print(request.POST)    #<QueryDict: {}>print(request.body)    #b'{"a":1,"b":2}'json_bytes=request.body    # 接收浏览器发过来纯原生的数据,二进制,需要自己做封装# json_str=json_bytes.decode('utf-8')# print(json_str,type(json_str))   # {"a":1,"b":2} <class 'str'>import json# json_dict = json.loads(json_str)# print(json_dict,type(json_dict))    # {'a': 1, 'b': 2} <class 'dict'>json_dict = json.loads(json_bytes)print(json_dict,type(json_dict))      # {'a': 1, 'b': 2} <class 'dict'>return render(request,'index.html')
index.html
<body>
<button class="btn">提交</button>
<script>$(".btn").click(function () {$.ajax({url:'',type:'post',data:JSON.stringify({a:1,b:2}),   //序列化contentType:'application/json',   //json格式的success:function (res){}})})
</script>
</body>

前端提交到后端,后端json解码

Ajax提交文件数据

index.html
<body>
<form action="">用户名: <input type="text" id="username">上传文件: <input type="file" id="myfile"><button class="btn">提交</button>
<script>$(".btn").click(function (ev) {console.log(123);// 要获取到文件数据,{#console.log($("#myfile")[0].files[0]) // C:\fakepath\123.png#}// 提交文件数据需要借助于formdata对象var myFormDataObj = new FormData;var username = $("#username").val();var myfile = $("#myfile")[0].files[0];myFormDataObj.append('username', username);myFormDataObj.append('myfile',myfile);$.ajax({url: '',type: 'post',{#data: JSON.stringify({a: 1, b: 2}), // 序列化的     "{"a":1, "b":2}"#}data: myFormDataObj, // 序列化的     "{"a":1, "b":2}"{#contentType: 'application/json', // json格式的#}contentType:false, // 告诉浏览器不要给我的编码格式做任何的处理processData: false, //success: function (res) {}})})
</script>
</body>

Ajax结合layer 弹出层组件

layer 弹出层组件 - jQuery 弹出层插件 (layuiweb.com)

批量插入数据

bulk_list = []
for i in range(10000):user_obj=models.UserInfo(username='kevin%s' %i)bulk_list.append(user_obj)
models.UserInfo.objects.bulk_create(bulk_list)

# 循环之后得到了一个列表,10000个对象
# 数据库的优化, 同样的功能,不同的sql执行的效率差距很大
# 优化查询速度的时候,首先想到的是,加索引、优化sql语句,有的sql走做引、有的sql不走索引

分页的原理及推导

当查询的数据太多的时候,一页展示不完,分页码展示

总数据 每页展示总页数
100    10

10

1011011
991010

怎么计算出来总页数:   总数据  /  每页展示  =  总页数          divmod

        有余数+1
        没有余数=商

分页类

以后使用直接导入文件用就行,已经封装好,需配置路由和链接数据库使用

utils/my_page.py
class Pagination(object):def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):"""封装分页相关数据:param current_page: 当前页:param all_count:    数据库中的数据总条数:param per_page_num: 每页显示的数据条数:param pager_count:  最多显示的页码个数"""try:current_page = int(current_page)except Exception as e:current_page = 1if current_page < 1:current_page = 1self.current_page = current_pageself.all_count = all_countself.per_page_num = per_page_num# 总页码all_pager, tmp = divmod(all_count, per_page_num)if tmp:all_pager += 1self.all_pager = all_pagerself.pager_count = pager_countself.pager_count_half = int((pager_count - 1) / 2)@propertydef start(self):return (self.current_page - 1) * self.per_page_num@propertydef end(self):return self.current_page * self.per_page_num@propertydef page_html(self):# 如果总页码 < 11个:if self.all_pager <= self.pager_count:pager_start = 1pager_end = self.all_pager + 1# 总页码  > 11else:# 当前页如果<=页面上最多显示11/2个页码if self.current_page <= self.pager_count_half:pager_start = 1pager_end = self.pager_count + 1# 当前页大于5else:# 页码翻到最后if (self.current_page + self.pager_count_half) > self.all_pager:pager_end = self.all_pager + 1pager_start = self.all_pager - self.pager_count + 1else:pager_start = self.current_page - self.pager_count_halfpager_end = self.current_page + self.pager_count_half + 1page_html_list = []# 添加前面的nav和ul标签page_html_list.append('''<nav aria-label='Page navigation>'<ul class='pagination'>''')first_page = '<li><a href="?page=%s">首页</a></li>' % (1)page_html_list.append(first_page)if self.current_page <= 1:prev_page = '<li class="disabled"><a href="#">上一页</a></li>'else:prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)page_html_list.append(prev_page)for i in range(pager_start, pager_end):if i == self.current_page:temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)else:temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)page_html_list.append(temp)if self.current_page >= self.all_pager:next_page = '<li class="disabled"><a href="#">下一页</a></li>'else:next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)page_html_list.append(next_page)last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)page_html_list.append(last_page)# 尾部添加标签page_html_list.append('''</nav></ul>''')return ''.join(page_html_list)
ab_page.html
<body>
{% for foo in userlist %}<p>{{ foo.username }}</p>
{% endfor %}{{ html|safe }}
</body>
views.py
from django.shortcuts import render
from app01 import models
def ab_page(request):from utils.my_page import Paginationtry:current_page = int(request.GET.get('page'))except:current_page = 1user_queryset = models.UserInfo.objects.all()all_count = user_queryset.count()page_obj = Pagination(current_page, all_count, per_page_num=10)userlist = user_queryset[page_obj.start:page_obj.end]html = page_obj.page_htmlreturn render(request, 'ab_page.html', locals())"""
per_page_num=10
current_page                start_page      end_page
1                             0               10
2                             10               20
3                               20               30
start_page=(current_page - 1) * per_page_num
end_page=current_page*per_page_num
"""

今日思维导图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/212251.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《山水间的家》第二季收官,国台酒业解锁中国式浪漫

执笔 | 洪大大 编辑 | 萧 萧 近日&#xff0c;由国台酒特别支持的大型文旅探访节目《山水间的家》第二季在总台央视综合频道&#xff08;CCTV-1&#xff09;正式收官。 第二季节目以家庭为视角切入&#xff0c;先后走进江苏、四川、重庆、江西、湖北、贵州、浙江等地24个特色…

java项目之网络在线考试系统(ssm)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络在线考试系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; &#xff08;1&#xff09;登录…

关于禅道的安装配置以及项目管理、团队协同工作

目录 一、禅道是什么&#xff1f; 二、特点和功能 三、安装禅道 3.1 下载官网 3.2 版本考虑 3.3 禅道使用手册参考 3.4 Windows端安装禅道 四、启动禅道 4.1 访问禅道 四、禅道部分功能的使用 4.1 添加项目集 4.2 启动/关闭项目 4.3 项目计划仪表盘/阶段目标/研发…

java.util.HashMap cannot be castto org.imeta.orm.base.BizObject

if(null !biz.get("headParallel")){biz.set("headParallel", new BizObject(biz.get("headParallel"))); } 类型给他转换一下930bip旗舰版

2023最全的Web自动化测试介绍

做测试的同学们都了解&#xff0c;做Web自动化&#xff0c;我们主要用Selenium或者是QTP。 有的人可能就会说&#xff0c;我没这个Java基础&#xff0c;没有Selenium基础&#xff0c;能行吗&#xff1f;测试虽然属于计算机行业&#xff0c;但其实并不需要太深入的编程知识&…

12个最佳WordPress投票插件

您是否正在为您的网站寻找WordPress投票插件&#xff1f; WordPress投票插件可让您轻松地在您的网站上进行民意调查&#xff0c;用户可以投票。这是在收集见解的同时建立用户参与度的有效策略。 在本文中&#xff0c;我们精心挑选了最好的WordPress投票插件&#xff0c;可帮助…

MySQL索引事务基础

目录 1. 索引 1.1索引的概念 1.2索引的特点 1.3 索引的使用场景 1.4索引的使用 1.4.1查看索引 1.4.2创建索引 1.4.3删除索引 1.5索引保存的数据结构 2.事务 2.1经典例子 2.2事务的概念 2.3事务的使用 2.4事务的4个核心特性 2.5事务的并发问题 2.5.1脏读 2.5.2不可…

java--static的应用知识:代码块

1.代码块概述 代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类) 2.代码块分为两种&#xff1a; 2.1.静态代码块&#xff1a; ①格式&#xff1a;static{ } ②特点&#xff1a;类加载时自动执行&#xff0c;由于类只会加载一次&#xff0c;所以静态代码块…

数据结构与算法【B树】的Java实现+图解

目录 B树 特性 实现 节点准备 大体框架 实现分裂 实现新增 实现删除 完整代码 B树 也是一种自平衡的树形数据结构&#xff0c;主要用于管理磁盘上的数据管理&#xff08;减少磁盘IO次数&#xff09;。而之前说的AVL树与红黑树适合用于内存数据管理。存储一个100w的数…

多数据库使用django-apscheduler时,migrate后并不能生成django_apscheduler_djangojob表的问题

先说一下django-apscheduler定时器的使用过程&#xff1a; django-apscheduler基本使用 1.安装django-apscheduler代码如下&#xff08;示例&#xff09;&#xff1a; pip install django-apscheduler 2.配置settings.py的INSTALLED_APPS代码如下&#xff08;示例&#xff09…

聚类算法模型的概念、评估及应用

聚类是一种无监督学习方法&#xff0c;其目标是将数据集中的样本分成不同的组别&#xff0c;使得同一组内的样本相似度较高&#xff0c;而不同组之间的样本相似度较低。聚类算法模型通常通过计算样本之间的相似度或距离来实现这一目标。以下是聚类算法模型的概念、评估及应用的…

【HarmonyOS】API6上JS实现视频播放全屏播放时,会回到之前界面

【关键字】 API6 / 视频播放 / 全屏播放异常 【问题现象】 开发者在API6上用JS实现视频播放器点全屏播放后&#xff0c;不是全屏效果&#xff0c;实际效果是变成了横屏并返回到首页。 具体代码实现是参考video媒体组件指南。 【问题分析】 JS实现视频播放器有Codelab代码示…