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 ...
随机推荐
- springboot导入excel到mysql
@Controller @RequestMapping(path = "/excel") public class ImportController { @Autowired pr ...
- Sql Server 中查询存储过程的修改时间
1.按最近修改排序所有存储过程 SELECT [name], [create_date], [modify_date] FROM [sys].[objects] WHERE [type] = 'P' ...
- C++之memset函数
可参考: C++中memset函数的用法 C++中memset函数的用法 C++中memset()函数的用法详解 c/c++学习系列之memset()函数 透彻分析C/C++中memset函数 mem ...
- LINK : fatal error LNK1104: 无法打开文件“ucrtd.lib”
先说解决方案: 选中项目->右键->属性->常规 -->Windows SDK 改成当前系统的SDK版本,我这边是10.0.15063.0,重新生成即可 下载cefsh ...
- 05_Hibernate数据库连接池
一.配置连接池 连接池:连接池是创建和管理数据库连接的缓冲池技术. 优点:合理利用数据库连接资源.简化的编程模式.受控的资源使用. 主流连接池: DBCP(DataBase connection po ...
- 第一周课堂笔记5th
1. While循环机制 如何终止循环? 改变条件(根据上面的流程,只要改变条件,就会终止循环). 关键字:break. 调用系统命令:quit(),exit() 后面会讲到,不建议大家使用 ...
- java连接neo4j
呼.博客要落灰了 记录一下Java连接neo4j的问题. 首先是neo4j的下载和配置,基本参考https://blog.csdn.net/appleyk/article/details/790918 ...
- vue生成条形码/二维码/带logo二维码
条形码:https://blog.csdn.net/dakache11/article/details/83749410 //安装 cnpm install @xkeshi/vue-barcode / ...
- 深度残差网络——ResNet学习笔记
深度残差网络—ResNet总结 写于:2019.03.15—大连理工大学 论文名称:Deep Residual Learning for Image Recognition 作者:微软亚洲研究院的何凯 ...
- day43作业
注册页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...