Django-ORM框架-階段練手小專案
阿新 • • 發佈:2021-01-29
技術標籤:python測試開發
Django階段練手小專案
需求
實現資料庫的增刪改查介面:
介面型別 | url | 介面詳情 |
---|---|---|
GET | /projects/ | 獲取專案列表資料(json陣列形式返回) |
POST | /projects/ | 建立一條專案資料(以json形式傳遞引數,同時需要將建立成功 |
GET | /projects/int:pk/ | 獲取一條專案詳情資料(json物件形式返回) |
PUT | /projects/int:pk/ | 更新一條專案資料(以json形式傳遞引數,同時需要將更新成功之後的資料以json形式返回) |
DELETE | /projects/int:pk/ | 刪除一條專案資料(返回刪除成功json資料) |
程式碼實現
projects/views.py
import json
from django.http import JsonResponse
from django.views import View
from projects.models import Projects
err_msg = {
"status": False,
"msg": "引數有誤",
"num": 0
}
class ProjectView(View):
def get(self, request):
"""
獲取專案列表資料
:return: 返回獲取專案列表資料
"""
# 1.獲取全部資料
qs = Projects.objects.all()
# 2.獲取到的資料轉化為json資料
projects_list = []
obj: Projects
for obj in qs:
projects_list.append({
'id': obj.id,
'name': obj.name,
'leader': obj.leader
} )
# 3.將json資料返回
return JsonResponse(projects_list, safe=False, json_dumps_params={"ensure_ascii": False})
def post(self, request):
"""
建立一條專案資料(以json形式傳遞引數)
:return: 將建立成功之後的資料以json形式返回
"""
# 1.獲取前端傳來的json資料
try:
json_dict = json.loads(request.body.decode('utf-8'))
except Exception:
return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)
# 2.對資料進行校驗
if 'name' not in json_dict or len(json_dict['name']) > 20 or len(json_dict['leader']) > 10:
return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)
# 3.儲存資料
qs = Projects.objects.create(**json_dict)
return JsonResponse(json_dict, safe=False, json_dumps_params={"ensure_ascii": False})
class ProjectParameterView(View):
def get(self, request, pk):
"""
獲取一條專案詳情資料
:param pk: 專案id
:return: 返回獲取到的專案詳情資料
"""
# 1.獲取資料
try:
data = Projects.objects.get(id=pk)
except Exception:
return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)
# 2.將資料轉為json格式
json_dict = []
json_dict.append({
'id': data.id,
'name': data.name,
'leader': data.leader
})
# 3.將資料返回前端
return JsonResponse(json_dict, safe=False, json_dumps_params={"ensure_ascii": False})
def put(self, request, pk):
"""
更新一條專案資料(以json形式傳遞引數)
:param pk: 專案id
:return: 將更新成功之後的資料以json形式返回
"""
# 1.獲取資料
data = Projects.objects.filter(id=pk)
if len(data) == 0:
return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)
# 2.讀取前端傳來的json資料
json_dict = json.loads(request.body.decode('utf-8'))
# 3.更新資料
data.update(**json_dict)
return JsonResponse(json_dict, safe=False, json_dumps_params={"ensure_ascii": False})
def delete(self, request, pk):
"""
刪除一條專案資料
:param pk: 專案id
:return: 返回刪除成功json資料
"""
# 1.獲取資料
try:
data = Projects.objects.get(id=pk)
except Exception:
return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)
# 2.將資料轉為json格式
json_dict = []
json_dict.append({
'id': data.id,
'name': data.name,
'leader': data.leader
})
# 3.刪除資料
data.delete()
return JsonResponse(json_dict, safe=False, json_dumps_params={"ensure_ascii": False})
痛點分析
-
程式碼冗餘嚴重,不夠簡潔
-
資料校驗極為麻煩(if巢狀層級非常多),且複用性比較差
-
編碼沒有統一的規範,程式碼維護性差
-
獲取列表資料時,有很多缺失的功能
a.沒有提供分頁功能
b.沒有提供過濾功能
c.沒有提供排序功能 -
整個介面,也有功能缺失
a.沒有提供認證授權功能
b.沒有提供限流功能(反爬蟲)
c.傳遞引數的形式單一,不支援表單傳參
d.5個介面處於不同的類檢視中