成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Django Rest Framework 序列化關(guān)系模型

nihao / 2818人閱讀

摘要:結(jié)合官方分享一下框架中關(guān)于序列化關(guān)系模型的理解。而序列化關(guān)系模型則是對(duì)里數(shù)據(jù)模型中帶有關(guān)系的如和字段作序列化。提供了靈活的序列化關(guān)系模型,讓開(kāi)發(fā)者可以自由定制序列化數(shù)據(jù)模型。例如,將主鍵序列化為緊湊的十六進(jìn)制表示。

這兩天一直在學(xué)習(xí) Django Rest Framework 這個(gè)框架,這是一個(gè)非常流行的 REST API 框架,深度整合 Django。但與傳統(tǒng) MVC 模式的不同, Django REST Framework 在使用過(guò)程中,需要理解一些新的東西。結(jié)合官方 API 分享一下框架中關(guān)于序列化關(guān)系模型的理解。

序列化模型與序列化關(guān)系模型

序列化模型,顧名思義,即對(duì) models 里的數(shù)據(jù)模型作序列化。而序列化關(guān)系模型則是對(duì) models 里數(shù)據(jù)模型中帶有關(guān)系的如 ForeignKey, ManyToManyFieldOneToOneField 字段作序列化。Django Rest Framework 提供了靈活的序列化關(guān)系模型,讓開(kāi)發(fā)者可以自由定制序列化數(shù)據(jù)模型。

序列化關(guān)系模型

根據(jù)官方的例子來(lái)看一下每一個(gè)關(guān)系模型的介紹。

數(shù)據(jù)模型如下:

class Album(models.Model):
    album_name = models.CharField(max_length=100)
    artist = models.CharField(max_length=100)

class Track(models.Model):
    album = models.ForeignKey(Album, related_name="tracks", on_delete=models.CASCADE)
    order = models.IntegerField()
    title = models.CharField(max_length=100)
    duration = models.IntegerField()

    class Meta:
        unique_together = ("album", "order")
        ordering = ["order"]

    def __unicode__(self):
        return "%d: %s" % (self.order, self.title)
StringRelatedField

使用 StringRelatedField 將返回一個(gè)對(duì)應(yīng)關(guān)系 model 的 __unicode__() 方法的字符串。

這個(gè)字段是只讀的。

參數(shù):

many 如果應(yīng)用于多對(duì)多關(guān)系,則應(yīng)將此參數(shù)設(shè)置為 True

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.StringRelatedField(many=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

{
    "album_name": "Things We Lost In The Fire",
    "artist": "Low",
    "tracks": [
        "1: Sunflower",
        "2: Whitetail",
        "3: Dinosaur Act",
        ...
    ]
}
PrimaryKeyRelatedField

使用 PrimaryKeyRelatedField 將返回一個(gè)對(duì)應(yīng)關(guān)系 model 的主鍵。

參數(shù):

queryset 用于在驗(yàn)證字段輸入時(shí)模型實(shí)例查找。 關(guān)系必須明確設(shè)置 queryset,或設(shè)置 read_only = True

many 如果是對(duì)應(yīng)多個(gè)的關(guān)系,就設(shè)置為 True

allow_null 如果設(shè)置為 True,則該字段將接受 None 的值或?yàn)榭盏年P(guān)系的空字符串。默認(rèn)為 False

pk_field 設(shè)置為一個(gè)字段以控制主鍵值的序列化/反序列化。例如,pk_field = UUIDField(format ="hex") 將UUID主鍵序列化為緊湊的十六進(jìn)制表示。

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

{
    "album_name": "Undun",
    "artist": "The Roots",
    "tracks": [
        89,
        90,
        91,
        ...
    ]
}
HyperlinkedRelatedField

使用 HyperlinkedRelatedField 將返回一個(gè)超鏈接,該鏈接指向?qū)?yīng)關(guān)系 model 的詳細(xì)數(shù)據(jù),view-name 是必選參數(shù),為對(duì)應(yīng)的視圖生成超鏈接。

參數(shù):

view_name 用作關(guān)系目標(biāo)的視圖名稱(chēng)。如果使用的是標(biāo)準(zhǔn)路由器類(lèi),那么它的格式為 -detail 的字符串

queryset 驗(yàn)證字段輸入時(shí)用于模型實(shí)例查詢(xún)的查詢(xún)器。關(guān)系必須明確設(shè)置 queryset,或設(shè)置 read_only = True

many 如果應(yīng)用于多對(duì)多關(guān)系,則應(yīng)將此參數(shù)設(shè)置為 True

allow_null 如果設(shè)置為 True,則該字段將接受 None 的值或?yàn)榭盏年P(guān)系的空字符串。默認(rèn)為 False

lookup_field 應(yīng)該用于查找的目標(biāo)上的字段。應(yīng)該對(duì)應(yīng)于引用視圖上的 URL 關(guān)鍵字參數(shù)。默認(rèn)值為 pk

lookup_url_kwarg 與查找字段對(duì)應(yīng)的 URL conf 中定義的關(guān)鍵字參數(shù)的名稱(chēng)。默認(rèn)使用與 lookup_field 相同的值

format 如果使用 format 后綴,超鏈接字段將對(duì)目標(biāo)使用相同的 format 后綴,除非使用 format 參數(shù)進(jì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")

序列化結(jié)果如下:

{
    "album_name": "Graceland",
    "artist": "Paul Simon",
    "tracks": [
        "http://www.example.com/api/tracks/45/",
        "http://www.example.com/api/tracks/46/",
        "http://www.example.com/api/tracks/47/",
        ...
    ]
}
SlugRelatedField

使用 SlugRelatedField 將返回一個(gè)指定對(duì)應(yīng)關(guān)系 model 中的字段,需要擦參數(shù) slug_field 中指定字段名稱(chēng)。

參數(shù):

slug_field 應(yīng)該用于表示目標(biāo)的字段。這應(yīng)該是唯一標(biāo)識(shí)任何給定實(shí)例的字段。例如 username 。這是必選參數(shù)

queryset 驗(yàn)證字段輸入時(shí)用于模型實(shí)例查詢(xún)的查詢(xún)器。 關(guān)系必須明確設(shè)置 queryset,或設(shè)置 read_only = True

many 如果應(yīng)用于多對(duì)多關(guān)系,則應(yīng)將此參數(shù)設(shè)置為 True

allow_null 如果設(shè)置為 True,則該字段將接受 None 的值或?yàn)榭盏年P(guān)系的空字符串。默認(rèn)為 False

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field="title"
     )

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

{
    "album_name": "Dear John",
    "artist": "Loney Dear",
    "tracks": [
        "Airport Surroundings",
        "Everything Turns to You",
        "I Was Only Going Out",
        ...
    ]
}
HyperlinkedIdentityField

使用 HyperlinkedIdentityField 將返回指定 view-name 的超鏈接的字段。

參數(shù):

view_name 應(yīng)該用作關(guān)系目標(biāo)的視圖名稱(chēng)。如果您使用的是標(biāo)準(zhǔn)路由器類(lèi),則它將是格式為 -detail 的字符串。必選參數(shù)

lookup_field 應(yīng)該用于查找的目標(biāo)上的字段。應(yīng)該對(duì)應(yīng)于引用視圖上的 URL 關(guān)鍵字參數(shù)。默認(rèn)值為 pk

lookup_url_kwarg 與查找字段對(duì)應(yīng)的 URL conf 中定義的關(guān)鍵字參數(shù)的名稱(chēng)。默認(rèn)使用與 lookup_field 相同的值

format 如果使用 format 后綴,超鏈接字段將對(duì)目標(biāo)使用相同的 format 后綴,除非使用 format 參數(shù)進(jìn)行覆蓋

序列化模型如下

class AlbumSerializer(serializers.HyperlinkedModelSerializer):
    track_listing = serializers.HyperlinkedIdentityField(view_name="track-list")

    class Meta:
        model = Album
        fields = ("album_name", "artist", "track_listing")

序列化結(jié)果如下:

{
    "album_name": "The Eraser",
    "artist": "Thom Yorke",
    "track_listing": "http://www.example.com/api/track_list/12/",
}
嵌套序列化關(guān)系模型

在序列化模型中指定嵌套序列化關(guān)系模型將返回一個(gè)該嵌套序列化關(guān)系模型對(duì)應(yīng)的數(shù)據(jù)模型中序列化的數(shù)據(jù)。
讀起來(lái)有些拗口,看例子吧。

參數(shù):

many 如果應(yīng)用于多對(duì)多關(guān)系,則應(yīng)將此參數(shù)設(shè)置為 True

序列化模型如下

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ("order", "title", "duration")

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

 {
    "album_name": "The Grey Album",
    "artist": "Danger Mouse",
    "tracks": [
        {"order": 1, "title": "Public Service Announcement", "duration": 245},
        {"order": 2, "title": "What More Can I Say", "duration": 264},
        {"order": 3, "title": "Encore", "duration": 159},
    ],
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44450.html

相關(guān)文章

  • Django Rest Framework 列化關(guān)系模型

    摘要:結(jié)合官方分享一下框架中關(guān)于序列化關(guān)系模型的理解。而序列化關(guān)系模型則是對(duì)里數(shù)據(jù)模型中帶有關(guān)系的如和字段作序列化。提供了靈活的序列化關(guān)系模型,讓開(kāi)發(fā)者可以自由定制序列化數(shù)據(jù)模型。例如,將主鍵序列化為緊湊的十六進(jìn)制表示。 這兩天一直在學(xué)習(xí) Django Rest Framework 這個(gè)框架,這是一個(gè)非常流行的 REST API 框架,深度整合 Django。但與傳統(tǒng) MVC 模式的不同, ...

    BlackHole1 評(píng)論0 收藏0
  • Django Rest Framework 列化關(guān)系模型

    摘要:結(jié)合官方分享一下框架中關(guān)于序列化關(guān)系模型的理解。而序列化關(guān)系模型則是對(duì)里數(shù)據(jù)模型中帶有關(guān)系的如和字段作序列化。提供了靈活的序列化關(guān)系模型,讓開(kāi)發(fā)者可以自由定制序列化數(shù)據(jù)模型。例如,將主鍵序列化為緊湊的十六進(jìn)制表示。 這兩天一直在學(xué)習(xí) Django Rest Framework 這個(gè)框架,這是一個(gè)非常流行的 REST API 框架,深度整合 Django。但與傳統(tǒng) MVC 模式的不同, ...

    1fe1se 評(píng)論0 收藏0
  • Django REST FrameWork中文教程4:驗(yàn)證和權(quán)限

    摘要:未經(jīng)身份驗(yàn)證的請(qǐng)求應(yīng)具有完全只讀訪問(wèn)權(quán)限。其中一個(gè)字段將用于表示創(chuàng)建代碼段的用戶(hù)。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請(qǐng)求和響應(yīng)中文教程基于類(lèi)的視圖中文教程驗(yàn)證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶(hù)端庫(kù) 目前,我們的API對(duì)誰(shuí)可以編輯或刪除代碼段沒(méi)有任何限制。我們想要一些更高級(jí)的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗(yàn)證的用戶(hù)可以創(chuàng)建...

    luodongseu 評(píng)論0 收藏0
  • Django REST FrameWork中文教程4:驗(yàn)證和權(quán)限

    摘要:未經(jīng)身份驗(yàn)證的請(qǐng)求應(yīng)具有完全只讀訪問(wèn)權(quán)限。其中一個(gè)字段將用于表示創(chuàng)建代碼段的用戶(hù)。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請(qǐng)求和響應(yīng)中文教程基于類(lèi)的視圖中文教程驗(yàn)證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶(hù)端庫(kù) 目前,我們的API對(duì)誰(shuí)可以編輯或刪除代碼段沒(méi)有任何限制。我們想要一些更高級(jí)的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗(yàn)證的用戶(hù)可以創(chuàng)建...

    _ang 評(píng)論0 收藏0
  • Django REST FrameWork中文教程4:驗(yàn)證和權(quán)限

    摘要:未經(jīng)身份驗(yàn)證的請(qǐng)求應(yīng)具有完全只讀訪問(wèn)權(quán)限。其中一個(gè)字段將用于表示創(chuàng)建代碼段的用戶(hù)。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請(qǐng)求和響應(yīng)中文教程基于類(lèi)的視圖中文教程驗(yàn)證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶(hù)端庫(kù) 目前,我們的API對(duì)誰(shuí)可以編輯或刪除代碼段沒(méi)有任何限制。我們想要一些更高級(jí)的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗(yàn)證的用戶(hù)可以創(chuàng)建...

    Hydrogen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<