1. 程式人生 > >Django 接收Post請求資料,並儲存到資料庫的快速寫法

Django 接收Post請求資料,並儲存到資料庫的快速寫法

要說基本操作,大家基本都會,但是有時候,有些操作使用小技巧會節省很多時間。

本篇描述的就是使用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))