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在各語言中的處理

語言序列化反序列化
JavaScriptJSON.stringify()JSON.parse()
Pythonjson.dumps()json.loads()
JavaObjectMapper.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 安全建議

  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. 用戶認證:快速構建安全系統的利器

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88194.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[特殊字符] Python 實戰 | 批量統計中文文檔詞頻并導出 Excel

本文展示如何用 Python 腳本&#xff1a; 批量讀取文件夾中的多篇中文文檔&#xff1b; 用 jieba 分詞并統計詞頻&#xff08;過濾停用詞與單字符&#xff09;&#xff1b; 將各文檔詞頻輸出為對應 Excel 文件&#xff1b; 是文本分析、內容審查、報告編寫中的實用技巧。 &…

共享打印機(詳細操作+常見問題:需輸入用戶名密碼、無法連接等)

文章目錄一、設置打印機共享的準備工作二、Windows系統下打印機共享設置1. 啟用主機打印機共享2. 客戶端添加共享打印機三、我所遇到的問題及解決方法客戶機遇到輸入用戶名、密碼錯誤代碼 0x0000011b一、錯誤代碼 0x0000011b 的含義二、解決方法添加打印機沒成功其他問題此次打…

在 Windows 系統上配置 [go-zero](https://go-zero.dev) 開發環境教程

&#x1f4bb; 在 Windows 系統上配置 go-zero 開發環境教程 本教程將詳細介紹如何在 Windows 系統上配置 go-zero 微服務框架的開發環境&#xff0c;包括依賴安裝、路徑配置、常見問題等。 &#x1f9f1; 一、前置環境安裝 1. 安裝 Go 下載地址&#xff1a;https://go.dev/…

開源=白嫖?

國內有一個非常濃重的思想&#xff0c;開源&#xff0c;開源就是免費&#xff0c;就是白嫖&#xff0c;就是不花錢&#xff0c;白給。那么什么是開源&#xff1f;“源代碼”是軟件中大多數計算機用戶從未見過的部分;它是計算機程序員可以操縱的代碼&#xff0c;以改變一個軟件(…

2048-控制臺版本

2048控制臺版 文章目錄2048控制臺版實現效果&#xff1a;在這里插入圖片描述庫函數使用&#xff1a;初始化變量功能函數實現&#xff1a;狀態判斷函數int Judge&#xff08;&#xff09;&#xff1b;數字生成函數 bool CtreateNumber&#xff08;&#xff09;打印游戲界面 void…

提取出Wallpaper Engine壁紙的mpkg類靜態壁紙

github 地址 https://github.com/notscuffed/repkg先下載軟件2853…26目錄這樣獲取有的直接mp4格式&#xff0c;就不能用這方法準備好后 cmd 進入repkg目錄 執行 repkg extract ./294...333/scene.pkg

AI健康小屋“15分鐘服務圈”:如何重構社區健康生態?

AI健康小屋作為“15分鐘服務圈”的核心載體&#xff0c;通過技術賦能與場景重構&#xff0c;正推動社區健康生態從被動治療向主動預防、從單一服務向全周期管理轉型。那我們應該如何重構社區健康生態呢&#xff1f;服務模式創新1.全時段覆蓋AI健康小屋通過分時段服務滿足不同群…

[netty5: WebSocketFrame]-源碼分析

WebSocketFrame WebSocketFrame 是 Netty 中用于表示 WebSocket 消息幀的抽象基類&#xff0c;封裝了幀的內容、分片標志和擴展位信息&#xff0c;供各類具體幀&#xff08;如文本、二進制、控制幀&#xff09;繼承使用。 public abstract class WebSocketFrame extends Buffer…

【加解密與C】非對稱加解密(三)ECC橢圓曲線

ECC橢圓曲線的基本概念橢圓曲線密碼學&#xff08;Elliptic Curve Cryptography&#xff0c;ECC&#xff09;是一種基于橢圓曲線數學的公鑰密碼體制。與傳統的RSA相比&#xff0c;ECC在相同安全級別下使用更短的密鑰&#xff0c;計算效率更高&#xff0c;適用于資源受限的環境。…

力扣網編程150題:加油站(貪心解法)

一. 簡介 前面一篇文章使用暴力解法來解決力扣網150 題目&#xff1a;加油站。文章如下&#xff1a; 力扣網編程150題&#xff1a;加油站&#xff08;暴力解法&#xff09;-CSDN博客 暴力解法就是遍歷了所有元素作為起始點的可能&#xff0c;算法時間復雜度為 O(n*n)&#x…

windwos 設置redis長久密碼不生效

1、設置長久密碼redis.windows.conf 文件修改對應的設置密碼2、啟動時設置對應的加載配置文件

物聯網(IoT)領域存在多種協議

物聯網&#xff08;IoT&#xff09;領域存在多種協議&#xff0c;主要是因為不同的應用場景對通信的需求差異很大&#xff0c;包括實時性、帶寬、功耗、設備兼容性、安全性等。以下從協議多樣性的原因和你提到的具體協議&#xff08;如 dc3-driver-* 模塊&#xff09;展開說明&…

二、encoders

文章目錄一、batch_encoder (用于 BFV)1. 概述2. 數學原理3. 使用方法4. 代碼示例二、ckks_encoder (用于 CKKS)在 1. bfv_basics.cpp 中&#xff0c;我們展示了如何使用BFV方案執行非常簡單的計算。計算是在 plain_modulus 參數的模下執行的&#xff0c;并且 只使用了 BFV 明文…

數據一致性解決方案總結

數據一致性解決方案總結 我們在系統中&#xff0c;主要進行了數據冗余&#xff0c;那么就會帶來數據一致性的問題。常見的數據一致性問題有&#xff1a;數據庫主從同步延遲導致的讀數據不一致&#xff1b;數據庫主主之間數據的不一致&#xff1b;緩存和數據庫之間的數據不一致。…

17.Spring Boot的Bean詳解(新手版)

文章目錄1. 什么是Bean&#xff1f;從零開始理解1.1 Bean的定義1.2 為什么需要Bean&#xff1f;1.3 Bean vs 普通對象的區別2. Spring容器&#xff1a;Bean的家2.1 什么是Spring容器&#xff1f;2.2 容器的工作流程3. Bean的聲明方式詳解3.1 使用Component及其專門化注解3.1.1 …

cherryStudio electron因為環境問題無法安裝解決方法或打包失敗解決方法

$env:ELECTRON_MIRROR"https://npmmirror.com/mirrors/electron/"; $env:ELECTRON_CUSTOM_DIR"{{ version }}"; yarn install1. 上面是關于electron安裝失敗的解決方法. 也可以通過到git上下面包,解壓后,放到對應的目錄下面,并把里面的build文件夾刪除, b…

微服務架構中數據一致性保證機制深度解析

在微服務架構中&#xff0c;數據一致性是分布式系統設計的核心挑戰。由于服務拆分后數據自治&#xff08;每個服務獨立數據庫&#xff09;&#xff0c;跨服務操作的一致性保障需突破傳統單體事務的局限。本文從一致性模型、核心解決方案、技術實現及面試高頻問題四個維度&#…

【Gin】HTTP 請求調試器

文章目錄 項目概述代碼功能詳解1. 導入必要的包2. 主函數和路由設置3. 請求信息捕獲4. 請求參數和頭信息5. 請求體處理5.1 JSON 數據處理5.2 表單數據處理5.3 Multipart 表單數據處理5.4 其他類型數據處理6. 構造響應對象7. 返回 JSON 響應功能特點使用場景完整代碼項目概述 這…

物聯網(IoT)領域的協議

物聯網&#xff08;IoT&#xff09;領域的通信協議種類繁多&#xff0c;不同協議適用于不同的應用場景&#xff08;如低功耗設備、工業自動化、家庭智能設備等&#xff09;。以下是主要物聯網協議的分類及詳細解釋&#xff1a;一、物聯網協議分類物聯網協議通常分為兩大類&…

專題一_雙指針_四數之和

一&#xff1a;題目解析 題目鏈接&#xff1a;18. 四數之和 - 力扣&#xff08;LeetCode&#xff09; 注&#xff1a;本題是在上題的基礎上講解的&#xff1a;專題一_雙指針_三數之和-CSDN博客 解析&#xff1a;和三數之區別在于找四元組和為targe的數字 而不是0 二&#xff1a…