当前位置: 首页 > news >正文

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. 各语言处理方法

语言序列化方法反序列化方法
JavaScriptJSON.stringify()JSON.parse()
Pythonjson.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

 

http://www.lqws.cn/news/131635.html

相关文章:

  • React 性能监控与错误上报
  • 虚拟机CentOS 7 网络连接显示“以太网(ens33,被拔出)“、有线已拔出、CentOS7不显示网络图标
  • React与原生事件:核心差异与性能对比解析
  • 2025年大模型平台落地实践研究报告|附75页PDF文件下载
  • C# 从 ConcurrentDictionary 中取出并移除第一个元素
  • 【动手学MCP从0到1】2.1 SDK介绍和第一个MCP创建的步骤详解
  • 二维 根据矩阵变换计算镜像旋转角度
  • C++修炼:C++11(一)
  • 化学方程式配平免费API接口教程
  • webpack继续学习
  • 第12节 Node.js 函数
  • JAVA国际版一对一视频交友视频聊天系统源码支持H5+APP
  • Legal Query RAG(LQ-RAG):一种新的RAG框架用以减少RAG在法律领域的幻觉
  • 电力监控/能耗/云平台的数据集采、处理方式的浅析与展望
  • 使用 useSearchParams 的一个没有触发控制台报错的错误用法
  • Ros(俩不同包的节点 交流 topic message)
  • 蚂蚁森林自动收能量助手:Ant_Forest_1_5_4_3绿色行动新选择
  • Excel高级函数使用FILTER、UNIQUE、INDEX
  • selenium学习实战【Python爬虫】
  • 【仿生机器人】刀剑神域——爱丽丝苏醒计划,需求文档
  • DAY 21 常见的降维算法
  • 极速唤醒:高通平台 Android15 默认跳过锁屏,秒启主界面!
  • Java面试专项一-准备篇
  • 目标检测任务的评估指标mAP50和mAP50-95
  • 【推荐算法】Embedding+MLP:TensorFlow实现经典深度学习推荐模型详解
  • 网络编程之网络基础
  • (1-6-3)Java 多线程
  • .Net Framework 4/C# 面向对象编程进阶
  • 从上下文学习和微调看语言模型的泛化:一项对照研究 -附录
  • AI基础知识(LLM、prompt、rag、embedding、rerank、mcp、agent、多模态)