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在各语言中的处理

语言 序列化 反序列化
JavaScript JSON.stringify() JSON.parse()
Python json.dumps() json.loads()
Java ObjectMapper.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 response
    return 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 authenticate

user = 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 AbstractUser

class 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. 用户认证:快速构建安全系统的利器

相关推荐
制造数据与AI践行者老蒋10 小时前
离谱!PromptTemplate 遇上 JSON,花括号直接引发解析战争
数据库·microsoft·json
米码收割机15 小时前
【Python】Django 电子设备商城系统(源码+说明文档)[独一无二]
开发语言·python·django
chenjingming66617 小时前
JWT(JSON Web Token)有效期查看登录过期时间
json
绘梨衣的sakura路1 天前
Fastjson ≤ 1.2.83 新型 RCE 漏洞深度分析:三层绕过机制与完整利用链
安全·web安全·json
dNGUZ7UGj1 天前
10分钟完成第一个Python小游戏
python·django
江湖十年2 天前
Go 语言中 YAML to JSON 踩坑笔记
后端·go·json
前网易架构师-高司机2 天前
带标注的扑克牌识别数据集,识别率99.5%,3083张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·数字·扑克牌·纸牌
前网易架构师-高司机2 天前
带标注的浮游藻类24种数据集,识别率91.5 %数据集, 23175张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·json·数据集·微观·生物·浮游·藻类
想你依然心痛2 天前
电力能耗系统怎么搭,Django 加 PostgreSQL 入门指南
postgresql·django·电力能耗系统,后端开发
维天说2 天前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json