django-rest-framework框架的學(xué)習(xí)使用

REST的環(huán)境

virtualenv envsource env/bin/activate

在虛擬環(huán)境下:

pip install django
pip install djangorestframework
pip install pygments  # 代碼高亮

Serializer序列化

ModelSerializer

models.py同目錄下建立serializer.py
并且對應(yīng)于models.py

class SnippetSerializer(serializers.ModelSerializer):    
  class Meta:        
    model = Snippet        
    fields = ('id', 'title', 'code', 'linenos', 'language', 'style')        // 對應(yīng)于model中的字段```

用戶POST且沒有CSRF token時需要:

@csrf_exempt


*最終目的:用于將model中的instances進(jìn)行序列化并輸出即*:

my_msg_list = ModelMsgList.objects.filter(user_id=user_id) // 取出model中的instances
msglist = MsgListSerializer(my_msg_list, many=True) //將instances進(jìn)行序列化
msglist.data //取出序列化后的數(shù)據(jù)
Response(msglist.data) //返回數(shù)據(jù)

### Serializer Fields
`source`字段

URLField(source='get_absolute_url')

`format`字段

serializers.CharField(format="%Y-%m-%d %H:%M:%S.%f")

`allow_null`字段

serializers.CharField(allow_null=True)

`default`字段

serializers.CharField(default='')

`label`字段

serializers.CharField(label='ID')

`required`字段
`queryset`字段

serializers.PrimaryKeyRelatedFieldqueryset=User.object.all()

`read_only`字段

serializers.IntegerField(read_only=True)


### Serializer relations
調(diào)用方法:

from rest_framework import serializers
serializer.<Fieldname>

列出一些常見的序列化關(guān)系:
- `ForeignKey`外鍵關(guān)系
- `ManyToManyField`多對多關(guān)系
- `OneToOneField`一對一關(guān)系:用于擴(kuò)展表屬性
- `PrimaryKeyRelatedField`主鍵關(guān)系

class AlbumSerializer(serializers.ModelSerializer):
tracks = serializers.HyperlinkedRelatedField(many=True,read_only=True, view_name='track-detail')
class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')

將序列化成:

{
'album_name': 'Graceland',
'artist': 'Paul Simon',
'tracks': [ // 列表[]需要many = true; URL需view_name=<modelname>-detail
'http://www.example.com/api/tracks/45/',
'http://www.example.com/api/tracks/46/',
'http://www.example.com/api/tracks/47/',
...
]
}

## Request請求
### 請求解析

request.data // POST,PU,DELETE方法,可返回文件
request.query_params // GET方法
request.parsers


### 內(nèi)容協(xié)商:根據(jù)不同的媒體類型進(jìn)行不同的serilization

request.renderer
request.accepted_media_type


### Authentication認(rèn)證
request.user通常返回`django.contrib.auth.models.User`的一個實例禀忆,雖然該行為取決于所使用的認(rèn)證策略嘱吗。

request.user


`request.auth`返回任何附加的身份驗證上下文辽俗。 `request.auth`的確切行為取決于所使用的認(rèn)證策略隧熙,但它通常可以是請求被認(rèn)證的令牌的實例。 如果請求未認(rèn)證,或者沒有其他上下文,則`request.auth`的默認(rèn)值為`None`

request.auth

request.authenticators


### enhancements

request.method //返回HTTP method名,大寫


### 標(biāo)準(zhǔn)HTTP Response屬性

request.META // HTTP Header
request.session // SESSION


## Response

Response(data, status=None, template_name=None, headers=None, content_type=None)
render // 渲染器
data // 要返回的數(shù)據(jù)內(nèi)容
frome rest_framework import status
status.HTTP_404_NOT_FOUND
(關(guān)于status code )[http://www.django-rest-framework.org/api-guide/status-codes/]


## View視圖

from rest_framework.views import APIView
class ListUsers(APIView):
""" View to list all users in the system.

  • Requires token authentication.
  • Only admin users are able to access this view.
    """
    authentication_classes = (authentication.TokenAuthentication,) //需要token認(rèn)證
    permission_classes = (permissions.IsAdminUser,) // 僅僅管理者用戶能接入這個view
## Returning URLs
一般情況下,返回一個URI絕對的絕對路徑比相對路徑更好,例如`http://example.com/foobar`比`/foobar`好REST框架提供兩個工具函數(shù)幫助Web API返回URI的絕對路徑

reverse(viewname, *args, **kwargs)
reverse_lazy(viewname, *args, **kwargs)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粒蜈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子旗国,更是在濱河造成了極大的恐慌枯怖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件能曾,死亡現(xiàn)場離奇詭異度硝,居然都是意外死亡肿轨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門蕊程,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椒袍,“玉大人,你說我怎么就攤上這事藻茂【允睿” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵辨赐,是天一觀的道長优俘。 經(jīng)常有香客問我,道長掀序,這世上最難降的妖魔是什么帆焕? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮不恭,結(jié)果婚禮上叶雹,老公的妹妹穿的比我還像新娘。我一直安慰自己换吧,他們只是感情好折晦,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著式散,像睡著了一般筋遭。 火紅的嫁衣襯著肌膚如雪打颤。 梳的紋絲不亂的頭發(fā)上暴拄,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音编饺,去河邊找鬼乖篷。 笑死,一個胖子當(dāng)著我的面吹牛透且,可吹牛的內(nèi)容都是我干的撕蔼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼秽誊,長吁一口氣:“原來是場噩夢啊……” “哼鲸沮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锅论,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤讼溺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后最易,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怒坯,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡炫狱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剔猿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片视译。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖归敬,靈堂內(nèi)的尸體忽然破棺而出酷含,到底是詐尸還是另有隱情,我是刑警寧澤汪茧,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布第美,位于F島的核電站,受9級特大地震影響陆爽,放射性物質(zhì)發(fā)生泄漏什往。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一慌闭、第九天 我趴在偏房一處隱蔽的房頂上張望别威。 院中可真熱鬧,春花似錦驴剔、人聲如沸省古。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豺妓。三九已至,卻和暖如春布讹,著一層夾襖步出監(jiān)牢的瞬間琳拭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工描验, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留白嘁,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓膘流,卻偏偏與公主長得像絮缅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呼股,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容