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

Django核心知识点详解:JSON、AJAX、Cookie、Session与用户认证

1. JSON数据格式详解

1.1 什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有以下特点:

  • 独立于语言,几乎所有编程语言都支持

  • 易于人阅读和编写

  • 易于机器解析和生成

  • 基于文本,比XML更简洁

1.2 JSON基本格式

对象格式
{"name": "rose","age": 20
}
  • 使用大括号{}包裹

  • 键值对形式,键必须用双引号包裹

  • 多个键值对用逗号分隔

数组格式
["jack", 18, "man"]
  • 使用中括号[]包裹

  • 元素可以是任意类型

  • 元素间用逗号分隔

1.3 复杂JSON示例

{"name": "jack","age": 29,"hobby": ["reading", "travel", "photography"],"school": {"name": "Merrimack College","location": "North Andover, MA"}
}

1.4 JSON与XML对比

XML示例

<?xml version="1.0" encoding="utf-8"?>
<country><name>中国</name><province><name>黑龙江</name><cities><city>哈尔滨</city><city>大庆</city></cities></province>
</country>

JSON等效

{"name": "中国","province": [{"name": "黑龙江","cities": ["哈尔滨", "大庆"]}]
}

JSON优势

  1. 更简洁,减少传输数据量

  2. 更易读

  3. 直接对应JavaScript对象

  4. 解析速度更快

1.5 JSON在各语言中的处理

语言序列化反序列化
JavaScriptJSON.stringify()JSON.parse()
Pythonjson.dumps()json.loads()
JavaObjectMapper.writeValueAsString()ObjectMapper.readValue()

2. AJAX技术详解

2.1 什么是AJAX?

AJAX(Asynchronous JavaScript and XML)是一种创建交互式网页应用的技术,特点:

  • 异步:不阻塞页面其他操作

  • 局部刷新:只更新部分页面内容

  • 数据量小:减少不必要的数据传输

2.2 AJAX工作原理

 浏览器->>服务器: 发送AJAX请求服务器->>浏览器: 返回数据(JSON/XML)浏览器->>DOM: 更新页面局部内容

2.3 jQuery实现AJAX

GET请求

$.get('/api/data', {param1: 'value'}, function(data) {console.log(data);
});

POST请求

$.ajax({url: '/api/save',type: 'POST',data: {name: '张三',age: 25},success: function(res) {alert('保存成功');}
});

2.4 处理CSRF Token

Django中防止CSRF攻击的解决方案:

$.ajax({url: "/submit/",type: "POST",data: {"data": "value","csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val()}
});

2.5 文件上传示例

var formData = new FormData();
formData.append("file", $("#fileInput")[0].files[0]);$.ajax({url: '/upload/',type: 'POST',data: formData,processData: false,contentType: false,success: function(data) {console.log("上传成功");}
});

3. Cookie机制详解

3.1 Cookie是什么?

  • 服务器发送到浏览器的小段数据(键值对)

  • 浏览器会存储并在后续请求中自动携带

  • 典型应用:登录状态保持、用户偏好设置

3.2 Django中操作Cookie

设置Cookie

response = HttpResponse()
response.set_cookie('username', '张三',max_age=3600,  # 1小时过期path='/',      # 全站有效secure=True,   # 仅HTTPS传输httponly=True  # 防止XSS攻击
)

读取Cookie

username = request.COOKIES.get('username', '默认值')

删除Cookie

response = HttpResponse()
response.delete_cookie('username')

3.3 Cookie登录校验示例

def login(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')if valid_user(username, password):  # 自定义验证函数response = redirect('/home/')response.set_cookie('is_login', True)return responsereturn render(request, 'login.html')

4. Session机制详解

4.1 为什么需要Session?

  • Cookie大小限制(4KB)

  • 敏感信息不宜存储在客户端

  • 需要存储更多用户状态信息

4.2 Session工作原理

A[浏览器] -->|携带Session ID| B[服务器]
B -->|查找| C[Session存储]
C -->|返回用户数据| B
B -->|响应| A

4.3 Django中Session操作

基本操作

# 设置
request.session['user'] = {'id': 1, 'name': '张三'}# 获取
user = request.session.get('user')# 删除
del request.session['user']

高级操作

# 获取所有键
keys = request.session.keys()# 设置过期时间(秒)
request.session.set_expiry(3600) # 清除所有Session
request.session.flush()

4.4 Session配置

# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.db'  # 数据库存储
SESSION_COOKIE_AGE = 1209600  # 2周过期(默认)
SESSION_SAVE_EVERY_REQUEST = True  # 每次请求都保存

5. Django用户认证系统

5.1 内置功能

  • 用户注册、登录、注销

  • 密码修改、重置

  • 权限管理

  • 用户组管理

5.2 核心方法

用户认证

from django.contrib.auth import authenticateuser = authenticate(request,username='admin',password='123456'
)
if user is not None:login(request, user)  # 登录用户

创建用户

from django.contrib.auth.models import User# 普通用户
User.objects.create_user(username='user1',password='mypassword'
)# 超级用户
User.objects.create_superuser(username='admin',password='admin123',email='admin@example.com'
)

5.3 视图保护

from django.contrib.auth.decorators import login_required@login_required(login_url='/login/')
def profile(request):return render(request, 'profile.html')

5.4 扩展用户模型

from django.contrib.auth.models import AbstractUserclass CustomUser(AbstractUser):phone = models.CharField(max_length=11, unique=True)avatar = models.ImageField(upload_to='avatars/')# settings.py
AUTH_USER_MODEL = 'app.CustomUser'

6. 实用技巧与最佳实践

6.1 安全建议

  1. 始终使用HTTPS传输Cookie

  2. 敏感操作使用CSRF保护

  3. 密码必须哈希存储

  4. Session设置合理过期时间

6.2 性能优化

  1. 频繁访问的Session数据使用缓存后端

  2. 大型文件不要通过Session存储

  3. 合理设置Cookie的domain和path

6.3 常见问题解决

问题1:AJAX请求403 Forbidden

  • 确保携带了CSRF Token

  • 检查视图的权限设置

问题2:Session不持久

  • 检查SESSION_COOKIE_AGE设置

  • 确保浏览器没有禁用Cookie

问题3:用户认证失败

  • 检查用户是否is_active=True

  • 验证密码是否正确:user.check_password('123')

7. 总结

本文详细介绍了Django开发中的核心知识点:

  1. JSON:现代Web开发的标准数据格式

  2. AJAX:实现无刷新交互的关键技术

  3. Cookie:客户端状态存储的基本方式

  4. Session:服务端用户状态管理方案

  5. 用户认证:快速构建安全系统的利器

http://www.xdnf.cn/news/15096.html

相关文章:

  • RAG实战之dify源码文件解析-pdf文件解析流程
  • QT6 源(158)模型视图架构里的文件系统模型 QFileSystemModel 篇一:属性,成员函数,与信号函数
  • 在 macOS 上安装与自定义 Oh My Zsh:让终端美观又高效 [特殊字符]
  • Microsoft AZ-305 Exam Question
  • Git常用指令
  • Python-文件操作
  • 如何将 AWS EBS 卷从 gp2 批量迁移到 gp3:完整指南
  • RabbitMQ 高级特性之事务
  • FPGA加速HMI实时渲染:复杂图形处理的并行计算方案
  • 【macOS】【Swift】【RTF】黑色文字在macOS深色外观下看不清的解决方法
  • 5.注册中心横向对比:Nacos vs Eureka vs Consul —— 深度解析与科学选型指南
  • 字体 Unicode 区块字符展示 PDF 生成器
  • MySQL 09 普通索引和唯一索引
  • 5N70-ASEMI电源管理领域专用5N70
  • 前端业务监控系统,异常上报业务,异常队列收集,异常捕获
  • 【Unity】MiniGame编辑器小游戏(十)连连看【Link】
  • C#基础篇(11)泛型类与泛型方法详解
  • UI前端与数字孪生结合实践探索:智慧物流的仓储优化与管理系统
  • 大数据在UI前端的应用深化:用户行为模式的挖掘与预测性分析
  • 原型与原型链到底是什么?
  • Linux驱动学习day20(pinctrl子系统驱动大全)
  • 自动驾驶决策与规划
  • 【Kafka】登录日志处理的三次阶梯式优化实践:从同步写入到Kafka多分区批处理
  • 【PDF提取内容改名】批量提取pdf多个指定区域内容到excel表格的操作步骤和方法
  • 制作MikTex本地包可用于离线安装包
  • doris2.1.8连接报错ERROR 1203 (42000): Reach limit of connections解决办法
  • 冷冻电镜重构的GPU加速破局:从Relion到CryoSPARC的并行重构算法
  • 前端UI逻辑复杂可以用什么设计模式
  • 由 DB_FILES 参数导致的 dg 服务器无法同步问题
  • CVE-2025-32463复现