Day004 商品應用API開發-商品分類

目標

實現商品分類相關API開發,并通過showdoc 進行測試。

  1. api - save_goods_category 保存商品分類,在新增或者編輯商品分類時使用。
  2. api - search_goods_category 搜索商品分類。
  3. api - detail_goods_category 獲取商品分享詳情。

1. 創建 商品分類 數據模型

goods應用的 model\goods.py 中。

1.1 商品分類 - GoodsCategory

from django.db import models
from django.utils.translation import gettext_lazy


class GoodsCategory(models.Model):
    class Meta:
        verbose_name_plural = '商品分類'

    name = models.CharField(verbose_name='分類名', max_length=255)
    super_category = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, null=True, default=None,
                                       verbose_name='父類', related_name='sub_category_set')

    priority = models.IntegerField(verbose_name='排序優先級', default=0)

    def __str__(self):
        return self.name

1.2 執行 遷移腳本指令

python manage.py makemigrations goods
python manage.py migrate goods

2. 創建 商品分類 業務服務

goods應用的 service\goods.py 中。

class GoodsCategoryService(object):
    goods_category = None

    def __init__(self, goods_category):
        self.goods_category = goods_category

    def update_by_body(self, body):
        pass

    def get_json(self):
        return {
            'id': self.goods_category.id,
            'name': self.goods_category.name
        }

goods應用的 model\goods.py 中,注入服務

class GoodsCategory(models.Model):

       # 省略前面已經提及的代碼部分

      def get_service(self):
        from ..service.goods import GoodsCategoryService
        return GoodsCategoryService(self)

    def json(self):
        return self.get_service().get_json() 

3. 創建 res_map 返回字典

def get_success(data={}, msg='請求成功', events=None):
    return {
        'code': '10001',
        'data': data,
        'msg': msg,
        'events': events
    }

4. 創建 API 接口

save_goods_category 保存商品分類,在新增或者編輯商品分類時使用。

import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

from ..model import goods
from .. import res_map

# 保存 商品分類
@csrf_exempt
def save_goods_category(request):
    body = json.loads(request.body)

    if 'id' in body:
        # 帶ID就是修改
        goods_category = goods.GoodsCategory.objects.get(id=body['id'])
    else:
        # 不帶ID就是新增
        goods_category = goods.GoodsCategory()

    if 'name' in body:
        goods_category.name = body['name']

    if 'priority' in body:
        goods_category.priority = body['priority']

    if 'super_category_id' in body:
        super_category = goods.GoodsCategory.objects.get(id=body['super_category_id'])
        goods_category.super_category = super_category

    goods_category.save()

    return JsonResponse(res_map.get_success(goods_category.json()))

search_goods_category 搜索商品分類。

# 查詢 商品分類
@csrf_exempt
def search_goods_category(request):
    body = json.loads(request.body)

    goods_category_set = goods.GoodsCategory.objects.all()

    if 'super_category_id' in body:
        goods_category_set.filter(super_category__id=body['super_category_id'])

    if 'search_text' in body:
        goods_category_set.filter(name__icontains=body['search_text'])

    res_list = []
    for goods_category in goods_category_set:
        res_list.append(goods_category.json())

    return JsonResponse(res_map.get_success(res_list))

detail_goods_category 獲取商品分享詳情。

# 詳情 商品分類
@csrf_exempt
def detail_goods_category(request):
    body = json.loads(request.body)

    goods_category = goods.GoodsCategory.objects.get(id=body['id'])
    return JsonResponse(res_map.get_success(goods_category.json()))

5. 接入URL

5.1 在goods應用的urls.py

from django.urls import path

from .api import goods

urlpatterns = [
    path('save_goods_category', goods.save_goods_category, name='save_goods_category'),  # 保存 商品分類
    path('search_goods_category', goods.search_goods_category, name='search_goods_category'),  # 查詢 商品分類
    path('detail_goods_category', goods.detail_goods_category, name='detail_goods_category'),  # 詳情 商品分類
]

5.2 在項目的urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('goods/', include('goods.urls')),
]

6. 使用showdoc 測試

關于showdoc的安裝和使用教程在這里: showdoc

6.1 save_goods_category 接口測試

save_goods_category接口測試.png

6.2 search_goods_category 接口測試

圖片.png

6.3 detail_goods_category 接口測試

圖片.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容