日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

权限分配之权限的展示

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 权限分配之权限的展示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最后就是權限的展示了:
對前面的 總結:
  1. 一級菜單列表,是我對 menu表的,增刪改查。
  2. 二級菜單列表,是我對Permission表中, 可以作為二級菜單存在,如 客戶列表、賬單列表的 增刪改查
  3. 最后的權限展示,就是對Permission表中, 不能作為二級菜單, 但是他的pid字段,關聯著 二級菜單權限的,例如 添加客戶,編輯,刪除客戶這些權限的增刪改查。

查:
對于查,好說。 差的內容就是, 基于二級菜單的 id 進行查找, 并且展示:
并且 這個 id 前面已經做過解釋。 就是 get 請求 ?之后攜帶的數據。? sid=1 就是要查找的。 permission表中 pid字段與這個參數, 相等的,那些權限信息。

def menu_list(request):'''菜單和權限列表:param request::return:'''# menu_id = int(request.GET.get("mid")) # 前端判斷時,需要一個int類型,而不是str類型。menu_id = request.GET.get("mid") # 或者在前端進行轉換,將數字轉換成,字符串second_menu_id = request.GET.get("sid")menu_list = models.Menu.objects.all()try:if menu_id:second_menus = models.Permission.objects.filter(menu_id=menu_id)else:second_menus = []if second_menu_id:permissions = models.Permission.objects.filter(pid=second_menu_id)else:permissions = []return render(request, "rbac/menu_list.html", locals())except ValueError as e:return HttpResponse("查找不存在")

?permissions 就是查詢出來的結果。
為了防止,可能輸入的不是。 數字格式,我做個 異常捕捉。 可以直接返回個404 也沒問題。
然后看一下,三級菜單的。html代碼:

<div class="col-md-5"><div class="panel panel-default"><!-- Default panel contents --><div class="panel-heading"><i class="fa fa-binoculars" aria-hidden="true"></i> 權限菜單{% if permissions and second_menus %}<a href=""class="right btn btn-success btn-xs"style="padding: 2px 8px;margin: -3px;"><i class="fa fa-plus-circle" aria-hidden="true"></i>新建</a>{% endif %}</div><!-- Table --><table class="table"><thead><tr><th>名稱</th><th>URL & CODE</th><th>選項</th></tr></thead><tbody>{% for permission in permissions %}<tr class=""><th rowspan="2">{{ permission.title }}</th><td>{{ permission.name }}</td><td><a style="color: #333333;"href=""><i class="fa fa-edit" aria-hidden="true"></i></a><a style="color: #d9534f;"href=""><iclass="fa fa-trash-o"></i></a></td></tr><tr class=""><td colspan="2" style=" border-top: 0">{{ permission.url }}</td></tr>{% endfor %}</tbody></table></div></div> View Code

只是展示, 連接的url, 下面寫。

ok 再來想一想:
  是不是需要,讓權限進行添加的時候, 也可以選擇要往哪一個, 二級菜單下添加權限。 要的話就按照二級菜單新建的步驟,再來一遍就好。
  so? 這次就,讓這個權限, 默認就創建在,當前點擊的這個二級菜單之下。 就不讓用戶進行選擇了。? 畢竟一般也用不到。
所以form要渲染的時候,就只剩下 三個字段? title? name? url

class PermissionForm(BootstrapModelForm):class Meta:model = models.Permissionfields = ["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

總結

以上是生活随笔為你收集整理的权限分配之权限的展示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。