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 ...
随机推荐
- 洛谷P1640 【SCOI2010】连续攻击游戏
原题传送门 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性. ...
- java面向对象特征 — 一句话概括
java基础学习总结之基本特征,最开始学习的时候,是形而上的理解,用了3年多,再回头看,理解起来颇为顺理成章 语言学习大概就是这样一种规律,学习,不甚解,应用,应用,渐深入人心,回头一看,恍然一悟 最 ...
- vue 实现单选框
参考:https://blog.csdn.net/qq_42221334/article/details/81630634 效果: vue: <template> <div> ...
- iBatis 代码自动生成工具 iBator 及 Example 使用
iBator的下载和安装 官方下载地址:http://people.apache.org/builds/ibatis/ibator/ 安装:见<Eclipse 插件安装> 安装完成后,“F ...
- Numpy数据的操作 * dot() multiply() 的区别
使用numpy时,跟matlab不同: 1.* dot() multiply() 对于array来说,* 和 dot()运算不同 *是每个元素对应相乘 dot()是矩阵乘法 对于matrix来说,* ...
- odoo many2one
在xml中使many2one字段 不可点击 不可跳转 options="{'no_open': True, 'no_create': True}"
- JZOJ5918【NOIP2018模拟10.20】Car
题目 最近比较懒,题目描述都直接截图了. 题目大意 给你一棵树,还有树上的几条路径,一条路径上的点到路径上其它任意点的代价为111.然后是一堆询问,问从一个点到另一个点的最小代价. 思路 一开始做这题 ...
- Elasticsearch系列(二)--query、filter、aggregations
本文基于ES6.4版本,我也是出于学习阶段,对学习内容做个记录,如果文中有错误,请指出. 实验数据: index:book type:novel mappings: { "mappings& ...
- CSP-S模拟41影子,玫瑰花精题解
题面:https://www.cnblogs.com/Juve/articles/11523567.html 影子: 暴力方法:枚举每一对点暴力统计最小权 优化:考虑并查集,枚举每个点,如果没有被访问 ...
- Django项目:CRM(客户关系管理系统)--56--47PerfectCRM实现CRM客户报名流程01
#urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...