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 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 安全建議
始終使用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:服務端用戶狀態管理方案
用戶認證:快速構建安全系統的利器