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

相关推荐
眠りたいです2 分钟前
基于脚手架微服务的视频点播系统-客户端业务逻辑处理部分(三)-客户端主体部分完结
c++·微服务·云原生·架构·json·restful·qt6.7
Q_Q19632884752 小时前
python+django/flask的医院财务管理系统
spring boot·python·django·flask·node.js
一雨方知深秋4 小时前
AJAX学习 ---- axios体验
javascript·http·ajax·axios·url·catch·then
code bean5 小时前
【C#笔记】Newtonsoft.Json 中 `[JsonIgnore]` 的作用详解
笔记·c#·json
友莘居士5 小时前
Ganache-CLI以太坊私网JSON-RPC接口执行环境搭建
网络协议·rpc·json·环境搭建·以太坊
Code知行合壹8 小时前
AJAX和Promise
前端·ajax
狮子也疯狂10 小时前
基于Django实现的智慧校园考试系统-自动组卷算法实现
python·算法·django
递归不收敛10 小时前
config.json 完全指南:项目配置的核心实践
笔记·学习·json
一颗宁檬不酸10 小时前
ajxa实例操作
前端·ajax·api
秋月的私语11 小时前
批量格式化XML与JSON文件小工具
xml·json