国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用 Django 零成本快速實現(xiàn) API 服務

Worktile / 1270人閱讀

摘要:為什么要用對于序列化數(shù)據(jù)的解決方案已經(jīng)有以下幾種內(nèi)建序列化器它可以序列化但無法直接序列化多帶帶的數(shù)據(jù)。與對依舊有效默認為用法轉換為字符串。

寫后臺的時候經(jīng)常需要寫數(shù)據(jù)接口,這時就需要用到序列化工具, 而默認到序列化工具對 Django model 的序列化支持有限。 同時 Django 本身的序列化工具我在使用時也覺得有諸多不便,因此我嘗試自己寫了一個快速序列化工具,幫助我快速簡單的實現(xiàn)數(shù)據(jù)接口。

Django Simple Serializer 是一個可以幫助開發(fā)者快速將 Django 數(shù)據(jù)或者 python data 序列化為 json|raw 數(shù)據(jù)的工具。

為什么要用 Django Simple Serializer ?

對于序列化 Django 數(shù)據(jù)的解決方案已經(jīng)有以下幾種:

django.core.serializers

Django內(nèi)建序列化器, 它可以序列化Django model query set 但無法直接序列化多帶帶的Django model數(shù)據(jù)。如果你的model里含有混合數(shù)據(jù) , 這個序列化器同樣無法使用(如果你想直接使用序列化數(shù)據(jù)). 除此之外, 如果你想直接把序列化數(shù)據(jù)返回給用戶,顯然它包含了很多敏感及對用戶無用對信息。

QuerySet.values()

和上面一樣, 如果你的model里有 DateTimeField 或者其他特殊的 Field 以及額外數(shù)據(jù), QuerySet.values() 同樣沒法工作。

django-rest-framework serializers

django-rest-framework 是一個可以幫助你快速構建 REST API 的強力框架。 他擁有完善的序列化器,但在使用之前你需要花費一些時間入門, 并學習 cbv 的開發(fā)方式, 對于有時間需求的項目或者已經(jīng)存在的項目需要增加數(shù)據(jù)接口時顯然這不是最好的解決方案。

django simple serializer

我希望可以快速簡單的序列化數(shù)據(jù), 所以我設計了一種可以不用任何額外的配置與學習而將Django data 或者 python data 序列化為相應的數(shù)據(jù)的簡單的方式。 這就是為什么我寫了 django simple serializer。


運行需求

Django >= 1.5

Python 2.5 及以上 (暫不支持 python 3)

安裝

Install using pip:

pip install django-simple-serializer
使用 django simple serializer 進行開發(fā) 序列化Django data

假設我們有以下Django models:

class Classification(models.Model):
    c_name = models.CharField(max_length=30, unique=True)

class Article(models.Model):
    caption = models.CharField(max_length=50)
    classification = models.ForeignKey(Classification, related_name="cls_art")
    content = models.TextField()
    publish = models.BooleanField(default=False)

使用django simple serializer的簡單例子:

from dss.Serializer import serializer
article_list = Article.objects.all()
data = serializer(article_list)

data:

[{"read_count": 0, "create_time": 1432392456.0, "modify_time": 1432392456.0, "sub_caption": u"first", "comment_count": 0, u"id": 31}, {"read_count": 0, "create_time": 1432392499.0, "modify_time": 1432392499.0, "sub_caption": u"second", "comment_count": 0, u"id": 32}]

默認情況下, 序列器會返回一個 list 或者 dict(對于單個model實例), 你可以設置參數(shù) “output_type” 來決定序列器返回 json/raw.


API 手冊 dss.Serializer

提供序列器

function serializer(data, datetime_format="timestamp", output_type="raw", include_attr=None, except_attr=None, foreign=False, many=False)

Parameters:

data(_Required_|(QuerySet, Page, list, django model object))-待處理數(shù)據(jù)

datetime_format(_Optional_|string)-如果包含 datetime 將 datetime 轉換成相應格式.默認為 "timestamp"(時間戳)

output_type(_Optional_|string)-serialize type. 默認“raw”原始數(shù)據(jù),即返回list或dict

include_attr(_Optional_|(list, tuple))-只序列化 include_attr 列表里的字段。默認為 None

exclude_attr(_Optional_|(list, tuple))-不序列化 except_attr 列表里的字段。默認為 None

foreign(_Optional_|bool)-是否序列化 ForeignKeyField 。include_attr 與 exclude_attr 對 ForeignKeyField 依舊有效。 默認為 False

many(_Optional_|bool)-是否序列化 ManyToManyField 。include_attr 與 exclude_attr 對 ManyToManyField 依舊有效 默認為 False

用法:

datetime_format:

parameters intro
string 轉換 datetime 為字符串。如: "2015-05-10 10:19:22"
timestamp 轉換 datetime 為時間戳。如: "1432124420.0"

例子:

from dss.Serializer import serializer
article_list = Article.objects.all()
data = serializer(article_list, datetime_format="string", output_type="json")

data:

[
    {
        "read_count": 0,
        "sub_caption": "first",
        "publish": true,
        "content": "first article",
        "caption": "first",
        "comment_count": 0,
        "create_time": "2015-05-23 22:47:36",
        "modify_time": "2015-05-23 22:47:36",
        "id": 31
    },
    {
        "read_count": 0,
        "sub_caption": "second",
        "publish": false,
        "content": "second article",
        "caption": "second",
        "comment_count": 0,
        "create_time": "2015-05-23 22:48:19",
        "modify_time": "2015-05-23 22:48:19",
        "id": 32
    }
]

output_type

parameters intro
raw 將list或dict中的特殊對象序列化后輸出為list或dict
dict 同 raw
json 轉換數(shù)據(jù)為 json

xml 轉換數(shù)據(jù)為 xml (暫時去除)

例子:

from dss.Serializer import serializer
article_list = Article.objects.all()[0]
data = serializer(article_list, output_type="json")

data:

{
        "read_count": 0,
        "sub_caption": "first",
        "publish": true,
        "content": "first article",
        "caption": "first",
        "comment_count": 0,
        "create_time": "2015-05-23 22:47:36",
        "modify_time": "2015-05-23 22:47:36",
        "id": 31
    }

include_attr

例子:

from dss.Serializer import serializer
article_list = Article.objects.all()
data = serializer(article_list, output_type="json", include_attr=("content", "caption",))

data:

[
    {
        "content": "first article",
        "caption": "first"
    },
    {
        "content": "second article",
        "caption": "second"
    }
]

exclude_attr

例子:

from dss.Serializer import serializer
article_list = Article.objects.all()
data = serializer(article_list, output_type="json", except_attr=("content",))

data:

    [
        {
            "read_count": 0,
            "sub_caption": "first",
            "publish": true,
            "caption": "first",
            "comment_count": 0,
            "create_time": 1432392456,
            "modify_time": 1432392456,
            "id": 31
        },
        {
            "read_count": 0,
            "sub_caption": "second",
            "publish": false,
            "caption": "second",
            "comment_count": 0,
            "create_time": 1432392499,
            "modify_time": 1432392499,
            "id": 32
        }
    ]
    

foreign

序列化數(shù)據(jù)中的 ForeignKeyField 及其子項目

例子:

from dss.Serializer import serializer
article_list = Article.objects.all()
data = serializer(article_list, output_type="json", include_attr=("classification", "caption", "create_time", foreign=True)

data:

    [
        {
            "caption": "first",
            "create_time": 1432392456,
            "classification": {
                "create_time": 1429708506,
                "c_name": "python",
                "id": 1,
                "modify_time": 1429708506
            }
        },
        {
            "caption": "second",
            "create_time": 1432392499,
            "classification": {
                "create_time": 1430045890,
                "c_name": "test",
                "id": 5,
                "modify_time": 1430045890
            }
        }
    ]

many
序列化 ManyToManyField

example:

from dss.Serializer import serializer
article_list = Article.objects.all()
data = serializer(article_list, output_type="json", include_attr=("classification", "caption", "create_time", many=True)

測試數(shù)據(jù)無 ManyToManyField ,數(shù)據(jù)格式同上

dss.Mixin

提供序列器 Mixin

class JsonResponseMixin(object)
    datetime_type = "string"                # 輸出datetime時間格式。默認為“string”,可選參數(shù)相見dss.Serializer.serializer
    foreign = False                         # 是否序列化ForeignField。默認為False
    many = False                            # 是否序列化ManyToManyField。默認為False
    include_attr = None                     # 只序列化include_attr包含的屬性。默認為None,接受一個包含屬性名稱的tuple
    exclude_attr = None                     # 不序列化exclude_attr包含的屬性。默認為None,接受一個包含屬性名稱的tuple
說明:

將普通class based view 轉換為返回json數(shù)據(jù)的class based view,適用于DetailView等

用法:

例子:

# view.py
from dss.Mixin import JsonResponseMixin
from django.views.generic import DetailView
from model import Article

class TestView(JsonResponseMixin, DetailView):
    model = Article
    datetime_type = "string"
    pk_url_kwarg = "id"


# urls.py
from view import TestView
urlpatterns = patterns("",
    url(r"^test/(?P(d)+)/$", TestView.as_view()),
)
    

訪問:localhost:8000/test/1/

response:

{
    "article": {
        "classification_id": 5, 
        "read_count": 0, 
        "sub_caption": "second", 
        "comments": [], 
        "content": "asdfasdfasdf", 
        "caption": "second", 
        "comment_count": 0, 
        "id": 32, 
        "publish": false
    }, 
    "object": {
        "classification_id": 5, 
        "read_count": 0, 
        "sub_caption": "second", 
        "comments": [], 
        "content": "asdfasdfasdf", 
        "caption": "second", 
        "comment_count": 0, 
        "id": 32, 
        "publish": false
    }, 
    "view": ""
}

class MultipleJsonResponseMixin(JsonResponseMixin):

說明:

將列表類視圖轉換為返回json數(shù)據(jù)的類視圖,適用于ListView等

用法:

例子:

# view.py
from dss.Mixin import MultipleJsonResponseMixin
from django.views.generic import ListView
from model import Article

class TestView(MultipleJsonResponseMixin, ListView):
    model = Article
    query_set = Article.objects.all()
    paginate_by = 1
    datetime_type = "string"


# urls.py
from view import TestView
urlpatterns = patterns("",
    url(r"^test/$", TestView.as_view()),
)
    

訪問:localhost:8000/test/

response:

{
    "paginator": "", 
    "article_list": [
        {
            "classification_id": 1, 
            "read_count": 2, 
            "sub_caption": "first", 
            "content": "first article", 
            "caption": "first", 
            "comment_count": 0, 
            "publish": false, 
            "id": 31
        }, 
        {
            "classification_id": 5, 
            "read_count": 0, 
            "sub_caption": "", 
            "content": "testseteset", 
            "caption": "hehe", 
            "comment_count": 0, 
            "publish": false, 
            "id": 33
        }, 
        {
            "classification_id": 5, 
            "read_count": 0, 
            "sub_caption": "second", 
            "content": "asdfasdfasdf", 
            "caption": "second", 
            "comment_count": 0, 
            "publish": false, 
            "id": 32
        }
    ], 
    "object_list": [
        {
            "classification_id": 1, 
            "read_count": 2, 
            "sub_caption": "first", 
            "content": "first article", 
            "caption": "first", 
            "comment_count": 0, 
            "publish": false, 
            "id": 31
        }, 
        {
            "classification_id": 5, 
            "read_count": 0, 
            "sub_caption": "", 
            "content": "testseteset", 
            "caption": "hehe", 
            "comment_count": 0, 
            "publish": false, 
            "id": 33
        }, 
        {
            "classification_id": 5, 
            "read_count": 0, 
            "sub_caption": "second", 
            "content": "asdfasdfasdf", 
            "caption": "second", 
            "comment_count": 0, 
            "publish": false, 
            "id": 32
        }
    ], 
    "page_obj": {
        "current": 1, 
        "next": 2, 
        "total": 3, 
        "page_range": [
            {
                "page": 1
            }, 
            {
                "page": 2
            }, 
            {
                "page": 3
            }
        ], 
        "previous": null
    }, 
    "is_paginated": true, 
    "view": ""
}

class FormJsonResponseMixin(JsonResponseMixin):

說明:

將普通class based view 轉換為返回json數(shù)據(jù)的class based view,適用于CreateView、UpdateView、FormView等

用法:

例子:

# view.py
from dss.Mixin import FormJsonResponseMixin
from django.views.generic import UpdateView
from model import Article

class TestView(FormJsonResponseMixin, UpdateView):
    model = Article
    datetime_type = "string"
    pk_url_kwarg = "id"


# urls.py
from view import TestView
urlpatterns = patterns("",
    url(r"^test/(?P(d)+)/$", TestView.as_view()),
)
    

訪問:localhost:8000/test/1/

response:

{
    "article": {
        "classification_id": 5, 
        "read_count": 0, 
        "sub_caption": "second", 
        "content": "asdfasdfasdf", 
        "caption": "second", 
        "comment_count": 0, 
        "id": 32, 
        "publish": false
    }, 
    "form": [
        {
            "field": "caption"
        }, 
        {
            "field": "sub_caption"
        }, 
        {
            "field": "read_count"
        }, 
        {
            "field": "comment_count"
        }, 
        {
            "field": "classification"
        }, 
        {
            "field": "content"
        }, 
        {
            "field": "publish"
        }
    ], 
    "object": {
        "classification_id": 5, 
        "read_count": 0, 
        "sub_caption": "second", 
        "content": "asdfasdfasdf", 
        "caption": "second", 
        "comment_count": 0, 
        "id": 32, 
        "publish": false
    }, 
    "view": ""
}
對額外數(shù)據(jù)的序列化支持:

當我們想在 model 中加入一些額外的數(shù)據(jù)并也想被序列化時, 現(xiàn)在可以這樣做:

    def add_extra(article):
        comments = Comment.objects.filter(article=article)
        setattr(article, "comments", comments)
    
    articles = Article.objects.all()
    map(add_extra, articles)
    result = serializer(articles)

序列化的結果數(shù)據(jù)中將會包含"comments"哦.

額外加入的數(shù)據(jù)可以是一個普通的數(shù)據(jù)類型、 另一個 Django model、 字典、 列表甚至 QuerySet

django simple serializer 的實際例子: 個人網(wǎng)站后臺數(shù)據(jù)接口

項目地址: django-simple-serializer

歡迎大家拍磚并提供寶貴意見。

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37997.html

相關文章

  • 30歲基礎自學編程,先學哪種語言最好?

    摘要:大學,光學工程研究生畢業(yè),和程序猿完全不搭邊。那怎么辦,試著學一學唄,學習才是程序猿的天性。所以我在想程序猿是不是都需要新知識刺激一下,才能保持興奮的頭腦。有句話說的很對程序猿就像好奇的貓,追著毛球的線頭玩,最后一個毛球在腦袋里攪漿糊。 說說我自己的經(jīng)歷。211大學,光學工程研究生畢業(yè),和程序猿完全不搭邊。 畢業(yè)后進了成都某國字頭研究所,在行業(yè)里摸爬滾打了四年,2018年機緣巧合在家養(yǎng)...

    xietao3 評論0 收藏0
  • 獻給正在學習python的你,10個最受歡迎的Python開源框架

    摘要:輕量級框架是一個輕量級框架,包含多維數(shù)據(jù)分析和瀏覽聚合數(shù)據(jù)等工具。創(chuàng)造矢量地圖的輕量級框架是一個庫,用來為生成地圖。異步非阻塞的框架的全稱是,傳說中性能高高的框架。 如果你正在學習python,那么這10個開源框架,你可千萬別錯過,這些框架包括事件I/O,OLAP,Web開發(fā),高性能網(wǎng)絡通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你了。 1.Django: Python Web應...

    Paul_King 評論0 收藏0
  • 蠎周刊 2015 年度最贊

    摘要:蠎周刊年度最贊親俺們又來回顧又一個偉大的年份兒包去年最受歡迎的文章和項目如果你錯過了幾期就這一期不會丟失最好的嗯哼還為你和你的準備了一批紀念裇從這兒獲取任何時候如果想分享好物給大家在這兒提交喜歡我們收集的任何意見建議通過來吧原文 Title: 蠎周刊 2015 年度最贊Date: 2016-01-09 Tags: Weekly,Pycoder,Zh Slug: issue-198-to...

    young.li 評論0 收藏0
  • Python測試開發(fā)中Django和Flask框架的區(qū)別

    摘要:在談中框架和框架的區(qū)別之前,我們需要先探討如下幾個問題。通過大數(shù)據(jù)統(tǒng)計分析全球著名的網(wǎng)站對和這兩個框架的調(diào)查分析。從全球著名的代碼托管平臺上的和數(shù)量上分別為,分別為。 在談Python中Django框架和Flask框架的區(qū)別之前,我們需要先探討如下幾個問題。 一、為什么要使用框架? showImg(https://segmentfault.com/img/remote/14600000...

    B0B0 評論0 收藏0
  • Django 博客開發(fā)教程 0 - 前言

    摘要:教程特點免費中文零基礎,完整的項目,基于最新版和。如果你已有一定的開發(fā)經(jīng)驗,也能從本教程中學到更多的開發(fā)技巧。在博客教程前言追夢人物的博客的評論區(qū)留言。將問題的詳細描述通過郵件發(fā)送至,一般會在小時內(nèi)答復。 Django 是使用 Python 編寫的一個開源 Web 框架,可以用它來快速搭建一個高性能的網(wǎng)站。 Django makes it easier to build better...

    jone5679 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<