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的内容如下:

img

index.html的内容如下:

img

测试成功。

(3)问题扩展

利用Django搭建公司后台系统,在开发中遇到数据分页(django原生翻页),后台自定义页面、搜索功能(基于日期单搜索和日期项目名称多选项搜索)、数据显示(BootstrapTable翻页)、权限(控制表)等问题。

(4)结合项目中使用

django后台管理权限。

点击此处
隐藏目录