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 ...
随机推荐
- js获取base64格式图片预览上传并用php保存到本地服务器指定文件夹
html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 根据url提取网站域名的方法小结
前言:最近使用到了他人总结的一个基础类库.查看了下源码,发现String帮助类的一个辅助方法不是很严谨,重构之. 1.原来程序的写法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- express 4 使用session和cookies
https://my.oschina.net/u/1466553/blog/294336 http://blog.csdn.net/liyi109030/article/details/3527138 ...
- java调js基础
public static void main(String[] args)throws Exception { ScriptEngine se = new ScriptEngineManager() ...
- Python爬取b站任意up主所有视频弹幕
爬取b站弹幕并不困难.要得到up主所有视频弹幕,我们首先进入up主视频页面,即https://space.bilibili.com/id号/video这个页面.按F12打开开发者菜单,刷新一下,在ne ...
- TensorFlow实战Google深度学习框架-人工智能教程-自学人工智能的第二天-深度学习
自学人工智能的第一天 "TensorFlow 是谷歌 2015 年开源的主流深度学习框架,目前已得到广泛应用.本书为 TensorFlow 入门参考书,旨在帮助读者以快速.有效的方式上手 T ...
- <爬虫>用正则爬取B站首页图片
import re import requests headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Apple ...
- 在VisualSVN创建新的Repository
1,右键-创建 2,(暂时还没明白这两个选项的区别,暂时先使用第一个) 3, 库名称 4,(也不懂具体含义, 先默认) 5, 权限问题 6, 在需要用到这个库的工作文件夹内点击右键: -SVN检出 7 ...
- mysqlbinlog: unknown variable 'default-character-set=utf8'
[xxx@dbhost log]$ mysqlbinlog mysql-bin. mysqlbinlog: unknown variable 'default-character-set=utf8' ...
- PHP实现记录浏览历史页面
<?php /******* 说明:cookie只能保存字符串 本实例中,需要保存多个URL(历史访问记录),思路是先将URL数组转为字符串,然后保存,读取时,再循环读取 *******/ // ...