django 原生API入坑指南

系列文章

使用django rest framework 包裝你的API

前言

本文不會對restful等api概念進行長篇大論步淹,旨在讓大家快速上手api的開發(fā),隨著項目的增多诚撵,領導們意識到缭裆,讓后端人員寫前端代碼是及其低效的事,于是特意給配了前端開發(fā)人員寿烟。前后端分離這種方式讓我們專注于api的開發(fā)澈驼,不用考慮模板層,但寫api也是有一定技巧的筛武,我會循序漸進的從簡到繁缝其,再從繁到簡的介紹django 開發(fā)api的方法。
讓我們開始吧……

Django原生API入門

讓我們先看一段代碼……
以下寫法有很多弊端:
1徘六、數(shù)據(jù)庫字段一個一個的序列化氏淑,不方便,工作量大硕噩,容易出錯
2假残、如果有add_time這種時間字段,序列化的時候還會報錯
3炉擅、使用HttpResponse傳遞json串比較麻煩辉懒。
注:建議大家使用谷歌瀏覽器調(diào)試json代碼,并在谷歌商店安裝JSONView

# -*- coding: utf-8 -*-
__date__ = '2018/2/5 下午10:36'

from django.views.generic.base import View
from django.http import HttpResponse

from machines.models import Machines

import json

class MachinesView(View):
    def get(self, request):
        json_list = []
        machines = Machines.objects.all()[:100]
        for machine in machines:
            json_dict = {}
            json_dict["username"] = machine.name
            json_dict["password"] = machine.password
            json_dict["port"] = machine.port
            .........
            json_list.append(json_dict)
        return HttpResponse(json.dumps(json_list), content_type="application/json")

讓我們解決弊端問題1谍失,優(yōu)化以上代碼……

# -*- coding: utf-8 -*-
__date__ = '2018/2/5 下午10:36'

from django.views.generic.base import View
from django.http import HttpResponse

from machines.models import Machines

import json

from django.forms.models import model_to_dict #<<<<<<<<<<<<重點看我

class MachinesView(View):
    def get(self, request):
        json_list = []
        machines = Machines.objects.all()[:100]
        for machine in machines:
            json_dict = model_to_dict(machine) #<<<<<<<<<<<<<<重點看我
            json_list.append(json_dict) #<<<<<<<<<<<<<<重點看我
        return HttpResponse(json.dumps(json_list), content_type="application/json")

接下來解決弊端問題2眶俩,優(yōu)化上面的代碼……

# -*- coding: utf-8 -*-
__date__ = '2018/2/5 下午10:36'

from django.views.generic.base import View
from django.http import HttpResponse

from machines.models import Machines

import json

from django.core import serializers #<<<<<<<<<<<<<<重點看我和下面的類

class MachinesView(View):
    def get(self, request):
        machines = Machines.objects.all()[:100]
        json_data = serializers.serialize("json", machines)
        json_data = json.loads(json_data)
        return HttpResponse(json.dumps(json_data), content_type="application/json") #這里必須把json_data序列化,才能傳入HttpResponse,json.dumps之后是字符串快鱼,而json.loads后是字典

為了說明json.dumps和json.loads颠印,我臨時改進了上面代碼中的類纲岭,去掉冗余的一步json_data = serializers.serialize("json", machines),然后直接傳json_data給HttpResponse,你也可以不看這一步线罕,直接看解決弊端3的代碼部分

class MachinesView(View):
    def get(self, request):
        machines = Machines.objects.all()[:100]
        json_data = serializers.serialize("json", machines)
        return HttpResponse(json_data, content_type="application/json")

再解決弊端問題3止潮,優(yōu)化上面的代碼……

# -*- coding: utf-8 -*-
__date__ = '2018/2/5 下午10:36'

from django.views.generic.base import View
from django.http import JsonResponse #<<<<<<<<<<<重點看我

from machines.models import Machines

import json

from django.core import serializers 


class MachinesView(View):
    def get(self, request):
        machines = Machines.objects.all()[:100] #取出數(shù)據(jù)
        json_data = serializers.serialize("json", machines) #序列化
        json_data = json.loads(json_data)# 加載成字典
        return JsonResponse(json_data, safe=False) #扔出去

上面只是簡單的介紹了原生API,其實有很多問題沒有解決钞楼,比如動態(tài)文檔問題喇闸,添加文件路徑等問題,接下來我將會重點介紹drf的使用询件,來一一攻破它們燃乍。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宛琅,隨后出現(xiàn)的幾起案子刻蟹,更是在濱河造成了極大的恐慌,老刑警劉巖嘿辟,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舆瘪,死亡現(xiàn)場離奇詭異,居然都是意外死亡仓洼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門色建,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舌缤,你說我怎么就攤上這事」欤” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵介牙,是天一觀的道長壮虫。 經(jīng)常有香客問我,道長环础,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任饶唤,我火速辦了婚禮,結果婚禮上贯钩,老公的妹妹穿的比我還像新娘募狂。我一直安慰自己办素,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布祸穷。 她就那樣靜靜地躺著,像睡著了一般粱哼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揭措,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音绊含,去河邊找鬼。 笑死躬充,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的充甚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盈蛮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抖誉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袒炉,失蹤者是張志新(化名)和其女友劉穎樊零,沒想到半個月后我磁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驻襟,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年劲适,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霞势。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖愕贡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情固以,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布憨琳,位于F島的核電站,受9級特大地震影響篙螟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遍略,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绪杏。 院中可真熱鬧,春花似錦蕾久、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卷谈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間世蔗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工污淋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寸爆。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓盐欺,卻偏偏與公主長得像仅醇,于是被迫代替她去往敵國和親冗美。 傳聞我的和親對象是個殘疾皇子析二,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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