Django 1.11 json介面編寫以及測試
阿新 • • 發佈:2019-02-15
編寫介面
介面介紹
請求的是購物網站的分類後產品資料。
說明 | 詳情 |
---|---|
介面名 | classify |
作用 | 返回請求的分類後的產品的Json格式資料 |
呼叫url | api/ |
請求方法 | Post |
請求引數 | “type” :整數 0 為 熱門,1為家居 ”page”:整數頁碼 |
返回引數 | “status” = 200 : 成功 10021 : 查詢列表為空 10022:分頁後產品為空 |
urls
因為嘗試些API介面,所以在目錄下新建了一個views檔案;
from django.conf.urls import url
from taobao import views, views_api
urlpatterns = [
url(r'^$', views.index),
url(r'^api/',views_api.classify)
]
modles
from django.db import models
class goods(models.Model):
category = models.IntegerField('分類',default=0)
goods_id = models.CharField('商品ID',max_length=10)
goods_name = models.CharField('商品名' ,max_length=100,default='')
goods_price = models.DecimalField('商品價格',max_digits=10,decimal_places=2)
goods_Stock = models.IntegerField('商品庫存',default=100)
sales_Volume = models.IntegerField('銷量',default=0)
goods_introduce = models.CharField('商品簡介',max_length=250,default='')
def __str__(self) :
return self.goods_name
views_api
from taobao.models import goods
from django.http import JsonResponse
from django.core.paginator import Paginator ,PageNotAnInteger ,EmptyPage
from django.views.decorators.csrf import csrf_exempt
#分類展示
#測試的時候我先把csrf關了
@csrf_exempt
def classify(req):
context ={'status':200}
#獲取 post 資料
type = req.POST.get('type','')
page = req.POST.get('page','')
context['type'] , context['page'] = type ,page
#根據類別在資料庫找到相應資料
if type == '0':
goods_list = goods.objects.order_by('sales_Volume').all()
else:
goods_list = goods.objects.all().filter(category = int(type)).order_by('sales_Volume').all()
#資料為空直接返回json
if goods_list == None:
return JsonResponse({'status':10021,'message':'parameter error'})
#分頁
paginator = Paginator(goods_list,8)
try:
goodss = paginator.page(int(page))
except PageNotAnInteger:
goodss = paginator.page(1)
except EmptyPage:
goodss = paginator.page(paginator.num_pages)
#一頁商品的個數,是否有前一頁,是否有後一頁
context['queryNum'],context['hasPrevios'],context['hasNext'] = len(goodss),goodss.has_previous(),goodss.has_next()
#將資料存入data[]
data = []
if goodss:
for i in goodss:
good = {}
good['goods_id'] = i.goods_id
good['goods_name'] = i.goods_name
good['goods_price'] = i.goods_price
good['goods_stock'] = i.goods_Stock
good['sales_volume'] = i.sales_Volume
good['goods_introduce'] = i.goods_introduce
data.append(good)
# 將data存進context
context.update({'data':data})
# 返回json
return JsonResponse(context)
else:
return JsonResponse({'status':10022,'message':'query goods isempty'})
介面測試
這裡使用到postman;
用chrome瀏覽器新增擴充套件程式Postman,並安裝桌面應用。
應用頁面如下:
- 填上url。
- 選擇傳輸資料方式。
- 點選下方body,選擇form-data
- 輸入引數 “type” = 1,”page” = 1,點選send。
下方返回json資料
{
"status": 200,
"type": "1",
"page": "1",
"queryNum": 8,
"hasPrevios": false,
"hasNext": true,
"data": [
{
"goods_id": "33428",
"goods_name": " 岷江音樂 三角調配茶包 8枚",
"goods_price": "45.00",
"goods_stock": 100,
"sales_volume": 0,
"goods_introduce": " 音樂和茶 伴你左右 "
},
{
"goods_id": "33431",
"goods_name": " 【預售】榨冰+沙拉一體機",
"goods_price": "249.00",
"goods_stock": 100,
"sales_volume": 0,
"goods_introduce": " 沙冰或沙拉 它都能搞定 "
},
{
"goods_id": "32755",
"goods_name": " 特級初榨橄欖油 500ml 8色可選,2種口味,義大利純手工制罐,古法壓榨油",
"goods_price": "299.00",
"goods_stock": 100,
"sales_volume": 0,
"goods_introduce": " 橄欖油奧斯卡得主 "
},
{
"goods_id": "31226",
"goods_name": " Ball Mason Jar 梅森罐 玻璃密封罐 蔬菜沙拉罐 12oz水晶杯 360ml",
"goods_price": "39.00",
"goods_stock": 100,
"sales_volume": 0,
"goods_introduce": " 美觀實用合二為一 "
},
{
"goods_id": "33411",
"goods_name": " 土耳其手工玻璃貝殼盤 2件套",
"goods_price": "138.00",
"goods_stock": 100,
"sales_volume": 0,
"goods_introduce": " 手工上色 匠心之作 "
},
{
"goods_id": "32998",
"goods_name": " 梅森瓶蔬果榨汁機 含兩個梅森瓶",
"goods_price": "498.00",
"goods_stock": 100,
"sales_volume": 0,
"goods_introduce": " 營養果汁 隨時打包 "
},
{
"goods_id": "33409",
"goods_name": " 土耳其手工璃魚盤 3件套",
"goods_price": "169.00",
"goods_stock": 100,
"sales_volume": 0,
"goods_introduce": " 把海洋搬到餐桌上 "
},
{
"goods_id": "33416",
"goods_name": " 小確幸調味花果茶 泡袋茶 9枚裝",
"goods_price": "58.00",
"goods_stock": 100,
"sales_volume": 0,
"goods_introduce": " 每天都多一份小確幸 "
}
]
}