• Django 前后端数据传输、ajax、分页器


    返回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
  • 相关阅读:
    <剑指OFFER18> 18_01_DeleteNodeInList在O(1)时间删除链表结点
    哈夫曼树

    快速排序
    冒泡算法
    Java 缓存机制
    JAVA NIO
    string、stringbuilder、stringbuffer区别
    Java内存泄露的问题调查定位
    使用hibernate 框架搭建的helloworld
  • 原文地址:https://www.cnblogs.com/xt12321/p/11024417.html
Copyright © 2020-2023  润新知