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

发布于:2025-07-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到