权限分配之权限的展示
最后就是權限的展示了:
對前面的 總結:
1. 一級菜單列表,是我對 menu表的,增刪改查。
2. 二級菜單列表,是我對Permission表中, 可以作為二級菜單存在,如 客戶列表、賬單列表的 增刪改查
3. 最后的權限展示,就是對Permission表中, 不能作為二級菜單, 但是他的pid字段,關聯著 二級菜單權限的,例如 添加客戶,編輯,刪除客戶這些權限的增刪改查。
查:
對于查,好說。 差的內容就是, 基于二級菜單的 id 進行查找, 并且展示:
并且 這個 id 前面已經做過解釋。 就是 get 請求 ?之后攜帶的數據。? sid=1 就是要查找的。 permission表中 pid字段與這個參數, 相等的,那些權限信息。
?permissions 就是查詢出來的結果。
為了防止,可能輸入的不是。 數字格式,我做個 異常捕捉。 可以直接返回個404 也沒問題。
然后看一下,三級菜單的。html代碼:
只是展示, 連接的url, 下面寫。
ok 再來想一想:
是不是需要,讓權限進行添加的時候, 也可以選擇要往哪一個, 二級菜單下添加權限。 要的話就按照二級菜單新建的步驟,再來一遍就好。
so? 這次就,讓這個權限, 默認就創建在,當前點擊的這個二級菜單之下。 就不讓用戶進行選擇了。? 畢竟一般也用不到。
所以form要渲染的時候,就只剩下 三個字段? title? name? url
?BootstrapModelForm 是一個基類, 用以初始化 標簽的樣式:
class BootstrapModelForm(forms.ModelForm):'''因為,太多的地方需要使用, __init__ 初始化方式。來對每個標簽添加 class="form-control" 所以搞個基類讓要進行, 這部操作的 類去繼承,'''def __init__(self, *args, **kwargs):super(BootstrapModelForm, self).__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs["class"] = "form-control"?然后在 添加的視圖中, 對于form.save() 之前, 需要將 pid 字段添加到 form中。然后才進行保存。 畢竟用戶是沒有輸入這個字段的。
def permission_add(request, second_menu_id):'''添加權限:param request::param menu_id: 已經選中的二級菜單的id(用于設置默認值):return:'''if request.method == "POST":forms = PermissionForm(request.POST)if forms.is_valid():# 在添加頁面,用戶只輸入了三個值 title url name 還需要一個 pid的值。 就是傳遞過來的second_menu_id# 并且傳遞過來的值,可以在數據庫中找到對應的 記錄,才行。 而且要在forms.save() 保存之前,加入到form中second_menu_obj = models.Permission.objects.filter(pk=second_menu_id).first()if not second_menu_obj:return HttpResponse("二級菜單存在,請重新選擇")# forms.instance 中包含了用戶提交的所有值。 他就是一個Permission對象:# instance = models.Permission(title="", name="", url="") # 接收用戶發來的數據# instance.pid = second_menu_obj 然后賦值時,就相當于pid = second_menu_obj。 orm操作,外鍵可以直接指定一個model對象# instance.save 然后保存整個內容。 這也是 forms.save 內部做的事情forms.instance.pid = second_menu_objforms.save()return redirect(memory_reverse(request, "rbac:menu_list"))else:return render(request, "rbac/change.html", {"forms": forms})forms = PermissionForm()# 為一級菜單menu字段, 添加默認值。return render(request, "rbac/change.html", {"forms": forms}) 添加權限的 視圖函數:已經有了, 是點擊哪一個 二級菜單過來的記錄?? second_menu_id
所以先進行,驗證一下。? 看一下在數據庫中是否有這個 主鍵 id=second_menu_id? 的記錄存在。
然后將這條記錄, 交給 pid 。 做一個關聯。?? orm 是支持在關聯時,直接使用一個model對象對字段進行賦值的。
forms.instance 中包含了用戶提交的所有值。 他就是一個Permission對象:
instance = models.Permission(title="", name="", url="")? # 接收用戶發來的數據
instance.pid = second_menu_obj 然后賦值時,就相當于pid = second_menu_obj。 orm操作,外鍵可以直接指定一個model對象
instance.save 然后保存整個內容。 這也是 forms.save 內部做的事情
forms.instance.pid = second_menu_obj? 直接為pid 進行賦值。 然后form.save? 保存到數據庫
?
轉載于:https://www.cnblogs.com/chengege/p/10712825.html
總結
以上是生活随笔為你收集整理的权限分配之权限的展示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用来这么久的计算机,你是否对计算机中有关
- 下一篇: [教程]博客园插入视频教程