Django之POST GET與先後端交互

Django之META與先後端交互php

1 提交表單之GEThtml

前端提交數據與發送
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組成python

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調用設計jquery

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)
相關文章
相關標籤/搜索