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优势:
-
更简洁,减少传输数据量
-
更易读
-
直接对应JavaScript对象
-
解析速度更快
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 安全建议
-
始终使用HTTPS传输Cookie
-
敏感操作使用CSRF保护
-
密码必须哈希存储
-
Session设置合理过期时间
6.2 性能优化
-
频繁访问的Session数据使用缓存后端
-
大型文件不要通过Session存储
-
合理设置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开发中的核心知识点:
-
JSON:现代Web开发的标准数据格式
-
AJAX:实现无刷新交互的关键技术
-
Cookie:客户端状态存储的基本方式
-
Session:服务端用户状态管理方案
-
用户认证:快速构建安全系统的利器