django介面開發-程式碼優化views_post/put/delete
阿新 • • 發佈:2020-09-11
#優化cbc就程式碼其它post put delete方法,同理
class BaseView(View): from_class = None @property def form(self): #issubclass:引數1是不是引數2的子類,校驗model_class if self.from_class and issubclass(self.from_class,BaseForm): return self.from_class raise Exception("未定義from_class") class PostView(BaseView): def post(self, requests): # 通過form進行資料驗證 form_obj = self.form(requests.POST) # 資料驗證是否通過 if form_obj.is_valid(): self.model.objects.create(**form_obj.cleaned_data) return JsonResponse({"code": 200, "msg": "成功"})else: return JsonResponse({"code": 500, "msg": form_obj.errors.get_json_data()}) # form_obj.cleaned_data是所有驗證通過的資料
class PutView(BaseView):
def put(self, requests):
# django並沒有處理PUT的資料,實際上put傳過來的資料在request.body
# 需要匯入 from django.http import QueryDict 來處理資料
put_data = QueryDict(requests.body)# 獲取需要更新哪天資料的主鍵
p_id = put_data.get('id')
# 通過id 從資料庫中取這條資料
data_obj = self.model.objects.get(id=p_id)
# 引數1是前端傳過來的資料,引數2是資料庫中獲取的資料
form_obj = self.form(put_data, instance=data_obj)
if form_obj.is_valid():
# 通過form的save方法進行資料更新
form_obj.save()
return JsonResponse({"code": 200, "msg": "成功"})
else:
return JsonResponse({"code": "500", "msg": form_obj.errors.get_json_data()})
class DeleteView(BaseView):
def delete(self, requests):
p_id = requests.GET.get('id')
# 刪除時,要知道刪除的是哪條資料,獲取主鍵id
# 1-邏輯刪除,改變欄位狀態
self.model.objects.filter(id=p_id).update(is_delete=1) # 這種方式不會觸發updatetime
# 可以觸發updatetime方式
obj = self.model.objects.filter(id=p_id).first()
obj.is_delete = 1
obj.save()
# 2-物理刪除,直接將資料delete掉
self.model.objects.filter(id=p_id).delete()
return JsonResponse({"msg": "delete"})
class NbView(PostView,PutView,DeleteView):
pass
#views中程式碼:
class SParameter(NbView):
from_class = ParameterForm
#參考forms
from django import forms
from django.forms import ModelForm
from example import models
class ParameterForm(forms,ModelForm):
class Meta:
model = models.Parameter
exclude = ['id','is_delete','update_time','create_time']