返回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. 您应升级到 MySQL 5.5.0 或更高版本。 phpmyadmin

    最近又折腾LAMP了.从官方下载的phpmyadmin在部署的时候发现 “您应升级到 MySQL 5.5.0 或更高版本”.原因是我安装的mysql数据库版本过低. 解决思路: 1.升级mysql版本 ...

  2. 教你一些IDE中比较骚的操作技巧!

    本文转自微信公众号「程序员的成长之路」id:cxydczzl IDEA 有个很牛逼的功能,那就是后缀补全(不是自动补全),很多人竟然不知道这个操作,还在手动敲代码. 这个功能可以使用代码补全来模板式地 ...

  3. 依赖Anaconda环境安装TensorFlow库,避免采坑

    TensorFlow™ 简介: TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示 ...

  4. mysql-python不支持python3

    使用Mysqlclient pip3 install Mysqlclient

  5. 37-Ubuntu-用户管理-02-查看用户信息

    查看用户信息 序号 命令 作用 01 id 用户名 查看用户UID和GID信息 02 cat -n /etc/passwd 查看用户详细信息,参数-n显示行号 03 cat -n /etc/group ...

  6. css垂直居中设置

    转载自大佬的文章:纯css实现垂直居中的几种方法(https://www.cnblogs.com/hutuzhu/p/4450850.html) 总结得很棒,有好几种方法自己没用过的,拷贝过来给自己看 ...

  7. Vue双向数据绑定原理深度解析

    首先,什么是双向数据绑定?Vue是三大MVVM框架之一,数据绑定简单来说,就是当数据发生变化时,相应的视图会进行更新,当视图更新时,数据也会跟着变化. 在分析其原理和代码的时候,大家首先了解如下几个j ...

  8. Go学习笔记:Linux下安装Go语言

    CentOS7.6安装Go-1.12.9版本 1. 下载安装包到当前目录下> wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz2 ...

  9. linux 6 timezone修改

    linux 6 / Amazon linux 因为正好在使用Amazon 的linux AMI  又遇到了需要修改系统时区这个case 所以就调查了一下修改方法,因为Amazon的linux版本是由A ...

  10. 判断访问浏览器客户端类型(pc,mac,ipad,iphone,android)

    <script type="text/javascript"> //平台.设备和操作系统 var system = { win: false, mac: false, ...