Django后台管理权限中如何跟菜单或网页按钮关联
(1)问题分析
考官主要想考察的是比如说一个网页有几个按钮(添加、编辑、删除、查看),用户张三可以操作这几个按钮,李四只能查看(没有其它权限),怎么办?
(2)核心问题讲解
创建一个用户表,并且做了一对一关联django user表。
- 自定义用户表
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
# 自定义用户表
class Userinfo(models.Model):
user = models.OneToOneField(User) # 关联django user表
username = models.CharField(max_length=100)
password = models.CharField(max_length=100)
def __unicode__(self):
return self.username
- 自定义权限表
class quanxian(models.Model):
shuoming=models.CharField(max_length=100)
def __unicode__(self):
return self.shuoming
class Meta:
permissions = (
('edit', u'编辑权限'),
('add', u'添加权限'),
('DEL',u'删除权限'),
('list',u'查看权限'),
)
在views.py文件中定义一个login视图方法,代码如下:
from test01.models import Userinfo
from django import forms
from django.contrib import auth
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from django.template import RequestContext
# Create your views here.
class UserForm(forms.Form):
username = forms.CharField(label="user",max_length=100)
password = forms.CharField(label="passwd",widget=forms.PasswordInput())
def index(request):
return render_to_response('index.html')
def login(request):
if request.method == 'POST':
uf = UserForm(request.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
print username,password,"[*******]"
user1 = authenticate(username=username, password=password)
is_add = True if user1.has_perm('test01.add') else False
print 'user1--->',user1,user1.has_perm('test01.add'), is_add
if user1:
return render_to_response('index.html',locals(),
context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_response('login.html',{'uf':uf})
在admin.py中注册models.py里的表,代码如下:
from django.contrib import admin
from test01 import models
admin.site.register(models.quanxian)
admin.site.register(models.Userinfo)
在urls.py中添加login()视图,代码如下:
from django.conf.urls import url
from django.contrib import admin
from test01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
url(r'^$', views.login, name='login'),
]
初始化数据表,创建后台admin管理员,代码如下:
python manage.py makemigrations
python manage.py migrate
# 创建后台admin管理员
bogon:model_test will.xin$ python manage.py createsuperuser
Username (leave blank to use 'will.xin'): admin
Email address:
Password:
Password (again):
Superuser created successfully.
登录admin后台,创建用户。登录网址为
http://127.0.0.1:8000/admin/
。修改前端页面。
vim login.html的内容如下:
index.html的内容如下:
测试成功。
(3)问题扩展
利用Django搭建公司后台系统,在开发中遇到数据分页(django原生翻页),后台自定义页面、搜索功能(基于日期单搜索和日期项目名称多选项搜索)、数据显示(BootstrapTable翻页)、权限(控制表)等问题。
(4)结合项目中使用
django后台管理权限。