Django知識總結(三)

拾伍 ● Ajax技術javascript

Ajax定義css

Ajax: 異步的 JavaScript XML (Asynchronous+Javascript+XML) html

經過Ajax, 咱們能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新(從新加載整個網頁是: 雕版印刷, 對網頁的某個部分進行更新: 活字印刷)前端

 

異步: 向服務器發送請求的時候,咱們沒必要等待結果,而是能夠同時作其餘的事情,等到有告終果咱們能夠再來處理這個事java

 

常見Ajax技術python

1 $.post()$.get()$.load()是一些簡單Ajax方法(用得較少)mysql

<html> jquery

<head> nginx

<script type="text/javascript" src="/jquery/jquery.js"></script> ajax

<script type="text/javascript">

$(document).ready(function () {

$("#b01").click(function () {

$('#myDiv').load('/jquery/test1.txt');

});

});

</script>

</head>

<body>

 

<div id="myDiv"><h2>經過 AJAX 改變文本</h2></div>

<button id="b01" type="button">改變內容</button>

 

</body>

</html>

 

2 jQuery.ajax(), $.ajax(), 能處理複雜的邏輯

般使用格式

$("#login_btn").on("click", function () {

$.ajax({

url: "/foo/",

type: 'POST',

data: 鍵值對(data是引用數據類型),

success: function(data){},

dataType: dataType

});

});

$.ajax()參數是一個字典, 它的鍵包括:

url→必需,默認爲當前頁地址)指向要操做的路徑

type→可選, 請求方式("POST", "GET")

data→可選, 鍵值對(data是引用數據類型), 連同請求發送到服務器。

success→可選, 請求成功時執行的回調函數

dataType→可選, 規定預期的服務器響應的數據類型。若未指定, 則智能判斷(xmljsonscript html)。

若是要處理 $.ajax() 獲得的數據,則須要使用回調函數:beforeSenderrordataFiltersuccesscomplete

 

※ jQuery.ajax()的參數列表

參數名 

類型 

描述 

url  

String

(默認當前頁地址發送請求的地址。 

type 

String

(默認: "GET") 請求方式 ("POST"  "GET"),默認爲 "GET"。注意:其它HTTP 請求方法,如 PUT  DELETE 也可使用,但僅部分瀏覽器支持。 

timeout 

Number

設置請求超時時間(毫秒)。此設置將覆蓋全局設置。 

async  

Boolean

(默認: true) 默認設置下,全部請求均爲異步請求。若是須要發送同步請求,請將此選項設置爲 false。注意,同步請求將鎖住瀏覽器,用戶其它操做必須等待請求完成才能夠執行。 

beforeSend 

Function

發送請求前可修改 XMLHttpRequest 對象的函數,如添加自定義 HTTP頭。XMLHttpRequest 對象是惟一的參數。

function (XMLHttpRequest) {

  this; // the options for this ajax request

}

cache  

Boolean

(默認: true) jQuery 1.2 新功能,設置爲 false 將不會從瀏覽器緩存中加載請求信息。 

complete  

Function

請求完成後回調函數 (請求成功或失敗時均調用)。參數:XMLHttpRequest 對象,成功信息字符串。

function (XMLHttpRequest, textStatus) {

  this; // the options for this ajax request

}

contentType 

String

(默認: "application/x-www-form-urlencoded") 發送信息至服務器時內容編碼類型。默認值適合大多數應用場合。 

※ fromenctype屬性的默認值也是application/x-www-form-urlencoded

data

Object,

String

發送到服務器的數據。將自動轉換爲請求字符串格式。GET 請求中將附加在 URL 後。查看 processData 選項說明以禁止此自動轉換。必須爲Key/Value 格式。若是爲數組,jQuery 將自動爲不一樣值對應同一個名稱。如 {foo:["bar1", "bar2"]} 轉換爲 '&foo=bar1&foo=bar2'

dataType

String

預期服務器返回的數據類型。若是不指定,jQuery 將自動根據 HTTP MIME 信息返回 responseXML  responseText,並做爲回調函數參數傳遞,可用值:

"xml": 返回 XML 文檔,可用 jQuery 處理。

"html": 返回純文本 HTML 信息;包含 script 元素。

"script": 返回純文本 JavaScript 代碼。不會自動緩存結果。

"json": 返回 JSON 數據。

"jsonp": JSONP 格式。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 爲正確的函數名,以執行回調函數。

error

Function

(默認自動判斷 (xml  html)) 請求失敗時將調用此方法。這個方法有三個參數:XMLHttpRequest 對象,錯誤信息,(可能)捕獲的錯誤對象。

function (XMLHttpRequest, textStatus, errorThrown) {

  // 一般狀況下textStatuserrorThown只有其中一個有值

  this; // the options for this ajax request

}

global

Boolean

(默認: true) 是否觸發全局 AJAX 事件。設置爲 false 將不會觸發全局 AJAX事件,如 ajaxStart  ajaxStop 。可用於控制不一樣的Ajax事件

ifModified

Boolean

(默認: false) 僅在服務器數據改變時獲取新數據。使用 HTTP  Last-Modified 頭信息判斷。

processData

Boolean

(默認: true) 默認狀況下,發送的數據將被轉換爲對象(技術上講並不是字符串以配合默認內容類型 "application/x-www-form-urlencoded"。若是要發送 DOM 樹信息或其它不但願轉換的信息,請設置爲 false

success

Function

請求成功後回調函數。這個方法有兩個參數:服務器返回數據,返回狀態

function (data, textStatus) {

  // data could be xmlDoc, jsonObj, html, text, etc...

  this; // the options for this ajax request

}

 

 

3 jQueryserialize() 方法

語法: $(selector).serialize()

serialize() 方法經過序列化表單值建立 URL 編碼的文本字符串。

您能夠選擇一個或多個表單元素(如輸入和/或文本區),或表單元素自己。

序列化的值可在生成 AJAX 請求時, 用於 URL 查詢字符串中。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>菜鳥教程(runoob.com)</title>

<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js">

</script>

<script>

$(document).ready(function () {

$("button").click(function () {

$("div").text($("form").serialize());

});

});

</script>

</head>

<body>

 

<form action="">

第一個名稱: <input type="text" name="FirstName" value="Mickey"/><br>

最後一個名稱: <input type="text" name="LastName" value="Mouse"/><br>

</form>

<button>序列化表單值</button>

<div></div>

 

</body>

</html>

 

效果:

 

序列化

● Django支持的序列化格式

Django支持的序列化格式包括json, xmlyaml, 咱們只關注jsondjango序列化格式

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,主要用於傳送數據。

 

● Djangoserializers.serialize() & pythonjson.dumps()

對於DjangoQueryset<Queryset [object,object,object]>, 不能使用pythonjson方法序列化,而要用到django serializers

狀況1: 使用serializers.serialize

from django.core import serializers

 

ret = models.BookType.objects.all()

data = serializers.serialize("json", ret)

 

#serialize()的參數是:

# 序列化目標格式,

# 序列化的QuerySet對象 (事實上,第二個參數能夠是任何可迭代的Django Model實例,但它不少狀況下就是一個QuerySet).

狀況2: 使用json.dumps()

import json 

 

# ret1 = models.BookType.objects.all().values('caption') 
# ret1['列名'] = list(ret1) 

 

ret = models.BookType.objects.all().values_list('caption') 
ret = list(ret) 
result = json.dumps(ret) 

 

# 提示:. 
# values()取到的格式是這種: < querytset[{key: value}, {key: value}.......] > 列表裏面的字典類型的格式
# values_list()取到的格式是這種: < querytset[(), (), (), ()......] > 列表裏面元祖的格式

 

拾陸 ● Django的表單系統: 主要分兩種

基於django.forms.Form

定義形式

from django import forms

class FormName(forms.Form):

field1 = forms.XXField(...) # model字段是field1 = models.XXField(...)

field2 = forms.XXField(...)

 

表單字段的參數包括(不必定都有, 用逗號分隔參數)

max_length這種字段固有的參數

部件(widget)對象

字段參數負責"校驗邏輯",而部件對象負責" 顯示邏輯"

#form.py

from django import forms

 

class CommentForm(forms.Form):

name = forms.CharField()

url = forms.URLField()

comment = forms.CharField(widget=forms.Textarea()) # Textarea後的括號能夠省略

# Widget (部件)Django HTML 輸入元素的表示。(A widget is Django's representation of an HTML input element.)

# 這裏的 comment 會變成 Textarea,而不是 CharField

 

# 若是想讓Widget 具備一些特殊的CSS , 能夠這樣設置:

class CommentForm(forms.Form):

name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'}))

url = forms.URLField()

comment = forms.CharField(widget=forms.TextInput(attrs={'size': '40'}))

title = forms.CharField(max_length=20,

min_length=5,

error_messages={'required': '標題不能爲空',

'min_length': '標題最少爲5個字符',

'max_length': '標題最多爲20個字符'},

widget=widgets.TextInput(attrs={'class': "form-control", 'placeholder': '標題5-20個字符'}))

 

細節知識

Form 的對象具備一個is_valid() 方法,它爲全部的字段運行驗證的程序。

當調用這個方法時,若是全部的字段都包含合法的數據,它將:

返回True

將表單的數據放到cleaned_data屬性中。

其它Form對象的API:

http://www.lxway.com/496695522.htm

 

基於django.forms.ModelForm

※ ModelForm 能容許咱們經過一個 Model, 直接建立一個和該Model的字段一一對應的表單,大大方便了表單操做:

#models.py

class ExamInfo(models.Model):

field1 = models.XXField(...) # 表單字段是field1 = forms.XXField(...)

field2 = models.XXField(...)

 

#form.py

#定義ExamInfoForm,Form的名字爲模型名+Form

from django.forms import ModelForm

from .models import ExamInfo

class ExamInfoForm(ModelForm):

class Meta:

model = ExamInfo

fields = '__all__'

# fields = ('field1','field2') #只顯示model中指定的字段

 

※ form組件的主要功能

生成HTML標籤

驗證用戶數據(顯示錯誤信息)----對用戶提交的內容進行驗證(from表單/Ajax

提交、保留上次提交的數據

初始化頁面顯示內容

 

鉤子(hook)(對於django來講)

部鉤子:校驗單個字段,例如:用戶名最短5個字符,最長12個字符;密碼必須大於8位,驗證碼必須正確

全局鉤子:校驗多個字段,例如:密碼和重複密碼必須一致

 

對於MFC編程來講,消息鉤子分爲局部鉤子和全局鉤子。

局部鉤子將僅攔截某一進程的指定消息,

全局鉤子將攔截系統中全部進程的指定消息。

 

拾柒跨站請求僞造(csrf/xsrf, Cross-site request forgery)

● csrf定義

Django具備防止跨站請求僞造的功能,有全局和局部之分

--全局防止跨站請求僞造經過中間件 django.middleware.csrf.CsrfViewMiddleware 來完成

--局部防止跨站請求僞造經過@csrf_protect@csrf_exempt裝飾器來實現

※ from django.views.decorators.csrf import csrf_protect, csrf_exempt

※ @csrf_protect,爲當前函數強制設置防跨站請求僞造功能,即使settings中沒有設置全局中間件。

※ @csrf_exempt,取消當前函數防跨站請求僞造功能,即使settings中設置了全局中間件。

 

● csrf案例

用戶訪問www.mybank.com網站, 登陸而且未退出,

用戶同時訪問了一個黑客網站, 黑客網站發給客戶的html代碼中帶有上面的代碼(一段僞裝生成一個圖片元素的html代碼, get方式的數據傳遞), 於是訪問了src對應的可實現轉帳的代碼(此時cookie未失效), 所以, 一段服務端發給瀏覽器的csrf_token可用來驗證某段代碼是用戶的瀏覽器發送的代碼, 而不是其它服務器發送的.

 

● csrf的應用

詳見: http://www.javashuo.com/article/p-xcptltgl-cn.html

1 ● 普通表單

# ① veiw中設置返回值:
 return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))  
# 或者
 return render(request, 'xxx.html', data) 

 

# ② html中設置Token: 
form表單裏面須要添加{%csrf_token%} 

這樣當你查看頁面源碼的時候,能夠看到form中有一個input是隱藏的

總結原理:當用戶訪問login頁面的時候,會生成一個csrf的隨機字符串,而且cookie中也存放了這個隨機字符串(以下圖),當用戶再次提交數據的時候會帶着這個隨機字符串提交,若是沒有這個隨機字符串則沒法提交成功

 

2 ● Ajax

對於傳統的form,能夠經過表單的方式將token再次(體會這個再次)發送到服務端,而對於ajax的話,使用以下方式。

1, csrfajax提交的時候經過請求頭(headers)傳遞的給後臺的

2, csrf在前端的key爲:X-CSRFtoken,到後端的時候django會自動添加HTTP_,而且最後爲HTTP_X_CSRFtoken

3, csrfform中提交的時須要在前端form中添加{%csrftoken%}

 $("#btn1").click(function () { 
 $.ajax({ 
 url:"/login/", 
 type:"POST", 
 data:{"usr":"root","pwd":"123"}, 
 headers:{ "X-CSRFtoken":$.cookie("csrftoken")}
 success:function (arg) { 

 

 } 
 }); 
 });
<script> 
 //狀況一: 通常狀況
 $('#i1').click(function () { 
 var csrf_token = $.cookie('csrf_token') 
 $.ajax({ 
 url: 'xxx', 
 type: 'post', 
 data: {'username': xxx, 'password': 123123}, 
 headers: {'x-CSRFtoken': csrf_token}, 
 success: function (arg) { 

 

 } 
 }); 
 }); 

 

 //狀況二: 若是想要實如今當get方式的時候不須要提交csrftoken,當post的時候須要,實現這種效果的代碼以下:
 // Ajax整個頁面統一配置
 // xhr  XMLHttpRequest對象,默認Ajax底層使用的就是它
var csrftoken = $.cookie('csrftoken'); 

 

 function csrfSafeMethod(method) { 
 // these HTTP methods do not require CSRF protection 
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
 } 

 

 $.ajaxSetup({ 
 beforeSend: function (xhr, settings) { 
 if (!csrfSafeMethod(settings.type) && !this.crossDomain) { 
 xhr.setRequestHeader("X-CSRFToken", csrftoken); 
 } 
 } 
 }); 
</script>

 

拾捌 ● WSGI

● WSGI定義

※ CGI(Common Gateway Interface)是通用網關接口,而WSGI就是PythonCGI包裝,相對於FastcgiPHPCGI包裝, 它規定了Web服務器調用其餘可執行程序(CGI程序)的接口協議標準。

(1) WSGI(Web Server Gateway Interface, Web服務器網關接口)是一種規範, 是將Python服務器端程序鏈接到Web服務器的通用協議,它實現了Web服務器和Web應用程序之間的解耦(decoupling)

 

(2) WSGI接口規範的目的就是規範Web服務器與Web應用之間的交互,在協議之間進行轉換(WSGI就是Web就是一個網關(Gateway),而網關的做用就是在協議之間進行轉換。)

 

(3) WSGIWeb組件分紅三類:Web服務器(WSGI Server)Web中間件(WSGI Middleware)Web應用程序(WSGI Application)

--服務器:指的是實現了調用應用(call application)的部分。

--中間件:處於服務器和應用兩側,起粘合做用,具體包括:請求處理、environ, 即環境變量的處理。

--應用:指的是能夠被調用的一個對象,通常指的是包含一個__call__方法(實例能夠看成函數通常調用)的對象。

 

python標準庫提供的獨立WSGI服務器(WSGI server)稱爲wsgiref(模塊)

 

注意

※ environPython內置的dict對象,它是系統的環境變量;

經過import os; os.environ獲取全部的環境變量;

查看環境變量: os.environ.get('path')能夠獲取path這個環境變量被賦值的路徑

設置環境變量: os.environ["PATH"] = os.environ["PATH"]+';' + "要增長的路徑"

 

WSGI的角色

WSGI的接口分爲兩個:

一個是它與Web服務器的接口,另外一個是它與服務器端程序的接口。

① WSGI ServerWeb服務器的接口包括uwsgifast cgi

(咱們無須詳細學習)

服務器端的開發者須要關注的是WSGI與服務器端程序的接口。

※ DjangoCherryPy 都自帶符合WSGI規範的 WSGI server,

而有些 WSGI 下的框架好比 pylonsbfg , 本身不實現 WSGI server, 而是使用 paste 做爲 WSGI server, paste 是流行的 WSGI server, 帶有不少中間件。

 

Django內置的服務器

Django 內部自帶了一個方便本地測試的小服務器, 因此在剛開始學習 Django 的時候並不需搭建 apache 或者 nginx 服務器.

 

Django 自帶的服務器基於 python wsgiref 模塊實現的, 其百分之七八十的代碼都是 wsgiref 中的代碼, 只重寫了一部分.

具體來講, Django 內置服務器基於 django.core.servers django.core.handlers這兩個類共同實現.

 

 

拾玖中間件(MIDDLEWARE )

中間件的介紹

django中,中間件其實就是一個類; settings.py中,MIDDLEWARE 列表的每個元素就是一箇中間件:

 

http請求到達視圖函數以前和視圖函數return以後,Django會根據本身的規則在合適的時機執行中間件中相應的方法

 

注意: 若是在其中一箇中間件裏 request方法裏 return了值,就會執行當前中間件的response方法,返回給用戶而後報錯, 而且不會再執行下一個中間件。

 

Django會先按順序執行各個中間件的request方法, 而後執行視圖函數, 而後反序執行各個中間件的response方法.例如:

 

自定義中間件的步驟

  1. project下隨便建立一個py文件

  1. setings文件中註冊這個 py文件

結果:

爲啥報錯了呢?

 

由於自定義的中間件response方法沒有return結果交給下一個中間件,致使http請求中斷了!!!

 

注意: 自定義的中間件request 方法不要return結果, 不然, 中間件再也不會往下執行,致使 http請求到達不了視圖層.

 

 

中間件中能夠定義5個方法,分別是:

process_request(self,request)

process_view(self, request, callback, callback_args, callback_kwargs)

process_template_response(self,request,response)

process_exception(self, request, exception)

process_response(self, request, response

有關自定義中間件, 參見: https://www.cnblogs.com/huchong/p/7819296.html

 

 

貳拾Django的信號

信號的定義

Django中提供了"信號調度",用於在框架執行操做時解耦.

一些動做發生的時候,系統會根據信號定義的函數執行相應的操做. (例以下面的: 建立數據庫記錄時, 觸發pre_savepost_save信號)

對於Django內置的信號,僅需註冊指定信號,當程序執行相應操做時,系統會自動觸發註冊函數

 

信號的案例

建立數據庫記錄時, 觸發pre_savepost_save信號

# models.py

from django.db import models 
class UserInfo(models.Model): 
 name=models.CharField(max_length=32) 
 pwd=models.CharField(max_length=64)

#

views.py 
from django.shortcuts import render,HttpResponsefrom app01 import models 
def index(request): 
 models.UserInfo.objects.create(name="mysql",pwd="mysql123") 
 return HttpResponse("ok")

#

項目的__init__.py文件中代碼
from django.db.models.signals import pre_save,post_save 

 

def pre_save_func(sender,**kwargs): 
 print("pre_save_func") 
print("pre_save_msg:",sender,kwargs) 

 

def post_save_func(sender,**kwargs): 
 print("post_save_func") 
 print("post_save_msg:",sender,kwargs) 

 

pre_save.connect(pre_save_func) # models對象保存前觸發callback函數
post_save.connect(post_save_func) # models對象保存後觸發函數

#

建立一個index.html網頁(內容不限),用瀏覽器打開這個項目,在服務端後臺打印信息以下: 
pre_save_func 
pre_save_msg: <class 'app01.models.UserInfo'> {'signal': <django.db.models.signals.ModelSignal object at 0x0000000002E62588>, 'instance': <UserInfo: UserInfo object>, 'raw': False, 'using': 'default', 'update_fields': None} 

 

post_save_func 
post_save_msg: <class 'app01.models.UserInfo'> {'signal': <django.db.models.signals.ModelSignal object at 0x0000000002E62630>, 'instance': <UserInfo: UserInfo object>, 'created': True, 'update_fields': None, 'raw': False, 'using': 'default'} 

 

# 比較打印的結果,能夠看到models對象保存後,在打印信息裏包含一個"create=True"的鍵值對.

有關自定義信號

, 詳見: 
http://www.cnblogs.com/haiyan123/p/8259647.html

 

 

貳拾壹 ● Django的緩存

緩存的定義

緩存,緩存將一個某個views的返回值保存至內存或者memcache中,以後再有人來訪問時,則再也不去執行view中的操做,而是直接從內存或者Redis中以前緩存的內容拿到,並返回。

Django settings cache 默認爲

{

'default': {

'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',

}

}

也就是默認利用本地的內存來當緩存,速度很快,固然可能出來內存不夠用的狀況。

 

● Django中提供緩存方式

下面的緩存方式都須要在setting.py裏面配置:

- 開發調試

- 本地內存(默認的緩存方式)

- 文件

- 數據庫

- Memcache緩存(python-memcached模塊)----memcache是一套分佈式的高速緩存系統

- Memcache緩存(pylibmc模塊)

- Redis緩存

詳見:

https://code.ziqiangxuetang.com/django/django-cache.html

http://www.cnblogs.com/haiyan123/p/8424231.html

 

 

貳拾貳 ● admin

django amdindjango提供的一個後臺管理頁面,改管理頁面提供完善的htmlcss,使得你在經過Model建立完數據庫表以後,就能夠對數據進行增刪改查.

咱們學習和使用更加完善的xadmin, 下面只介紹admin的簡單用法.

 

● admin的通常使用步驟

項目名/項目名/urls.py配置url

url(r'^admin/', include(admin.site.urls))

 

註冊medel類到admin: 應用名/admin.py裏面把咱們當前應用models.py裏面的User 這個model註冊進去,以下。

from django.contrib import admin

from .models import User

 

admin.site.register(User)

# 經過admin.site.register()函數逐個聲明要管理的模型類.

# 再如: 假設有Book, MyAdmin, Publish, Author五個模型類:

admin.site.register(Book,MyAdmin) # Author模塊和管理類綁定在一塊兒,註冊到後臺管理

admin.site.register(Publish)

admin.site.register(Author)

 

經過python manage.py runserver命令啓動項目,而後http://127.0.0.1:8000/admin訪問,會自動跳轉到它的主頁,如圖所示:

 

經過"python manage.py createsuperuser"命令建立超級用戶,例如:

python manage.py createsuperuser

Username: admin

Email address: Password:

Password (again):

Superuser created successfully.

 

假如我建立了一個用戶名:admin 密碼:admin123的用戶,咱們就能夠登陸進django admin後臺管理系統了,登陸成功以下所示,咱們能夠經過右側的 "add" 添加用戶:

咱們操做admin和咱們操做數據庫是同樣的,例如上面的Users對應的就是sqlite數據庫中的user,也就是說,若是要求不高的話後臺都不須要咱們開發了!

 

 

貳拾叄設置404頁面和500頁面

1, blog/templates/user下面添加一個404.html和一個500.html頁面,代碼任意,

 

2, 配置setting.py文件,以下:

DEBUG=True的時候, djangorunserver是自動使用StaticFilesHandlerserve 靜態文件的,

DEBUG=False的時候, django就不處理靜態文件, 交由其它的靜態服務器來處理.

 

3, urls.py(settings.py文件下面)添加以下配置: 前面的代碼是固定的,後面代碼的意思是在blog模塊下的views.py中處理這兩個404500錯誤。

 

4, views.py中添加page_not_foundpage_error這兩個方法,用於頁面跳轉,以下:

# 404錯誤
def page_not_found(request): 
 return render(request,'user/404.html',{}) 
# 500錯誤
def page_error(request): 
 return render(request, 'user/500.html', {}) 

 

 

貳拾肆富文本編輯器

經常使用富文本編輯器

Kindeditor

參考: http://www.cnblogs.com/wupeiqi/articles/6307554.html

 

DjangoUeditor3

參考: http://www.cnblogs.com/adc8868/p/7580705.html

 

Tinymce

參考: http://blog.csdn.net/u010505059/article/details/78650742

 

貳拾伍 ● REST & RESTful API

REST, Representational State Transfer"表現層狀態轉化", 全稱是 Resource Representational State Transfer, "資源在網絡中以某種表現形式進行狀態轉移"

※ Resource:資源,即數據(網絡的核心,例如newsfeedfriends等);

Representational:某種表現形式,例如JSONXMLJPEG等;

State Transfer:狀態變化, 經過GET,POSTHTTP動詞實現。

RESTful API: 符合REST架構設計的API, HTTP協議就是屬於REST架構的設計模式, 例如: 無狀態,請求-響應機制.

RESTful API要求增刪查改都是一個地址,具體靠HTTP請求頭部信息判斷, HTTP請求頭包括Content-Type等信息.

※ REST是全部Web應用都應該遵照的架構設計指導原則。固然,REST並非法律,違反了REST的指導原則,仍然可以實現應用的功能。可是違反了REST的指導原則,會付出不少代價,特別是對於大流量的網站而言

相關文章
相關標籤/搜索