ajax补充说明
主要是针对回调函数args接收到的响应数据
1. 后端request.is_ajax()
用于判断当前请求是否由ajax发出
2. 后端返回的三板斧都会被args接收不再影响整个浏览器页面
3. 选择使用ajax做前后端交互的时候 后端一般返回的都是字典数据
user_dict = {'code' : 10000 , 'username' : '小阳人' , 'hobby' : '哎呦喂~' }
ajax自动反序列化后端的json格式的bytes 类型数据
dataType:'json' ,
多对多三种创建方式
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前身)
'''前后端分离的项目 视图函数只需要返回json格式的数据即可'''
from app01 import models
from django.http import JsonResponse
def ab_ser_func (request ):
book_queryset = models.Book.objects.all ()
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
return JsonResponse(data_dict)
序列化组件(django自带 后续学更厉害的drf)
from django.core import serializers
res = serializers.serialize('json' , book_queryset)
return HttpResponse(res)
批量操作数据
def ab_bk_func (request ):
"""直接循环插入 10s 500条左右"""
book_obj_list = []
for i in range (1 , 100000 ):
book_obj = models.Books01(title='第%s本书' % i)
book_obj_list.append(book_obj)
models.Books01.objects.bulk_create(book_obj_list)
"""使用orm提供的批量插入操作 5s 10万条左右"""
book_queryset = models.Books01.objects.all ()
return render(request, 'BkPage.html' , locals ())
分页器思路
分页器主要听处理逻辑 代码最后很简单
推导流程
1. queryset支持切片操作(正数)
2. 研究各个参数之间的数学关系
每页固定展示多少条数据、起始位置、终止位置
3. 自定义页码参数
current_page = request.GET.get('page' )
4. 前端展示分页器样式
5. 总页码数问题
divmod 方法
6. 前端页面页码个数渲染问题
后端产生 前端渲染
自定义分页器的使用
django自带分页器模块但是使用起来很麻烦 所以我们自己封装了一个
只需要掌握使用方式即可
def ab_pg_func (request ):
book_queryset = models.Books01.objects.all ()
from app01.utils.mypage import Pagination
current_page = request.GET.get('page' )
page_obj = Pagination(current_page=current_page, all_count=book_queryset.count())
page_queryset = book_queryset[page_obj.start:page_obj.end]
return render(request, 'pgPage.html' , locals ())
{% for book_obj in page_queryset %}
<p>{{ book_obj.title }}</p>
{% endfor %}
{{ page_obj.page_html|safe }}
小需求:获取用户数据并发送给后端校验 后端返回不符合校验规则的提示信息
form组件
1. 自动校验数据
2. 自动生成标签
3. 自动展示信息
from django import forms
class MyForm (forms.Form):
username = forms.CharField(min_length=3 , max_length=8 )
age = forms.IntegerField(min_value=0 , max_value=200 )
email = forms.EmailField()
校验数据的功能(初识)
form_obj = views.MyForm({'username' :'jason' ,'age' :18 ,'email' :'123' })
form_obj.is_valid()
False
form_obj.cleaned_data
{'username' : 'jason' , 'age' : 18 }
form_obj.errors
{'email' : ['Enter a valid email address.' ]}
1. 只校验类中定义好的字段对应的数据 多传的根本不做任何操作
2. 默认情况下类中定义好的字段都是必填的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性