设为首页 加入收藏

TOP

django框架(部分讲解)(一)
2023-07-25 21:29:02 】 浏览:93
Tags:django 框架

ajax补充说明

主要是针对回调函数args接收到的响应数据

  1. request.is_ajax()判断是不是ajax请求
    image

  2. 后端返回的三板斧都会被args接收不再影响整个浏览器页面
    image
    image

  3. 选择使用ajax做前后端交互的时候 后端一般返回的都是字典数据

user_dict = {'code': 10000, 'username': '小阳人', 'hobby': '哎呦喂~'}
  • ajax自动反序列化后端的json格式的bytes类型数据
    image

多对多三种创建方式

方式1:全自动创建

class Book(models.Model):
	title = models.CharField(max_length=32)
	authors = models.ManyToManyField(to='Author')
class Author(models.Model):
	name = models.CharField(max_length=32)

优势:自动创建第三张表 并且提供了add、remove、set、clear四种操作

劣势:第三张表无法创建更多的字段 扩展性较差

方式2:纯手动创建(不推荐)

class Book(models.Model):
	title = 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')
	others = models.CharField(max_length=32)
	join_time = models.DateField(auto_now_add=True)

优势:第三张表完全由自己创建 扩展性强
劣势:编写繁琐 并且不再支持add、remove、set、clear以及正反向概念

方式3:半自动创建(推荐使用)

class Book(models.Model):
	title = 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', on_delete=models.CASCADE)
	author = models.ForeignKey(to='Author', on_delete=models.CASCADE)
	others = models.CharField(max_length=32)
	join_time = models.DateField(auto_now_add=True)

优势:第三张表完全由自己创建 扩展性强 正反向概念依然清晰可用
劣势:编写繁琐不再支持add、remove、set、clear

django内置序列化组件(drf前身)

这里的内置序列化组件,其实就是实现将后端数据,存放到字典中或是存放到列表中有序输出

这里是我们用JsonResponse模块自己实现的代码
'''前后端分离的项目 视图函数只需要返回json格式的数据即可'''
from app01 import models
from django.http import JsonResponse


def ab_ser_func(request):
    # 1.查询所有的书籍对象
    book_queryset = models.Book.objects.all()  # queryset [对象、对象]
    # 2.封装成大字典返回
    data_dict = {}
    for book_obj in book_queryset:
        temp_dict = {}
        temp_dict['pk'] = book_obj.pk
        temp_dict['title'] = book_obj.title
        temp_dict['price'] = book_obj.price
        temp_dict['info'] = book_obj.info
        data_dict[book_obj.pk] = temp_dict  # {1:{},2:{},3:{},4:{}}
    return JsonResponse(data_dict)


序列化组件(django自带的,后续会学更厉害的drf)
# 导入内置序列化模块
from django.core import serializers
# 调用该模块下的方法,第一个参数是你想以什么样的方式序列化你的数据
res = serializers.serialize('json', book_queryset)
return HttpResponse(res)

使用序列化模块,不仅节省代码,同时他封装的更精致
image

批量操作数据

		当我们需要大批量创建数据的时候 如果一条一条的去创建或许需要猴年马月 我们可以先试一试for循环试试
		html
			<div class="col-md-10 col-md-offset-2">
                {% for book_obj in book_query %}
                    <p class="text-center">{{ book_obj.name }}</p>
                {% endfor %}
            </div>
       
       views
	       	def home(request):
			    for i in range(1000):
			        models.Books.objects.create(name=f'第{i}本书')
			    '''
			    浏览器访问一个django路由 立刻创建10万条数据并展示到前端页面
			    涉及到大批量数据的创建 直接使用create可能会造成数据库崩溃
			    所以Django就有一个专门来创建的参数就是 Dulk.create 效率极高 还有 Dulk.update
			    '''
			    book_list = []
			    for i in range(10000):
			        book_obj = models.Books(name=f'第{i}本书')
			        book_list.append(book_obj)
			    ''' 上述代码可以简化为一行'''
			    [models.Books(name=f'第{i}本书') for i in range(10000)]
			    models.Books.objects.bulk_create(book_list)     # 批量创建数据
			    models.Books.objects.bulk_update(book_list)     # 批量修改数据
			    book_query = models.Books.objects.all()
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何创建Django项目 下一篇pandas数据清洗

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目