Django--多对多表的创建、contentType、ajax、ajax传输json数据格式、ajax传输文件数据、 自定义分页器
MTV与MVC(了解):
MTV模型(Django用的就是MTV):
M:模型层(models.py)
T:templates
C:views
MVC模型:
M:模型层(models.py)
V:视图层(views.py)
C:控制层(Controller)urls.py
本质:Django的MTV本质上其实也是MVC
多对多表的三种创建方式:
1、第一种Django orm自动帮我们创建
class Book(models.Model):
name = models.CharField(max_length=32)
authors = models.ManyToManyField(to='Author') class Author(models.Model):
name = models.CharField(max_length=32)
2、第二种手动创建第三张表
3、第三种半自动创建第三张表
class Book(models.Model):
name = 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")
author = models.ForeignKey(to="Author")
info = models.CharField(max_length=32)
前后端传输数据编码格式contentType:
urlencoded:对应的数据格式:name=jason&password=666
后端获取获取数据:request.POST
ps:django会将urlencoded编码的数据解析自动放到request.POST
formdata:
form表单用来传输文件的编码格式
后端获取文件格式的数据:request.FILES
后端获取普通键值对的数据:request.POST
application/json:
ajax:(https://www.cnblogs.com/Dominic-Ji/p/9234099.html)
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。
AJAX最大的优点就是在不重新加载整个页面的情况下,可以和服务器交换数据并更新部分网页的内容。(这一个特点给用户的感受是在不知不觉中就完成了请求和响应的过程)
AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
同步交互:客户端发出一个请求后,需要等地服务器响应结束后,才能发出第二个请求
异步交互:客户端发出一个请求后,不需要等待服务器响应结束,就可以发出第二个请求
前端朝后端发送请求的方式:
1、浏览器手动输入网址 get请求
2、a标签的form属性 get请求
3、form表单 get/post请求(默认是get请求)
4、ajax get/post请求
ajax简单用法
ajax基本语法:
必须有的四个东西:提交的地址url(可以不写,默认就是当前页面打开的地址)、提交的方式type、提交的数据data、回调函数success
ajax默认传输数据的编码格式也是urlencoded
$('#d1').click(function () {
$.ajax({
url: '/index/',
type: 'post',
data: {'name': 'william', 'password': '123'},
success:function (data) {
alert(data)
}
})
})
ajax传输json格式的数据
application/json
需要注意的点:
编码与数据格式要一致
前端:
$('#d1').click(function () {
$.ajax({
url: '/index/',
type: 'post',
contentType: "application/json",
data: JSON.stringify({"name": 'william', 'password': ''}),
success:function (data) {
alert(data)
}
})
})
后端:
import json data = request.body
res = data.decode('utf-8')
res = json.loads(res)
ajax传输文件数据
ajax传输文件必须借助于内置对象Formdata
前端:
$("#b1").click(function () {
let formData = new FormData();
formData.append('标签中的name', $('#i1')[0].files[0]);
$.ajax({
url: '',
type: 'post',
processData: false, // 告诉jquery不要去处理发送的数据
contentType: false, // 告诉jquery不要去设置Content-Type请求头
data: formData,
success:function (data) {
console.log(data)
}
})
})
后端:
def upload(request):
if request.method == 'POST':
print(request.POST)
file_obj = request.FILES.get('标签中的name')
with open(file_obj.name, 'wb') as f:
for chunk in file_obj.chunks():
f.write(chunk)
return HttpResponse('ok') return render(request, 'upload.html')
form表单与ajax的异同点:
1、form表单不支持异步提交局部刷新
2、form表单不支持传输json格式数据
3、form表单与ajax默认传输数据格式都是urlencoded
批量插入数据:
首先在外面创建一个列表用来保存数据对象,然后通过bulk_create()方法来直接将可迭代对象一次性插入到数据库中,节省了大量的时间
l = []
for i in range(10000):
l.append(models.Book2(name='第%s本书' % i))
models.Book2.object.bulk_create(l)
自定义分页器:
current_page = request.GET.get('page', 1)
page_obj = my_page.Pagination(current_page, all_count)
page_queryset = book_list[page_obj.start:page_obj.end]
页码的渲染通常都是单数,符合中国人的审美标准
需要完善的:
1、需要加上首页和尾页
补充:
<li><a href="?page=1">1</a></li> // href默认前面会自动补全
Django--多对多表的创建、contentType、ajax、ajax传输json数据格式、ajax传输文件数据、 自定义分页器的更多相关文章
- Django---CSRF的装饰器,CSRF的流程,JSON数据格式,ajax技术(基于JQ实现)
Django---CSRF的装饰器,CSRF的流程,JSON数据格式,ajax技术(基于JQ实现) 一丶CSRF相关的装饰器 from django.utils.decorators import m ...
- Django多对多表的三种创建方式,MTV与MVC概念
MTV与MVC MTV模型(django): M:模型层(models.py) T:templates V:views MVC模型: M:模型层(models.py) V:视图层(views.py) ...
- Django中ORM表的创建以及基本增删改查
Django作为重量级的Python web框架,在做项目时肯定少不了与数据库打交道,编程人员对数据库的语法简单的还行,但过多的数据库语句不是编程人员的重点对象.因此用ORM来操作数据库相当快捷.今天 ...
- 一、Ajax 二、JSON数据格式 三、Ajax+Jquery 四、分页的实现
一.Ajax概述###<1>概述 ###<2>组成 以XMLHttpRequest为核心,发送Ajax请求和接收处理结果 以javascript为语言基础 以XML/JSON作 ...
- Django 多对多表的三种创建方式
第一种: class Book(models.Model): name = models.CharField(max_length=32) # 第一种自动创建 authors = models.Man ...
- Linux下开发python django程序(Form表单对象创建和使用)
1.在setting.py文件中修改节点,注释掉其中一行 MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'dj ...
- 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...
- Django框架第九篇--Django和Ajax、序列化组件(serializers)、自定义分页器、模型表choice参数
Django和Ajax 一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语 ...
- 【笔记】Django的ORM之多对多表的增和删
[笔记]Django的ORM之多对多表的增和删 Django ORM 多对多 一 昨日补充:外键关联 外键在ORM中的关联方式: 与数据表相关的类都放到models.py文件中 class Book ...
随机推荐
- zabbix 自动发现端口服务监控教程
目录 创建数据表(收集haproxy服务的信息) 针对生成的数据表做监控 在haproxy服务机器上配置 在zabbix上添加监控 前言: 1.线上业务使用了几十上百台haproxy服务,需要针对这些 ...
- LUOGU P4777 【模板】扩展中国剩余定理(EXCRT)
传送门 解题思路 扩展 $crt$,就是中国剩余定理在模数不互质的情况下,首先对于方程 $\begin{cases} x\equiv a_1\mod m_1\\x\equiv a_2\m ...
- LUOGU P2831 愤怒的小鸟 (NOIP 2016)
题面 题解 好像昨天wxl大爷讲的是O(Tn*2^n)的做法,后来没想通,就自己写了个O(Tn^2*2^n)的暴力状压, 莫名其妙过了??数量级二十亿??懵逼,可能到了CCF老爷机上就T了.dp[S] ...
- springboot与任务(异步任务)
描述:在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x ...
- JAVA基础_可变参数
自JAVA1.5以来,在JAVA中出现了可变参数一说,其针对的情况是对多个不确定的相同类型的元素进行同一类操作的情形. 可变参数有点类似与重载的概念,但是其中的可变参数是被隐式的转换成数组来进行处理的 ...
- yum 安装配置
光盘挂载:mount /dev/cdrom /mnt/cdrom 配置文件路径:vim /etc/yum.repos.d/dvd.repo 配置文件内容:[dvd]name=dvdbaseurl=fi ...
- linux操作mysql命令快速手记 — 让手指跟上思考的速度(二)
这一篇是<mysql内建命令快速手记>的姐妹篇,废话不再赘述,直接上干货,跟老铁慢慢品 1.mysql -hlocalhost -uroot -proot,-h,-u,-p分别代表ip,u ...
- Python学习day35-并发编程(1)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- for update行级锁的作用
1.for update叫排它锁,是一种行级锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它用户想更新该表中的数据行,则 ...
- 网络结构解读之inception系列三:BN-Inception(Inception V2)
网络结构解读之inception系列三:BN-Inception(Inception V2) BN的出现大大解决了训练收敛问题.作者主要围绕归一化的操作做了一系列优化思路的阐述,值得细看. Batch ...