Django核心知识点全景解析
引言
本文深入剖析Django核心组件,涵盖数据交换、异步交互、状态管理及安全认证,附完整代码示例和避坑指南!
目录
引言
一、JSON:轻量级数据交换标准
1. 核心特性
2. 标准格式
3. 各语言处理方法
4. 常见错误示例
二、AJAX:异步通信核心技术
1. 核心优势
2. 原生JS实现
3. jQuery简化实现
4. 安全防护(CSRF Token)
5. 文件上传实战
三、Cookie:客户端状态管理
1. 核心原理
2. Django操作API
3. 关键参数
四、Session:服务端会话管理
1. Session配置方案
2. 核心操作方法
3. 存储引擎对比
五、分页:Paginator组件
1. 基础用法
2. 核心API说明
Paginator对象
Page对象
六、Form:表单处理利器
1. 字段类型大全
2. 自定义验证规则
3. 动态Choice技巧
总结与最佳实践
一、JSON:轻量级数据交换标准
1. 核心特性
-
跨语言:独立于编程语言
-
自描述性:键值对结构清晰易读
-
轻量化:比XML节省30%以上带宽
2. 标准格式
// 对象格式
{"name": "rose","age": 20,"hobby": ["reading", "travel"]
}// 数组格式
["jack", 18, "man"]
3. 各语言处理方法
语言 | 序列化方法 | 反序列化方法 |
---|---|---|
JavaScript | JSON.stringify() | JSON.parse() |
Python | json.dumps() | json.loads() |
4. 常见错误示例
// 错误1:属性名未用双引号
{ name: "张三" } // 错误2:使用十六进制值
[0xFFF] // 错误3:包含函数
{ "getData": function() {...} }
JSON vs XML:JSON结构更简洁,相同数据量下字符数减少40%,解析速度提升2倍+
二、AJAX:异步通信核心技术
1. 核心优势
-
局部刷新:不重载整个页面
-
异步交互:无需等待响应即可发送新请求
-
带宽优化:仅传输必要数据
2. 原生JS实现
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", "/ajax_test/", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send("username=q1mi&password=123456");
xmlHttp.onreadystatechange = function() {if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {alert(xmlHttp.responseText);}
};
3. jQuery简化实现
<script>
$('#btn').click(function() {$.ajax({url: '/api/data/',type: 'post',data: { param1: $('#input1').val(),param2: $('#input2').val()},success: function(res) {$('#result').val(res.data);}});
});
</script>
4. 安全防护(CSRF Token)
$.ajax({type: "POST",data: {"csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(),// 其他数据...}
});
5. 文件上传实战
var formData = new FormData();
formData.append("file", $("#fileInput")[0].files[0]);
formData.append("csrfmiddlewaretoken", token);$.ajax({url: "/upload/",type: "POST",processData: false, // 禁止处理数据contentType: false, // 不设置Content-Typedata: formData
});
应用场景:搜索提示、用户名实时校验、无刷新分页
三、Cookie:客户端状态管理
1. 核心原理
graph LR
A[服务器] -->|Set-Cookie| B[浏览器]
B -->|携带Cookie| A
2. Django操作API
# 设置Cookie(加密)
response.set_signed_cookie('user', 'john', salt='secret', max_age=3600)# 读取Cookie
request.get_signed_cookie('user', default='guest', salt='secret')# 删除Cookie
response.delete_cookie('user')
3. 关键参数
参数 | 说明 | 示例值 |
---|---|---|
max_age | 过期时间(秒) | 3600 (1小时) |
path | 生效路径 | "/admin" |
domain | 生效域名 | .example.com |
httponly | 禁止JS访问 | True |
secure | 仅HTTPS传输 | True |
四、Session:服务端会话管理
1. Session配置方案
# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 缓存+数据库
SESSION_COOKIE_AGE = 1209600 # 默认2周
SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 关闭浏览器即失效
2. 核心操作方法
# 存取数据
request.session['user_id'] = 42
user_id = request.session.get('user_id')# 会话管理
session_key = request.session.session_key # 获取会话ID
request.session.flush() # 删除会话及Cookie
request.session.set_expiry(300) # 5分钟后过期
3. 存储引擎对比
引擎类型 | 优点 | 适用场景 |
---|---|---|
数据库 | 持久化存储 | 高安全性需求 |
缓存 | 高速读写 | 高并发场景 |
文件系统 | 无需额外服务 | 小型应用 |
签名Cookie | 无需服务器存储 | 无状态架构 |
五、分页:Paginator组件
1. 基础用法
from django.core.paginator import Paginatordef article_list(request):queryset = Article.objects.all()paginator = Paginator(queryset, 10) # 每页10条page_number = request.GET.get('page')page_obj = paginator.get_page(page_number)return render(request, 'list.html', {'page_obj': page_obj})
2. 核心API说明
Paginator对象
-
num_pages
:总页数 -
page_range
:页码范围(如range(1, 5)
)
Page对象
-
object_list
:当前页数据 -
has_previous()
:是否有上一页 -
previous_page_number()
:上一页页码 -
has_next()
:是否有下一页 -
next_page_number()
:下一页页码
六、Form:表单处理利器
1. 字段类型大全
字段类型 | 说明 | 示例 |
---|---|---|
CharField | 文本输入 | name = forms.CharField() |
EmailField | 邮箱验证 | 自动验证@格式 |
ChoiceField | 下拉单选 | widget=forms.Select() |
ModelChoiceField | 模型下拉 | queryset=User.objects.all() |
DateTimeField | 日期时间 | input_formats=['%Y-%m-%d %H:%M'] |
FileField | 文件上传 | 需设置enctype="multipart/form-data" |
2. 自定义验证规则
class LoginForm(forms.Form):username = forms.CharField(min_length=8,label="用户名",error_messages={"required": "用户名不能为空","min_length": "长度不能少于8个字符"})password = forms.CharField(widget=forms.PasswordInput,validators=[custom_password_validator] # 自定义验证器)
3. 动态Choice技巧
# 方式1:在__init__中动态赋值
class DynamicForm(forms.Form):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.fields['city'].choices = City.objects.values_list('id', 'name')# 方式2:使用ModelChoiceField
authors = forms.ModelChoiceField(queryset=Author.objects.filter(active=True))
总结与最佳实践
数据交换:优先使用JSON替代XML
异步通信:AJAX实现局部刷新,提升用户体验
状态管理:
-
小型数据用Cookie(最大4KB)
-
敏感数据用Session
表单处理:
-
基础表单用Form
-
模型关联用ModelForm
相关文章:
Django核心知识点全景解析
引言 本文深入剖析Django核心组件,涵盖数据交换、异步交互、状态管理及安全认证,附完整代码示例和避坑指南! 目录 引言 一、JSON:轻量级数据交换标准 1. 核心特性 2. 标准格式 3. 各语言处理方法 4. 常见错误示例 二、AJA…...
生物发酵展同期举办2025中国合成生物学与生物制造创新发展论坛
一、会议介绍 2025中国合成生物学与生物制造创新发展论坛暨上海国际合成生物学与生物制造展览会于2025年8月7-9日在上海新国际博览中心(浦东新区龙阳路2345号)召开,本次论坛汇聚了国内外顶尖学者、行业领袖及政策制定者,将围绕“…...

WINUI——Magewell视频捕捉开发手记
背景 因需要融合视频,并加载患者CT中提取出的气管镜与病变,以便能实时查看气管镜是否在正确位置。 开发环境 硬件:Magewell的USB Capture HDMI Gen 2 IDE:VS2022 FrameWork: .Net6 WINUI Package: MVVMToolKit NLog Ma…...
Jetpack Compose 中,DisposableEffect、LaunchedEffect 和 sideEffect 区别和用途
在 Jetpack Compose 中,DisposableEffect、LaunchedEffect 和 sideEffect 都是用于处理副作用(Side Effects)的 API,但它们的用途和触发时机不同。以下是它们的核心概念和区别: 1. 副作用(Side Effect&…...
STM32开发,创建线程栈空间大小判断
1. 使用RTOS提供的API函数(以FreeRTOS为例) 函数原型:UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask)功能:获取指定任务堆栈中剩余的最小空间(以字为单位,非字节)。使用步骤&am…...
正则表达式检测文件类型是否为视频或图片
// 配置化文件类型检测(集中管理支持的类型) const FILE_TYPE_CONFIG {video: {extensions: [mp4, webm, ogg, quicktime], // 可扩展支持更多格式regex: /^video\/(mp4|webm|ogg|quicktime)$/i // 自动生成正则},image: {extensions: [jpeg, jpg, png,…...
Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token
Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token 目录 Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token功能解析工作机制应用场景举例说明技术要点在自然语言处理(NLP)领域 都是<CLS> + <SEP>吗?一、CLS和SEP的作用与常见用法1. **CLS标…...

TDengine 开发指南——无模式写入
简介 在物联网应用中,为了实现自动化管理、业务分析和设备监控等多种功能,通常需要采集大量的数据项。然而,由于应用逻辑的版本升级和设备自身的硬件调整等原因,数据采集项可能会频繁发生变化。为了应对这种挑战,TDen…...
分布式互斥算法
1. 概述:什么是分布式互斥 假设有两个小孩想玩同一个玩具(临界资源),但玩具只有一个,必须保证一次只有一个人能够玩。当一个小孩在玩时,另一个小孩只能原地等待,直到玩完才能轮到自己。这就是 …...

第34次CCF-CSP认证真题解析(目标300分做法)
第34次CCF-CSP认证 矩阵重塑(其一)AC代码及解析矩阵重塑(其二)AC代码及解析货物调度AC代码及解析 矩阵重塑(其一) 输入输出及样例: AC代码及解析 1.线性化原矩阵 :由于cin的特性我们…...

video-audio-extractor:视频转换为音频
软件介绍 前几天在网上看见有人分享了一个源码,大概就是py调用的ffmpeg来制作的。 这一次我带来源码版(需要py环境才可以运行),开箱即用版本(直接即可运行) 软件特点 软件功能 视频提取音频:…...
rk3588 区分两个相同的usb相机
有时候会插入两个一模一样的usb相机,担心每次启动他们所对应的设备节点 /dev/video* 会变化,所以需要绑定usb口,区分两个相机。把两个相机都插入后,查看usb信息 rootrk3588:/# udevadm info --attribute-walk --name/dev/video0U…...

[概率论基本概念4]什么是无偏估计
关键词:Unbiased Estimation 一、说明 对于无偏和有偏估计,需要了解其叙事背景,是指整体和抽样的关系,也就是说整体的叙事是从理论角度的,而估计器原理是从实践角度说事;为了表明概率理论(不可…...
乐观锁与悲观锁的实现和应用
乐观锁与悲观锁:原理、实现与应用详解 在并发编程和数据库操作中,乐观锁和悲观锁是两种重要的并发控制策略,它们在原理、实现方式和应用场景上存在显著差异。下面我们将通过图文结合的方式,深入探讨这两种锁机制。 一、基本概念 1…...

PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式
PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式 文章目录 PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式1. 查询效果2. 处理方式3. 再次查询 1. 查询效果 2. 处理方式 3. 再次查询...

【vue】Uniapp 打包Android 文件选择上传问题详解~
需求 uniapp兼容android app,pc,h5的文件选择并上传功能。 需要支持拍照和相册选择,以及选择其他类型文件上传~ 实践过程和问题 开始使用uni-file-picker组件 以为很顺利,android模拟器测试…… 忽略了平台兼容性提示~&#…...
ASR技术(自动语音识别)深度解析
ASR技术(自动语音识别)深度解析 自动语音识别(Automatic Speech Recognition,ASR)是将人类语音转换为文本的核心技术,以下是其全面解析: 一、技术原理架构 #mermaid-svg-QlJOWpMtlGi9LNeF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:1…...
图论水题2
div2 361 D. Tree Requests 题意 对于一颗 n n n节点的树,每个节点有一个字母,有 m m m次询问,每次询问求对于顶点 v v v的子树中深度为 h h h的结点能否组成一个回文串$ (1 \leq n \leq m \leq 5 \cdot 10^5) $ 思路 关于 v v v的子树结…...

Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
视频扩散技术虽发展显著,但多数驾驶数据集事故事件少,难以生成逼真车祸图像,而提升交通安全又急需逼真可控的事故模拟。为此,论文提出可控车祸视频生成模型 Ctrl-Crash,它以边界框、碰撞类型、初始图像帧等为条件&…...

网络编程之服务器模型与UDP编程
一、服务器模型 在网络通信中,通常要求一个服务器连接多个客户端 为了处理多个客户端的请求,通常有多种表现形式 1、循环服务器模型 一个服务器可以连接多个客户端,但同一时间只能连接并处理一个客户的请求 socket() 结构体 bind() listen() …...

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测
Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测 目录 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五…...

阿里云服务器安装nginx并配置前端资源路径(前后端部署到一台服务器并成功访问)
运行以下命令,安装Nginx相关依赖。 yum install -y gcc-c yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 运行wget命令下载Nginx 1.21.6。 您可以通过Nginx开源社区直接获取对应版本的安装包URL&…...
Ubuntu 下开机自动执行命令的方法
Ubuntu 下开机自动执行命令的方法(使用 crontab) 在日常使用 Ubuntu 或其他 Linux 系统时,我们常常需要让某些程序或脚本在系统启动后自动运行。例如:启动 Clash 代理、初始化服务、定时同步数据等。 本文将介绍一种简单且常用的…...

C++11新增重要标准(下)
前言 一,forward(完美转发) 二,可变参数模板 三,emplace系列接口 四,新增类功能 五,default与delete 六,lambda表达式 七,包装器 八,bind 在C11中新增…...

【第六篇】 SpringBoot的日志基础操作
简介 日志系统在软件开发中至关重要,用于调试代码、记录运行信息及错误堆栈。本篇文章不仅详细介绍了日志对象的创建及快速使用,还说明了日志持久化的两种配置方式和滚动日志的设置。实际开发需根据场景选择合适的日志级别和存储策略。文章内容若存在错误…...

Pluto论文阅读笔记
主要还是参考了这一篇论文笔记:https://zhuanlan.zhihu.com/p/18319150220 Pluto主要有三个创新点: 横向纵向用lane的query来做将轨迹投回栅格化地图,计算碰撞loss对数据进行正增强和负增强,让正增强的结果也无增强的结果相近&a…...
ubuntu显示器未知
在Ubuntu系统中,当外接显示器被识别为“未知设备”时,可通过以下日志文件进行问题诊断,结合Xorg日志和内核日志综合分析: 🔍 一、查看Xorg显示服务日志(核心) Xorg日志记录了图形界面的详细事…...
Faiss向量数据库全面解析:从原理到实战
Faiss向量数据库全面解析:从原理到实战 引言:向量搜索的时代需求 在AI技术爆发的今天,向量数据已成为表示文本、图像、音视频等内容的核心形式。Facebook AI研究院开源的Faiss(Facebook AI Similarity Search)作为高…...

matlab 2024a 工具箱Aerospsce Toolbox报错
Matlab R2024a中Aerospsce Toolbox报错 警告:Aerospace Toolbox and Aerospace Blockset licenses are required in ‘built-in/Spacecraft Dynamics’ 找到安装路径\MATLAB\R2024a\licenses文件夹license_****_R2024a.lic 里面工具箱名称出错,手动修改…...

使用有限计算实现视频生成模型的高效训练
大家读完觉得有帮助记得关注和点赞!!! 抽象 视频生成的最新进展需要越来越高效的训练配方,以减轻不断上升的计算成本。在本报告中,我们介绍了 ContentV,这是一种 8B 参数文本到视频模型,在 256 …...