Django 接收Post請求資料,並儲存到資料庫的快速寫法
阿新 • • 發佈:2019-01-28
要說基本操作,大家基本都會,但是有時候,有些操作使用小技巧會節省很多時間。
本篇描述的就是使用dict小技巧,儲存到資料庫,用來節省大家編碼的工作量。
主要內容:通過for迴圈拿到post表單中的值並儲存到一個dict中,然後通過**dict儲存到資料庫中。
1.使用者提交了一個表單,表單內容包含csrf。
2.服務端除了表單中的csrf要過濾掉,其它的都要儲存到資料庫中。
3.具體看下方程式碼:
下面的程式碼分別為修改和儲存,其中修改是根據ID修改的。
要注意,
1.儲存前的resourcesOld和儲存後再獲取的resourcesNew是不一樣的。
尤其是type【get_type_display()】這個方法,因為要對其進行轉義顯示,必須獲取resourcesNew物件,不然是獲取不到轉義後的,值只能獲取其原值。
2.其次是儲存的寫法,有的人喜歡用T_Resources.objects.create(id=id,name=name,age=age......),這樣每次,
但是都這樣寫比較繁瑣,所以用了下面的寫法,兩者結果相同,當然還有一種save的寫法,這裡就不再闡述了!
def resources(request): if request.method == 'GET': return render(request, 'docker/Resources.html', ) else: systemDict = {} for key in request.POST: if key != 'csrfmiddlewaretoken': systemDict[key] = request_postData.get(key) if 'id' in request_postData: result = {'code': 401, 'message': '修改失敗!', 'data': None} try: resourcesOld=T_Resources.objects.get(id=systemDict['id']) T_Resources.objects.filter(id=systemDict['id']).update(**systemDict) resourcesNew=T_Resources.objects.get(id=systemDict['id']) result['code'] = 201 result['message'] = '修改成功' logInfo = "伺服器IP:" + resourcesOld.ip + "," if resourcesOld.name != resourcesNew.name: logInfo += "名稱:" + resourcesOld.name + "->" + resourcesNew.name + ',' if resourcesOld.type != resourcesNew.type: logInfo += "型別:" + resourcesOld.get_type_display() + "->" + resourcesNew.get_type_display() + ',' if resourcesOld.label != resourcesNew.label: oldLabel = list(T_Label.objects.filter(type='T_Resources', value__in=resourcesOld.label).values_list('name', flat=True))[0] newLabel = list(T_Label.objects.filter(type='T_Resources', value__in=resourcesNew.label).values_list('name', flat=True))[0] logInfo += "標籤:" + oldLabel + "->" + newLabel + ',' writeOperationLog(request, 1, '修改伺服器成功,' + logInfo) except: pass return HttpResponse(json.dumps(result, ensure_ascii=False)) else: result = {'code': 401, 'message': '新增失敗!', 'data': None} try: id=T_Resources.objects.create(**systemDict).id resources=T_Resources.objects.get(id=id) result['code'] = 201 result['message'] = '新增成功' except: pass return HttpResponse(json.dumps(result, ensure_ascii=False))