<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      4 權限分配

      給用戶進行權限的分配。

      1 角色管理

      image

      項目目錄下urls新增一條url

      from django.conf.urls import url, include
      from django.contrib import admin
      
      urlpatterns = [
          url(r'^admin/', admin.site.urls),
          url(r'^rbac/', include('rbac.urls', namespace="rbac")),
          url(r'^', include('web.urls')),
      ]
      

      rbac的app中新建urls.py文件

      from django.conf.urls import url
      from rbac.views import role
      
      urlpatterns = [
          url(r"^role/list/$", role.role_list, name="role_list"),
          url(r"^role/add/$", role.role_add, name="role_add"),
          url(r"^role/edit/(?P<pk>\d+)/$", role.role_edit, name="role_edit"),
          url(r"^role/del/(?P<pk>\d+)/$", role.role_del, name="role_del"),
      ]
      
      app_name = "rbac"
      

      rbac的app中views/role.py文件

      role.py
      from django.shortcuts import render, redirect, HttpResponse
      from django.urls import reverse
      from django import forms
      from rbac import models
      
      
      class RoleModelForm(forms.ModelForm):
          class Meta:
              model = models.Role
              fields = ["title"]
              widgets = {
                  "title": forms.TextInput(attrs={"class": "form-control"})
              }
      
      
      def role_list(request):
          """角色列表"""
          role_queryset = models.Role.objects.all()
          return render(request, "rbac/role_list.html", {"roles": role_queryset})
      
      
      def role_add(request):
          """添加角色"""
          if request.method == "GET":
              form = RoleModelForm()
              return render(request, "rbac/change.html", {"form": form})
      
          form = RoleModelForm(data=request.POST)
          if form.is_valid():
              form.save()
              return redirect(reverse("rbac:role_list"))
      
          return render(request, "rbac/change.html", {"form": form})
      
      
      def role_edit(request, pk):
          """編輯角色"""
          obj = models.Role.objects.filter(id=pk).first()
          if not obj:
              return HttpResponse("角色不存在")
          if request.method == "GET":
              form = RoleModelForm(instance=obj)
              return render(request, "rbac/change.html", {"form": form})
      
          form = RoleModelForm(instance=obj, data=request.POST)
          if form.is_valid():
              form.save()
              return redirect(reverse("rbac:role_list"))
      
          return render(request, "rbac/change.html", {"form": form})
      
      
      def role_del(request, pk):
          """刪除角色"""
          origin_url = reverse("rbac:role_list")
          if request.method == "GET":
              return render(request, "rbac/delete.html", {"cancel_url": origin_url})
      
          models.Role.objects.filter(id=pk).delete()
          return redirect(origin_url)
      

      rbac的app中templates/rbac/xxx.html文件

      role_list.html
      {% extends "layout.html" %}
      
      {% block content %}
          <div class="luffy-container">
              <div class="btn-group" style="margin: 5px 0">
      
                  <a class="btn btn-default" href="{% url "rbac:role_add" %}">
                      <i class="fa fa-plus-square" aria-hidden="true"></i> 添加角色
                  </a>
      
              </div>
              <table class="table table-bordered table-hover">
                  <thead>
                  <tr>
                      <th>ID</th>
                      <th>名稱</th>
                      <th>選項</th>
                  </tr>
                  </thead>
                  <tbody>
                  {% for row in roles %}
                      <tr>
                          <td>{{ row.id }}</td>
                          <td>{{ row.title }}</td>
                          <td>
                              <a style="color: #333333;" href="{% url "rbac:role_edit" pk=row.id %}">
                                  <i class="fa fa-edit" aria-hidden="true"></i></a>
                              <a style="color: #d9534f;" href="{% url "rbac:role_del" pk=row.id %}"><i
                                      class="fa fa-trash-o"></i></a>
                          </td>
                      </tr>
                  {% endfor %}
                  </tbody>
              </table>
          </div>
      {% endblock %}
      
      
      change.html
      {% extends "layout.html" %}
      
      {% block content %}
          <div class="luffy-container">
      
              <form class="form-horizontal" action="" method="post" novalidate>
                  {% csrf_token %}
                  {% for field in form %}
                      <div class="form-group">
                          <label for="" class="col-sm-2 control-label">{{ field.label }}</label>
                          <div class="col-sm-8">
                              {{ field }}
                              <span style="color: red">{{ field.errors.0 }}</span>
                          </div>
                      </div>
                  {% endfor %}
      
                  <div class="form-group">
                      <div class="col-sm-offset-2 col-sm-8">
                          <input type="submit" value="保存" class="btn btn-primary">
                      </div>
                  </div>
              </form>
      
          </div>
      {% endblock %}
      
      
      delete.html
      {% extends "layout.html" %}
      
      {% block content %}
          <div class="luffy-container">
              <div class="alert alert-danger" role="alert">
                  <form method="post">
                      {% csrf_token %}
                      <p style="font-size: 13px"><i class="fa fa-warning" aria-hidden="true"></i> 刪除后不可恢復,是否確認刪除!</p>
                      <div style="margin-top: 20px">
                          <a href="{{ cancel_url }}" class="btn btn-default btn-sm">取消</a>
                          <button type="submit" class="btn btn-danger btn-sm">確認</button>
                      </div>
                  </form>
              </div>
          </div>
      {% endblock %}
      

      點擊下載代碼


      2 用戶管理

      image

      rbac的app中新建urls.py文件

      from django.conf.urls import url
      from rbac.views import role, user
      
      urlpatterns = [
          ...
          url(r"^user/list/$", user.user_list, name="user_list"),
          url(r"^user/add/$", user.user_add, name="user_add"),
          url(r"^user/edit/(?P<pk>\d+)/$", user.user_edit, name="user_edit"),
          url(r"^user/del/(?P<pk>\d+)/$", user.user_del, name="user_del"),
      ]
      
      app_name = "rbac"
      
      

      rbac的app中myforms/user.py文件

      user.py
      from django import forms
      from django.core.exceptions import ValidationError
      from rbac import models
      
      
      class UserModelForm(forms.ModelForm):
          re_password = forms.CharField(label="確認密碼")
      
          class Meta:
              model = models.UserInfo
              fields = ["name", "email", "password", "re_password"]
      
          def __init__(self, *args, **kwargs):
              # 統一給form字段添加bootstrap樣式
              super(UserModelForm, self).__init__(*args, **kwargs)
              for name, field in self.fields.items():
                  field.widget.attrs["class"] = "form-control"
      
          def clean_re_password(self):
              password = self.cleaned_data["password"]
              re_password = self.cleaned_data["re_password"]
      
              if password != re_password:
                  raise ValidationError("兩次密碼不一致")
      
              return re_password
      
      
      class UpdateUserModelForm(forms.ModelForm):
      
          class Meta:
              model = models.UserInfo
              fields = ["name", "email"]
      
          def __init__(self, *args, **kwargs):
              super(UpdateUserModelForm, self).__init__(*args, **kwargs)
              for name, field in self.fields.items():
                  field.widget.attrs["class"] = "form-control"
      
      
      class ResetPasswordModelForm(forms.ModelForm):
          re_password = forms.CharField(label="確認密碼")
      
          class Meta:
              model = models.UserInfo
              fields = ["password", "re_password"]
      
          def __init__(self, *args, **kwargs):
              super(ResetPasswordModelForm, self).__init__(*args, **kwargs)
              for name, field in self.fields.items():
                  field.widget.attrs["class"] = "form-control"
      
          def clean_re_password(self):
              password = self.cleaned_data["password"]
              re_password = self.cleaned_data["re_password"]
      
              if password != re_password:
                  raise ValidationError("兩次密碼不一致")
      
              return self.re_password
      

      rbac的app中views/user.py文件

      user.py
      from django.shortcuts import render, redirect, HttpResponse
      from django.urls import reverse
      
      from rbac import models
      from rbac.my_forms.user import UserModelForm, UpdateUserModelForm, ResetPasswordModelForm
      
      
      def user_list(request):
          """用戶列表"""
          user_queryset = models.UserInfo.objects.all()
          return render(request, "rbac/user_list.html", {"users": user_queryset})
      
      
      def user_add(request):
          """添加用戶"""
          if request.method == "GET":
              form = UserModelForm()
              return render(request, "rbac/change.html", {"form": form})
      
          form = UserModelForm(data=request.POST)
          if form.is_valid():
              form.save()
              return redirect(reverse("rbac:user_list"))
      
          return render(request, "rbac/change.html", {"form": form})
      
      
      def user_edit(request, pk):
          """編輯用戶"""
          obj = models.UserInfo.objects.filter(id=pk).first()
          if not obj:
              return HttpResponse("用戶不存在")
          if request.method == "GET":
              form = UpdateUserModelForm(instance=obj)
              return render(request, "rbac/change.html", {"form": form})
      
          form = UpdateUserModelForm(instance=obj, data=request.POST)
          if form.is_valid():
              form.save()
              return redirect(reverse("rbac:user_list"))
      
          return render(request, "rbac/change.html", {"form": form})
      
      
      def reset_pwd(request, pk):
          """重置密碼"""
          obj = models.UserInfo.objects.filter(id=pk).first()
          if not obj:
              return HttpResponse("用戶不存在")
          if request.method == "GET":
              form = ResetPasswordModelForm()
              return render(request, "rbac/change.html", {"form": form})
      
          form = ResetPasswordModelForm(instance=obj, data=request.POST)
          if form.is_valid():
              form.save()
              return redirect(reverse("rbac:user_list"))
      
          return render(request, "rbac/change.html", {"form": form})
      
      
      def user_del(request, pk):
          """刪除用戶"""
          origin_url = reverse("rbac:user_list")
          if request.method == "GET":
              return render(request, "rbac/delete.html", {"cancel_url": origin_url})
      
          models.UserInfo.objects.filter(id=pk).delete()
          return redirect(origin_url)
      

      rbac的app中templates/rbac/xxx.html文件

      user_list.html
      {% extends "layout.html" %}
      
      {% block content %}
          <div class="luffy-container">
              <div class="btn-group" style="margin: 5px 0">
      
                  <a class="btn btn-default" href="{% url "rbac:user_add" %}">
                      <i class="fa fa-plus-square" aria-hidden="true"></i> 添加用戶
                  </a>
      
              </div>
              <table class="table table-bordered table-hover">
                  <thead>
                  <tr>
                      <th>序號</th>
                      <th>用戶名</th>
                      <th>郵箱</th>
                      <th>重置密碼</th>
                      <th>操作</th>
                  </tr>
                  </thead>
                  <tbody>
                  {% for row in users %}
                      <tr>
                          <td>{{ forloop.counter }}</td>
                          <td>{{ row.name }}</td>
                          <td>{{ row.email }}</td>
                          <td>
                              <a href="{% url "rbac:user_reset_pwd" pk=row.id %}">重置密碼</a>
                          </td>
                          <td>
                              <a style="color: #333333;" href="{% url "rbac:user_edit" pk=row.id %}">
                                  <i class="fa fa-edit" aria-hidden="true"></i></a>
                              <a style="color: #d9534f;" href="{% url "rbac:user_del" pk=row.id %}"><i
                                      class="fa fa-trash-o"></i></a>
                          </td>
                      </tr>
                  {% endfor %}
                  </tbody>
              </table>
          </div>
      {% endblock %}
      
      
      change.html
      {% extends "layout.html" %}
      
      {% block content %}
          <div class="luffy-container">
      
              <form class="form-horizontal" action="" method="post" novalidate>
                  {% csrf_token %}
                  {% for field in form %}
                      <div class="form-group">
                          <label for="" class="col-sm-2 control-label">{{ field.label }}</label>
                          <div class="col-sm-8">
                              {{ field }}
                              <span style="color: red">{{ field.errors.0 }}</span>
                          </div>
                      </div>
                  {% endfor %}
      
                  <div class="form-group">
                      <div class="col-sm-offset-2 col-sm-8">
                          <input type="submit" value="保存" class="btn btn-primary">
                      </div>
                  </div>
              </form>
      
          </div>
      {% endblock %}
      
      
      delete.html
      {% extends "layout.html" %}
      
      {% block content %}
          <div class="luffy-container">
              <div class="alert alert-danger" role="alert">
                  <form method="post">
                      {% csrf_token %}
                      <p style="font-size: 13px"><i class="fa fa-warning" aria-hidden="true"></i> 刪除后不可恢復,是否確認刪除!</p>
                      <div style="margin-top: 20px">
                          <a href="{{ cancel_url }}" class="btn btn-default btn-sm">取消</a>
                          <button type="submit" class="btn btn-danger btn-sm">確認</button>
                      </div>
                  </form>
              </div>
          </div>
      {% endblock %}
      

      點擊下載代碼


      3 菜單和權限的管理

      image

      3-1 一級菜單

      urls.py

      from django.conf.urls import url
      from rbac.views import menu
      
      urlpatterns = [
          ...
          url(r'^menu/list/$', menu.menu_list, name='menu_list'),
          url(r'^menu/add/$', menu.menu_add, name='menu_add'),
          url(r'^menu/edit/(?P<pk>\d+)/$', menu.menu_edit, name='menu_edit'),
          url(r'^menu/del/(?P<pk>\d+)/$', menu.menu_del, name='menu_del'),
      ]
      
      app_name = "rbac"
      
      menu.py視圖
      from django.shortcuts import render, redirect, HttpResponse
      from django.urls import reverse
      
      from rbac import models
      from rbac.forms.menu import MenuModelForm
      from rbac.service.urls import memory_reverse
      
      
      def menu_list(request):
          """菜單和權限列表"""
          menus = models.Menu.objects.all()
          menu_id = request.GET.get("mid")
      
          menu_dict = {
              "menus": menus,
              "menu_id": menu_id,
          }
          return render(request, "rbac/menu_list.html", menu_dict)
      
      
      def menu_add(request):
          if request.method == 'GET':
              form = MenuModelForm()
              return render(request, 'rbac/change.html', {'form': form})
      
          form = MenuModelForm(data=request.POST)
          if form.is_valid():
              form.save()
              return redirect(memory_reverse(request, "rbac:menu_list"))
      
          return render(request, 'rbac/change.html', {'form': form})
      
      
      def menu_edit(request, pk):
          obj = models.Menu.objects.filter(id=pk).first()
          if not obj:
              return HttpResponse('菜單不存在')
          if request.method == 'GET':
              form = MenuModelForm(instance=obj)
              return render(request, 'rbac/change.html', {'form': form})
      
          form = MenuModelForm(instance=obj, data=request.POST)
          if form.is_valid():
              form.save()
              return redirect(memory_reverse(request, "rbac:menu_list"))
      
          return render(request, 'rbac/change.html', {'form': form})
      
      
      def menu_del(request, pk):
          url = memory_reverse(request, "rbac:menu_list")
          if request.method == 'GET':
              return render(request, 'rbac/delete.html', {'cancel': url})
      
          models.Menu.objects.filter(id=pk).delete()
          return redirect(url)
      
      menu.py-fomrs
      from django import forms
      from django.utils.safestring import mark_safe
      
      from rbac import models
      
      
      class MenuModelForm(forms.ModelForm):
          class Meta:
              model = models.Menu
              fields = ["title", "icon"]
              widgets = {
                  "title": forms.TextInput(attrs={"class": "form-control"}),
                  "icon": forms.RadioSelect(choices=[
                      ["fa-area-chart", mark_safe('<i class="fa fa-area-chart" aria-hidden="true"></i>')],
                      ["fa-bicycle", mark_safe('<i class="fa fa-bicycle" aria-hidden="true"></i>')],
                      ["fa-bolt", mark_safe('<i class="fa fa-bolt" aria-hidden="true"></i>')],
                      ["fa-battery-3", mark_safe('<i class="fa fa-battery-3" aria-hidden="true"></i>')]
                  ], attrs={"class": "clearfix"})
              }
      

      image

      rbac.py
      @register.simple_tag()
      def memory_url(request, name, *args, **kwargs):
          return urls.memory_url(request, name, *args, **kwargs)
      
      
      service/urls.py
      from django.urls import reverse
      from django.http import QueryDict
      
      
      def memory_url(request, name, *args, **kwargs):
          """生成帶有原搜索條件的url,替代了模板中的url"""
          basic_url = reverse(name, args=args, kwargs=kwargs)
          if not request.GET:
              return basic_url
      
          query_dict = QueryDict(mutable=True)  # 可修改
          query_dict["_filter"] = request.GET.urlencode()  # mid=1&age=2
      
          return "{}?{}".format(basic_url, query_dict.urlencode())  # /menu/list/?_filter=mid%3D1
      
      
      def memory_reverse(request, name, *args, **kwargs):
          """反向生成url"""
          url = reverse(name, args=args, kwargs=kwargs)
          origin_params = request.GET.get("_filter")
          if origin_params:
              url = "{}?{}".format(url, origin_params)
          return url
      
      
      模板
      {% extends 'layout.html' %}
      {% block css %}
          <style>
              ul{
                  list-style-type: none;
                  padding: 0;
              }
              ul li{
                  float: left;
                  padding: 10px;
                  padding-left: 0;
                  width: 80px;
              }
              ul li i{
                  font-size: 18px;
                  margin-left: 5px;
                  color: #6d6565;
              }
          </style>
      {% endblock %}
      
      
      {% block content %}
          <div class="luffy-container">
      
              <form class="form-horizontal" method="post" novalidate>
                  {% csrf_token %}
      
                  {% for field in form %}
                      <div class="form-group">
                          <label class="col-sm-2 control-label">{{ field.label }}</label>
                          <div class="col-sm-8">
                              {{ field }}
                              <span style="color: red;">{{ field.errors.0 }}</span>
                          </div>
                      </div>
                  {% endfor %}
                  <div class="form-group">
                      <div class="col-sm-offset-2 col-sm-8">
                          <input type="submit" value="保 存" class="btn btn-primary">
                      </div>
                  </div>
      
      
              </form>
      
      
          </div>
      
      {% endblock %}
      

      一級菜單代碼下載


      3-2 二級菜單

      urls.py

      from django.conf.urls import url
      from rbac.views import menu
      
      urlpatterns = [
          ...
          url(r'^second/menu/add/(?P<menu_id>\d+)/$', menu.second_menu_add, name='second_menu_add'),
          url(r'^second/menu/edit/(?P<pk>\d+)/$', menu.second_menu_edit, name='second_menu_edit'),
          url(r'^second/menu/del/(?P<pk>\d+)/$', menu.second_menu_del, name='second_menu_del'),
      ]
      
      app_name = "rbac"
      
      menu.py視圖
      from django.shortcuts import render, redirect, HttpResponse
      
      from rbac import models
      from rbac.forms.menu import MenuModelForm, SecondModelForm
      from rbac.service.urls import memory_reverse
      
      
      def second_menu_add(request, menu_id):
          """新增二級菜單"""
          menu_obj = models.Menu.objects.filter(id=menu_id).first()
      
          if request.method == 'GET':
              form = SecondModelForm(initial={"menu": menu_obj})
              return render(request, 'rbac/change.html', {'form': form})
      
          form = SecondModelForm(data=request.POST)
          if form.is_valid():
              form.save()
              return redirect(memory_reverse(request, "rbac:menu_list"))
      
          return render(request, 'rbac/change.html', {'form': form})
      
      
      def second_menu_edit(request, pk):
          """編輯二級菜單"""
          permission_obj = models.Permission.objects.filter(id=pk).first()
      
          if request.method == 'GET':
              form = SecondModelForm(instance=permission_obj)
              return render(request, 'rbac/change.html', {'form': form})
      
          form = SecondModelForm(data=request.POST, instance=permission_obj)
          if form.is_valid():
              form.save()
              return redirect(memory_reverse(request, "rbac:menu_list"))
      
          return render(request, 'rbac/change.html', {'form': form})
      
      
      def second_menu_del(request, pk):
          url = memory_reverse(request, "rbac:menu_list")
          if request.method == 'GET':
              return render(request, 'rbac/delete.html', {'cancel': url})
      
          models.Permission.objects.filter(id=pk).delete()
          return redirect(url)
      

      image

      menu.py-forms

      class BootStrapModelForm(forms.ModelForm):
          def __init__(self, *args, **kwargs):
              super(BootStrapModelForm, self).__init__(*args, **kwargs)
              # 統一給ModelForm生成字段添加樣式
              for name, field in self.fields.items():
                  field.widget.attrs['class'] = 'form-control'
      
      class SecondModelForm(BootStrapModelForm):
          class Meta:
              model = models.Permission
              exclude = ["pid"]
      

      rbac.py 參考一級菜單
      service/urls.py 參考一級菜單

      模板
      {% extends 'layout.html' %}
      {% load rbac %}
      
      {% block css %}
          <style>
              tr.active {
                  border-left: 3px solid #fdc00f;
              }
          </style>
      {% endblock %}
      
      {% block content %}
          <div class="luffy-container">
              <div class="col-md-3">
                  <div class="panel panel-default">
                      <!-- Default panel contents -->
                      <div class="panel-heading">
                          <i class="fa fa-book" aria-hidden="true"></i> 一級菜單
      
                          <a href="{% memory_url request "rbac:menu_add" %}" class="right btn btn-success btn-xs"
                             style="padding: 2px 8px;margin: -3px">
                              <i class="fa fa-pause-circle" aria-hidden="true"></i> 新建
                          </a>
      
                      </div>
                      <!-- Table -->
                      <table class="table">
                          <thead>
                          <tr>
                              <th>名稱</th>
                              <th>圖標</th>
                              <th>選項</th>
                          </tr>
                          </thead>
                          <tbody>
                          {% for row in menus %}
                              <tr class="{% if row.id|safe == menu_id %}active{% endif %}">
                                  <td><a href="?mid={{ row.id }}">{{ row.title }}</a></td>
                                  <td><i class="fa {{ row.icon }}" aria-hidden="true"></i></td>
                                  <td>
                                      <a style="color: #333333;" href="{% memory_url request "rbac:menu_edit" pk=row.id %}">
                                          <i class="fa fa-edit" aria-hidden="true"></i></a>
      
                                      <a style="color: #d9534f;" href="{% memory_url request "rbac:menu_del" pk=row.id %}"><i
                                              class="fa fa-trash-o"></i></a>
                                  </td>
                              </tr>
                          {% endfor %}
                          </tbody>
                      </table>
                  </div>
              </div>
              <div class="col-md-4">
                  <div class="panel panel-default">
                      <!-- Default panel contents -->
                      <div class="panel-heading">
                          <i class="fa fa-bars" aria-hidden="true"></i> 二級菜單
      
                          {% if menu_id %}
                              <a href="{% memory_url request 'rbac:second_menu_add' menu_id=menu_id %}" class="right btn btn-success btn-xs" style="padding: 2px 8px;margin: -3px">
                                  <i class="fa fa-pause-circle" aria-hidden="true"></i> 新建
                              </a>
                          {% endif %}
      
                      </div>
                      <!-- Table -->
                      <table class="table">
                          <thead>
                          <tr>
                              <th>名稱</th>
                              <th>CODE & URL</th>
                              <th>選項</th>
                          </tr>
                          </thead>
                          <tbody>
                          {% for row in second_menus %}
                              <tr class="{% if row.id|safe == second_menu_id %}active{% endif %}">
                                  <td rowspan="2"><a href="?mid={{ menu_id }}&sid={{ row.id }}">{{ row.title }}</a></td>
                                  <td>{{ row.name }}</td>
                                  <td>
                                      <a style="color: #333333;" href="{% memory_url request 'rbac:second_menu_edit' pk=row.id %}">
                                          <i class="fa fa-edit" aria-hidden="true"></i></a>
      
                                      <a style="color: #d9534f;" href="{% memory_url request 'rbac:second_menu_del' pk=row.id %}"><i
                                              class="fa fa-trash-o"></i></a>
                                  </td>
                              </tr>
                              <tr class="{% if row.id|safe == second_menu_id %}active{% endif %}">
                                  <td colspan="2" style="border-top: 0">{{ row.url }}</td>
                              </tr>
                          {% endfor %}
                          </tbody>
                      </table>
                  </div>
              </div>
          </div>
      {% endblock %}
      

      二級菜單代碼下載


      4 權限的展示

      image

      urls.py

      from django.conf.urls import url
      from rbac.views import menu
      
      urlpatterns = [
          ...
          url(r'^permission/add/(?P<second_menu_id>\d+)/$', menu.permission_add, name='permission_add'),
          url(r'^permission/edit/(?P<pk>\d+)/$', menu.permission_edit, name='permission_edit'),
          url(r'^permission/del/(?P<pk>\d+)/$', menu.permission_del, name='permission_del'),
      ]
      
      app_name = "rbac"
      
      menu.py視圖
      class PermissionModelrForm(BootStrapModelForm):
          class Meta:
              model = models.Permission
              fields = ["title", "name", "url"]
      
      
      def permission_add(request, second_menu_id):
          """添加權限"""
          if request.method == 'GET':
              form = PermissionModelrForm()
              return render(request, 'rbac/change.html', {'form': form})
      
          form = PermissionModelrForm(data=request.POST)
          if form.is_valid():
      
              second_menu_obj = models.Permission.objects.filter(id=second_menu_id).first()
              if not second_menu_obj:
                  return HttpResponse("二級菜單不存在")
      
              form.instance.pid = second_menu_obj
              form.save()
              return redirect(memory_reverse(request, "rbac:menu_list"))
      
          return render(request, 'rbac/change.html', {'form': form})
      
      
      def permission_edit(request, pk):
          """編輯二級菜單"""
          permission_obj = models.Permission.objects.filter(id=pk).first()
      
          if request.method == 'GET':
              form = PermissionModelrForm(instance=permission_obj)
              return render(request, 'rbac/change.html', {'form': form})
      
          form = PermissionModelrForm(data=request.POST, instance=permission_obj)
          if form.is_valid():
              form.save()
              return redirect(memory_reverse(request, "rbac:menu_list"))
      
          return render(request, 'rbac/change.html', {'form': form})
      
      
      def permission_del(request, pk):
          url = memory_reverse(request, "rbac:menu_list")
          if request.method == 'GET':
              return render(request, 'rbac/delete.html', {'cancel': url})
      
          models.Permission.objects.filter(id=pk).delete()
          return redirect(url)
      

      rbac.py 參考一級菜單
      service/urls.py 參考一級菜單

      模板
      {% extends 'layout.html' %}
      {% load rbac %}
      
      {% block css %}
          <style>
              tr.active {
                  border-left: 3px solid #fdc00f;
              }
          </style>
      {% endblock %}
      
      {% block content %}
          <div class="luffy-container">
              <div class="col-md-3">
                  <div class="panel panel-default">
                      <!-- Default panel contents -->
                      <div class="panel-heading">
                          <i class="fa fa-book" aria-hidden="true"></i> 一級菜單
      
                          <a href="{% memory_url request "rbac:menu_add" %}" class="right btn btn-success btn-xs"
                             style="padding: 2px 8px;margin: -3px">
                              <i class="fa fa-pause-circle" aria-hidden="true"></i> 新建
                          </a>
      
                      </div>
                      <!-- Table -->
                      <table class="table">
                          <thead>
                          <tr>
                              <th>名稱</th>
                              <th>圖標</th>
                              <th>選項</th>
                          </tr>
                          </thead>
                          <tbody>
                          {% for row in menus %}
                              <tr class="{% if row.id|safe == menu_id %}active{% endif %}">
                                  <td><a href="?mid={{ row.id }}">{{ row.title }}</a></td>
                                  <td><i class="fa {{ row.icon }}" aria-hidden="true"></i></td>
                                  <td>
                                      <a style="color: #333333;" href="{% memory_url request "rbac:menu_edit" pk=row.id %}">
                                          <i class="fa fa-edit" aria-hidden="true"></i></a>
      
                                      <a style="color: #d9534f;" href="{% memory_url request "rbac:menu_del" pk=row.id %}"><i
                                              class="fa fa-trash-o"></i></a>
                                  </td>
                              </tr>
                          {% endfor %}
                          </tbody>
                      </table>
                  </div>
              </div>
              <div class="col-md-4">
                  <div class="panel panel-default">
                      <!-- Default panel contents -->
                      <div class="panel-heading">
                          <i class="fa fa-bars" aria-hidden="true"></i> 二級菜單
      
                          {% if menu_id %}
                              <a href="{% memory_url request 'rbac:second_menu_add' menu_id=menu_id %}" class="right btn btn-success btn-xs" style="padding: 2px 8px;margin: -3px">
                                  <i class="fa fa-pause-circle" aria-hidden="true"></i> 新建
                              </a>
                          {% endif %}
      
                      </div>
                      <!-- Table -->
                      <table class="table">
                          <thead>
                          <tr>
                              <th>名稱</th>
                              <th>CODE & URL</th>
                              <th>選項</th>
                          </tr>
                          </thead>
                          <tbody>
                          {% for row in second_menus %}
                              <tr class="{% if row.id|safe == second_menu_id %}active{% endif %}">
                                  <td rowspan="2"><a href="?mid={{ menu_id }}&sid={{ row.id }}">{{ row.title }}</a></td>
                                  <td>{{ row.name }}</td>
                                  <td>
                                      <a style="color: #333333;" href="{% memory_url request 'rbac:second_menu_edit' pk=row.id %}">
                                          <i class="fa fa-edit" aria-hidden="true"></i></a>
      
                                      <a style="color: #d9534f;" href="{% memory_url request 'rbac:second_menu_del' pk=row.id %}"><i
                                              class="fa fa-trash-o"></i></a>
                                  </td>
                              </tr>
                              <tr class="{% if row.id|safe == second_menu_id %}active{% endif %}">
                                  <td colspan="2" style="border-top: 0">{{ row.url }}</td>
                              </tr>
                          {% endfor %}
                          </tbody>
                      </table>
                  </div>
              </div>
              <div class="col-md-4">
                  <div class="panel panel-default">
                      <!-- Default panel contents -->
                      <div class="panel-heading">
                          <i class="fa fa-bars" aria-hidden="true"></i> 權限
      
                          {% if second_menu_id %}
                              <a href="{% memory_url request 'rbac:permission_add' second_menu_id=second_menu_id %}" class="right btn btn-success btn-xs" style="padding: 2px 8px;margin: -3px">
                                  <i class="fa fa-pause-circle" aria-hidden="true"></i> 新建
                              </a>
                          {% endif %}
      
                      </div>
                      <!-- Table -->
                      <table class="table">
                          <thead>
                          <tr>
                              <th>名稱</th>
                              <th>CODE & URL</th>
                              <th>選項</th>
                          </tr>
                          </thead>
                          <tbody>
                          {% for row in permissions %}
                              <tr>
                                  <td rowspan="2">{{ row.title }}</td>
                                  <td>{{ row.name }}</td>
                                  <td>
                                      <a style="color: #333333;" href="{% memory_url request 'rbac:permission_edit' pk=row.id %}">
                                          <i class="fa fa-edit" aria-hidden="true"></i></a>
      
                                      <a style="color: #d9534f;" href="{% memory_url request 'rbac:permission_del' pk=row.id %}"><i
                                              class="fa fa-trash-o"></i></a>
                                  </td>
                              </tr>
                              <tr>
                                  <td colspan="2" style="border-top: 0">{{ row.url }}</td>
                              </tr>
                          {% endfor %}
                          </tbody>
                      </table>
                  </div>
              </div>
          </div>
      {% endblock %}
      
      

      三級菜單代碼下載

      posted @ 2022-08-29 17:47  角角邊  Views(42)  Comments(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲中文字幕在线二页| 好姑娘6电影在线观看| 久久精品亚洲中文字幕无码网站 | 精品久久8x国产免费观看| 少妇办公室好紧好爽再浪一点| 最新精品国偷自产在线美女足| av日韩精品在线播放| 日韩激情一区二区三区| 欧美片内射欧美美美妇| 国99久9在线 | 免费| 人人妻人人做人人爽| 亚洲精品一区二区动漫| 999国产精品999久久久久久| 精品一区二区不卡无码AV| 恩施市| 国产午夜伦伦午夜伦无码| 国产精品日日摸夜夜添夜夜添无码| 超碰人人超碰人人| av在线播放无码线| 亚洲一区二区三区十八禁| 国产地址二永久伊甸园| 欧美肥老太牲交大战| 亚洲一区二区啊射精日韩| 韩国精品久久久久久无码| 精品人妻中文字幕av| 久久不见久久见免费视频| 国产午夜福利在线机视频| 久久久久影院色老大2020| 亚洲一区在线成人av| 中文字幕日本六区小电影| 极品少妇的粉嫩小泬看片| 日韩精品福利一二三专区| 成人午夜免费无码视频在线观看| 伊人欧美在线| 精品人妻一区二区三区蜜臀 | 中文字幕av日韩有码| 99国产欧美久久久精品蜜芽| 久青草精品视频在线观看| 亚洲精品日韩久久精品| 天堂国产一区二区三区| 男人猛戳女人30分钟视频大全 |