Django之META與前後端交互

来源:https://www.cnblogs.com/why957/archive/2018/05/24/9080968.html
-Advertisement-
Play Games

Django之META與前後端交互 1 提交表單之GET 前端提交數據與發送 1)提交表單數據 2)提交JSON數據 後端的數據接收與響應 1)接收GET請求數據 2)接收POST請求數據 3)響應請求 GET 請求過程 前端通過ajax發起GET請求,json格式數據 var data = { " ...


Django之META與前後端交互

1 提交表單之GET

前端提交數據與發送
1)提交表單數據
2)提交JSON數據
後端的數據接收與響應
1)接收GET請求數據
2)接收POST請求數據
3)響應請求

GET  請求過程
前端通過ajax發起GET請求,json格式數據
var data = {  
    "name": "test",  
    "age": 1  
};  
$.ajax({  
    type: 'GET',  
    url: /your/url/,  
    data: data, # 最終會被轉化為查詢字元串跟在url後面: /your/url/?name=test&age=1  
    dataType: 'json', # 註意:這裡是指服務端返回json格式的數據  
    success: function(data) { # 這裡的data就是json格式的數據  
    },  
    error: function(xhr, type) {  
    }  
}); 
後端接受GET請求數據
name = request.GET.get('name', '')  
age = int(request.GET.get('age', '0'))  

2 提交表單之POST

方式一:

前端發送POST請求:
var data = {}  
# 如果頁面並沒有表單,只是input框,請求也只是發送這些值,那麼可以直接獲取放到data中  
data['name'] = $('#name').val()   
# 如果頁面有表單,那麼可以利用jquery的serialize()方法獲取表單的全部數據  
data = $('#form1').serialize();    
$.ajax({  
    type: 'POST',  
    url: /your/url/,  
    data: data,  #request Header中預設是Content-Type:application/x-www-form-urlencoded
    dataType: 'json', # 註意:期望伺服器返回的數據類型  
    success: function(data) { # 這裡的data就是json格式的數據  
    },  
    error: function(xhr, type) {  
    }  
});
註: ajax中沒有指明content-type類型,請求頭中預設是Content-Type:application/x-www-form-urlencoded,因此參數會編碼為 name=xx&age=1 提交到後端,後端作為表單數據處理

後端接受請求表單數據:
name = request.POST.get('name', '')  
age = int(request.POST.get('age', '0'))  


方式二:

前端通過POST提交JSON數據
# POST一個json數據    
var data = {  
    “name”: "test",  
    "age", 1  
}  
$.ajax({  
    type: 'POST',  
    url: /your/url/,  
    data: JSON.stringify(data), # json對象轉化為字元串  
    #request Header註明content-type:'application/json; charset=UTF-8'
    contentType: 'application/json; charset=UTF-8',  
    dataType: 'json', # 註意:期望服務端返回json格式的數據  
    success: function(data) { # 這裡的data就是json格式的數據  
    },  
    error: function(xhr, type) {  
    }  
}); 
註:  如果要給後端傳遞json數據,就需要增加content-type參數,告訴後端,傳遞過來的數據格式,並且需要將data轉為字元串進行傳遞。實際上,服務端接收到後,發現是json格式,做的操作就是將字元串轉為json對象。
另外,不轉為字元串,即使加了content-type的參數,也預設會轉成name=xx&age=1,使後端無法獲取正確的json。

後端接受數據:
data = request.get_json()
另外,如果前端提交的數據格式不能被識別,可以用request.get_data()接收數據。 

3 request.META組成

    request.META是python中一個字典,包含了本次所有HTTP請求的Header信息,比如ip,瀏覽器Agent。註意Header信息的完整列表取決於用戶所發送的Header信息與服務端設置的header信息,常見的鍵值對有:
(1) HTTP_USER_AGENT,用戶瀏覽器的user-agent字元串,例如: "Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17" .
(2) REMOTE_ADDR客戶端ip,如"12.345.67.89" ,如果申請是經過代理伺服器的話,那麼它可能是以逗號分割的多個IP地址,如:"12.345.67.89,23.456.78.90")

    request.META是python一個普通字典,當鍵不存在時,訪問會觸發一個KeyError異常。一般採用try/execpt語句或者用python中get()方法來處理,設置預設返回,友好的響應客戶端。

4 request.META調用設計

(1)要獲取用戶瀏覽器信息,寫法通常可以:
def ua_display(request):
    info = request.META.get('HTTP_USER_AGENT', 'unknown')
    return HttpResponse("Your browser is %s" % info)
   
 (2) 採用try/execpt語句防止阻塞程式
def ua_display_2(request):
    try:
        info = request.META['HTTP_USER_AGENT']
    except KeyError:
        info = 'unknown'
    return HttpResponse("Your browser is %s" % info)
    
(3) 想要看META中具體有哪些數據,採用python字典獲取鍵值items方法
values = request.META.items()
info = []
for k,v in values:
    info.append('<tr><td>%s</td><td>%s</td></tr>' % (k, v))
    
(4) 
           CONTENT_LENGTH   文本長度
            CONTENT_TYPE    數據類型
            HTTP_ACCEPT_ENCODING   編碼
            HTTP_ACCEPT_LANGUAGE    語言
            HTTP_REFERER    引用頁,如果有的話
            HTTP_USER_AGENT 客戶機用戶代理字元串
            QUERY_STRING  查詢字元串,單一的未解析的字元串
            REMOTE_ADDR   客戶機IP地址
            REMOTE_HOST    客戶機hostname
            REQUEST_METHOD 請求方式,比如 GET 或 POST
            SERVER_NAME 伺服器 hostname
            SERVER_PORT 伺服器埠

信息如下:
ALLUSERSPROFILE C:\ProgramData
COMMONPROGRAMFILES  C:\Program Files\Common Files
COMSPEC C:\windows\system32\cmd.exe
CONFIGSETROOT   C:\windows\ConfigSetRoot
CONTENT_LENGTH 
CONTENT_TYPE    text/plain
CSRF_COOKIE 8dLJLZyBH801ba24VdzYqJ81b5nqTxh0
DJANGO_SETTINGS_MODULE  PythonProject.settings
FP_NO_HOST_CHECK    NO
GATEWAY_INTERFACE   CGI/1.1
HOMEDRIVE   C:
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING    gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE    zh-CN,zh;q=0.8
HTTP_CONNECTION keep-alive
HTTP_COOKIE csrftoken=8dLJLZyBH801ba24VdzYqJ81b5nqTxh0; sessionid=1rf6hmdw7k0zzsg8q3q1lw2j75gmoood
HTTP_HOST   127.0.0.1:8000
HTTP_USER_AGENT Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
NUMBER_OF_PROCESSORS    4
OS  Windows_NT
PATH    E:\Python;E:\Python\Scripts;C:\windows\system32;E:\Python
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PATH_INFO   /display_meta/
PROCESSOR_ARCHITECTURE  AMD64
PROCESSOR_IDENTIFIER    Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
PROCESSOR_LEVEL 6
PROCESSOR_REVISION  2a07
PROMPT  $P$G
PSMODULEPATH    C:\windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC  C:\Users\Public
QUERY_STRING   
REMOTE_ADDR 127.0.0.1
REMOTE_HOST
REQUEST_METHOD  GET
RUN_MAIN    true
SERVER_PROTOCOL HTTP/1.1
SERVER_SOFTWARE WSGIServer/0.1 Python/2.7.5
SESSIONNAME Console
SHIM_MCCOMPAT   0x810000001
WINDOWS_TRACING_FLAGS   3
WINDOWS_TRACING_LOGFILE C:\BVTBin\Tests\installpackage\csilogfile.log
wsgi.errors ', mode 'w' at 0x00000000025C6150>
wsgi.file_wrapper   wsgiref.util.FileWrapper
wsgi.input 
wsgi.multiprocess   False
wsgi.multithread    True
wsgi.run_once   False
wsgi.url_scheme http
wsgi.version    (1, 0)

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 其實是一種利用符號進行的類型轉換,轉換成數字類型~~true == 1~~false == 0~~"" == 0~~[] == 0~~undefined ==0~~!undefined == 1~~null == 0~~!null == 1 ...
  • 第 1 章 JavaScript簡介 使用 Node.js 搭建 Web 伺服器 JavaScript 的類型有數字、字元串、布爾值、函數和對象。還有 undefined 和 null ,以及數組、日期和正則表達式。 操作符 .cnblogs markdown table th:nth child( ...
  • 做前端開發已經好幾年了,對設計模式一直沒有深入學習總結過。隨著架構相關的工作越來越多,越來越能感覺到設計模式成為了我前進道路上的一個阻礙。所以從今天開始深入學習和總結經典的設計模式以及面向對象的幾大原則。 今天第一天,首先來講策略模式。 什麼是策略模式? GoF四兄弟的經典《設計模式》中,對策略模式 ...
  • 一、抽象類: 抽象類是特殊的類,只是不能被實例化;除此以外,具有類的其他特性;重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能聲明於抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自一個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們 ...
  • 工廠方法模式簡介 定義 定義一個用於創建對象的介面,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。 簡單工廠 VS 工廠方法 簡單工廠:在工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對於客戶端來說,去除了與具體產品的依賴。但是,當在工廠類中需要添加新的實例 ...
  • 今晚,夜色朦朧,正是幹壞事的好時光。所以,打算和大伙分享點不一樣的內容。 ...
  • Java開源生鮮電商平臺-性能優化以及伺服器優化的設計與架構(源碼可下載) 說明:Java開源生鮮電商平臺-性能優化以及伺服器優化的設計與架構,我採用以下三種維度來講解 1. 代碼層面。 2. 資料庫層面。 3. 伺服器層面 誠然,性能優化這個方面的確是一個長期的過程,並不是大伙們看了我的文章後就覺 ...
  • 前言 秒殺架構持續優化中,基於自身認知不足之處在所難免,也請大家指正,共同進步。文章標題來自碼友的建議,希望可以把阻塞隊列ArrayBlockingQueue這個隊列替換成Disruptor,由於之前曾接觸過這個東西,聽說很不錯,正好藉此機會整合進來。 簡介 LMAX Disruptor是一個高性能 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...