返回ORM目录 Django ORM

内容目录:

一、MTV与MVC模式
二、多对多表三种创建方式
三、前后端传输数据
四、Ajax
​ 五、批量插入数据
六、自定义分页器

一、MTV与MVC模式

  1. MTV模型

    Django就是基于MTV模型的框架,其中:
    M:模型层 models.py
    T:templates
    V:视图层 views
  2. MVC模型

    M:模型层 models
    V:视图层 views
    C:控制器 controller
    本质: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) # 多对多字段在任意一张表中都可以创建,一般建议在查询频率高的那张表中建
    # 在Django中,上面的操作--指定Book与Author字段是多对多的关系,Django会自动创建二者关系的表
    # 好处是不用操心第三行表的创建
    # 不足的地方在于,无法在这张表中添加新的字段(只是本表的字段),只能是指定的这几个关联的字段
  2. 第二种:纯手动创建第三张表

    class Book(models.Model):
    name = models.CharField(max_length=32) 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) # 手动新建第三张表,将该表中的几个字段关联到Book和Author表中
    # 不足的地方在于不支持双下划线的反向查询方式
    # 好处在于扩展性大,可以添加出来关联的字段,还可以添加这个表自己的字段
  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)
    # book = models.ManyToManyField(
    to='Book',through='Book2Author',through_fields=('author','book')) class Book2Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    info = models.CharField(max_length=32) # 同样是要手动创建第三张表,像第二种方法那样,同样也需要操作第一种的方式,不过要添加参数
    # 这样建起来虽然麻烦了点,但是扩展性强的同时,又可以通过点点点(基于对象/双下划线)来操作数据
    # 使用第三种方式创建多对多关联关系时,就不能使用set、add、remove、clear方法来管理多对多的关系了,只能通过第三张表的model来管理多对多关系

三、前后端传输数据

  1. urlencoded

    Request Headers里:Content-Type: application/x-www-form-urlencoded
    
    前端对应的数据格式
    name=tyft&password=23s3 后端获取数据
    request.POST ps: django会将urlencoded编码的数据解析自动放到request.POST
  2. multipart/form-data

    form表单传输文件的编码格式
    后端获取文件格式数据
    request.FILES 后端获取普通键值对数据
    request.POST
  3. application/json

    ajax发送json格式数据,数据在request.body中
    
    需要注意的点
    编码与数据格式要一致

四、Ajax

给个链接:https://www.cnblogs.com/xt12321/p/11025037.html

五、批量导入数据

l = []
for i in range(10000):
l.append(models.Book2(name='第%s本书'%i))
models.Book2.objects.bulk_create(l) # 批量插入数据

六、自定义分页器

后端:
book_list = models.Book2.objects.all()
# 数据总条数
all_count = book_list.count()
# 当前页
current_page = request.GET.get('page',1)
# 示例一个分页器对象
page_obj = my_page.Pagination(current_page=current_page,all_count=all_count)
# 对总数据进行切片
page_queryset = book_list[page_obj.start:page_obj.end] 前端:
{{ page_obj.page_html|safe }} # 帮你渲染的是带有bootstrap样式的分页器 # 直接导包用就好

五、批量导入数据

l = []
for i in range(10000):
l.append(models.Book2(name='第%s本书'%i))
models.Book2.objects.bulk_create(l) # 批量插入数据

六、自定义分页器

后端:
book_list = models.Book2.objects.all()
# 数据总条数
all_count = book_list.count()
# 当前页
current_page = request.GET.get('page',1)
# 示例一个分页器对象
page_obj = my_page.Pagination(current_page=current_page,all_count=all_count)
# 对总数据进行切片
page_queryset = book_list[page_obj.start:page_obj.end] 前端:
{{ page_obj.page_html|safe }} # 帮你渲染的是带有bootstrap样式的分页器 # 直接导包用就好
给个模板链接:https://www.cnblogs.com/xt12321/p/11025055.html

Django 前后端数据传输、ajax、分页器的更多相关文章

  1. django前后端数据传输学习记录

    在开发过程中会遇到这样的情况 后台返回了一堆的数据,是一个列表 例如 datas = [{"a":1, "b":2}, {"c": 3,&q ...

  2. 从零开始搭建django前后端分离项目 系列一(技术选型)

    前言 最近公司要求基于公司的hadoop平台做一个关于电信移动网络的数据分析平台,整个项目需求大体分为四大功能模块:数据挖掘分析.报表数据查询.GIS地理化展示.任务监控管理.由于页面功能较复杂,所以 ...

  3. luffy项目搭建流程(Django前后端分离项目范本)

    第一阶段: 1.版本控制器:Git      2.pip安装源换国内源    3.虚拟环境搭建        4.后台:Django项目创建 5.数据库配置              6.luffy前 ...

  4. vue+django前后端项目部署

    一.python3的安装 1.安装python前的库环境: yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel ...

  5. Django前后端分离跨域请求问题

    一.问题背景 之前使用django+vue进行前后端分离碰到跨域请求问题,跨域(域名或者端口不同)请求问题的本质是由于浏览器的同源策略导致的,当请求的响应不是处于同一个域名和端口下,浏览器不会接受响应 ...

  6. Django前后端分离项目部署

    vue+drf的前后端分离部署笔记 前端部署过程 端口划分: vue+nginx的端口 是81 vue向后台发请求,首先发给的是代理服务器,这里模拟是nginx的 9000 drf后台运行在 9005 ...

  7. [django]前后端分离之JWT用户认证

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  8. 一、Django前后端交互之Ajax和跨域问题

    一.Ajax介绍 1.概述 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术.AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Jav ...

  9. ajax向Django前后端提交请求和CSRF跨站请求伪造

    1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...

随机推荐

  1. 17、通过maven生成测试报告

    目录如下: 通过Maven 生成报告 进入testngTest根目录,运行mvn test 命令 进入 testngTest\target\surefire-reports 路径查看测试报告

  2. python3 使用int函数将浮点数转换成整数

    int函数将浮点数转换成整数需要注意的地方 >>> int(153)153>>> int(153.4)153>>> int(153.5)153&g ...

  3. REST Client实际应用记录

    请求Content-Type为application/x-www-form-urlencoded 先来看一个完整示例: ############## ### qa问答 @msg="糖尿病患者 ...

  4. Match & Catch CodeForces - 427D 后缀自动机水题

    题意: 给出两个字符串a,b,求一个字符串,这个字符串是a和b的子串, 且只在a,b中出现一次,要求输出这个字符串的最小长度. 题解: 将a串放入后缀自动机中,然后记录一下每个节点对应的子串出现的次数 ...

  5. bootstrap-自带插件(完成的小功能)

    模态框 务必将模态框的HTML代码放在文档的最高层级内(也就是说,尽量作为 body 标签的直接子元素),以避免其他组件影响模态框的展现和/或功能. <!-- 触发模态框的按钮 --> & ...

  6. C#编程入门--MYSQLHELPER

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  7. Opencv 特征提取与检测-图像特征描述

    图像特征描述 什么是图像特征 可以表达图像中对象的主要信息.并且以此为依据可以从其它未知图像中检测出相似或者相同对象 常见的图像特征 常见的图像特征  边缘  角点  纹理 图像特征描述  描 ...

  8. Echart中X轴为时间坐标刻度时,后台返回时间List被强制转化为时间戳问题

    if(recordlist!=null&&recordlist.size()>0) { for (Record record : recordlist) { //根据频次决定使用 ...

  9. 关于h5打包后 wag包无法安装的问题

    如果不是逻辑错误,那么有可能是下列三种情况之一, 1 wgt打包时的appid与安装包不符 2 打包wgt文件和打包安装包文件 用的不是同一个HBuilder账户 3 安装包打包时权限配置,和wgt包 ...

  10. JUC 一 ReentrantReadWriteLock

    java.util.concurrent.locks ReentrantLock是独占锁,一种相对比较保守的锁策略,在这种情况下任何"读/读"."读/写".&q ...