Django實戰1-許可權管理功能實現-08:組織架構修改和刪除
1 組織架構的修改
實現思路:
1、請求:前台通過修改按鈕,請求修改頁面,同時傳遞修改數據的id到後台,後台通過reques.GET方法獲取id,返回數據,並將數據渲染到修改頁面2、執行:前台修改完數據後,提交保存,後台通過ID獲取數據實例,通過form.is_valid()成功驗證數據想信息後,調用form.save()方法將數據保存到資料庫。1.1 組織架構修改視圖
修改和添加操作很類似,添加是在資料庫中插入一條新的紀錄,修改是修改資料庫已有實例,因此組織架構修改視圖,可以和添加使用同一個視圖。
打開sandboxMP/apps/system/views_structure.py, 修改StructureCreateView視圖:from django.shortcuts import get_object_or_404
class StructureCreateView(LoginRequiredMixin, View):
def get(self, request):
ret = dict(structure_all=Structure.objects.all())
# 判斷如果request.GET中包含id,則返回該條數據信息
if id in request.GET and request.GET[id]:
structure = get_object_or_404(Structure, pk=request.GET[id])
ret[structure] = structure
return render(request, system/structure/structure_create.html, ret)
def post(self, request):
res = dict(result=False)
# 如果 request.POST中包含id則查找該實例,並傳遞給ModelForm關鍵字參數instance,通過調用save()方法,將修改信息保存到該實例。
if id in request.POST and request.POST[id]:
structure = get_object_or_404(Structure, pk=request.POST[id])
# 如果request.POST中ID值不存在,則使用空的模型作為instance關鍵參數,調用save()方法,保存新建的數據。
else:
structure = Structure()
structure_form = StructureForm(request.POST, instance=structure)
if structure_form.is_valid():
structure_form.save()
res[result] = True
return HttpResponse(json.dumps(res), content_type=application/json)
組織架構修改的URL不用變動,修改數據時,直接調用create的url即可。
1.2 模板的配置
打開sandboxMP/templates/system/structure.html,查看下datatables表格初始化的js內容(在{% block javascripts %}標籤內容),在表格的最後一列定義了一組按鈕,內容如下:
{% block javascripts %}
...前面內容省略...
{
data: "id",
width: "12%",
bSortable: "false",
render: function (data, type, row, meta) {
var ret = "";
var ret = "<button title=詳情-編輯 onclick=doUpdate("
+ data + ")><i class=glyphicon glyphicon-pencil></i></button>";
ret = ret + "<button title=關聯用戶 onclick=doAddUser("
+ data + ")><i class=glyphicon glyphicon-user></i></button>";
ret = ret + "<button title=刪除 onclick=doDelete("
+ data + ")><i class=glyphicon glyphicon-trash></i></button>";
return ret;
}
}
...後面內容省略...
{% endblock %}
1、在表格初始化的時候,定義了一組按鈕,其中【title=詳情-編輯】的按鈕就是我們修改數據的按鈕,在點擊時調用了doUpdate()函數,並將並通過data變數,將id傳遞給該函數。
2、在structure.html模板中{% block javascripts %} 標籤下添加doUpdate()函數:<script type="text/javascript">
$("#btnCreate").click(function () {
原有內容省略
});
// 下面是新增的 doUpdate函數,添加在$("#btnCreate")代碼段後面。
function doUpdate(id) {
layer.open({
type: 2,
title: 編輯,
shadeClose: false,
maxmin: true,
area: [800px, 400px],
content: ["{% url system:basic-structure-create %}" + ?id= + id, no],
end: function () {
oDataTable.ajax.reload();
}
});
}
// 新增內容結束
</script>
3、運行Debug模式,在下圖位置打上斷點:
TAG:Django(框架) | Python | 許可權管理 |