给用户进行权限的分配。
1 角色管理
项目目录下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 用户管理
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 %}
点击下载代码
标签:form,request,rbac,html,role,user,权限,分配 From: https://www.cnblogs.com/mimiICC/p/16635938.html