最近完成这样的一个需求,比如说一个网页有几个按钮(添加,编辑,删除,查看),张三用户可以访问这几个按钮,李四只能查看(没有其它权限),怎么办?我相信对于初学者来说,完成这样的需求,确实有点难度,作者也是折腾了2天,才懂的一点皮毛,在这里非常感谢我的同事雪姐,耐心的给我讲解。言归正传,把这个流程跟大家分享一下.(高手勿喷)


首先设计表结构

创建一个用户表,并且做了一对一关联django user表

1.自定义用户表

from__future__importunicode_literalsfromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportUser#Createyourmodelshere.#自定义用户表classUserinfo(models.Model):user=models.OneToOneField(User)#关联djangouser表username=models.CharField(max_length=100)password=models.CharField(max_length=100)def__unicode__(self):returnself.username


2.自定义权限表

classquanxian(models.Model):shuoming=models.CharField(max_length=100)def__unicode__(self):returnself.shuomingclassMeta:permissions=(('edit',u'编辑权限'),('add',u'添加权限'),('DEL',u'删除权限'),('list',u'查看权限'),)


3.views.py定义一个login视图方法

fromtest01.modelsimportUserinfofromdjangoimportformsfromdjango.contribimportauthfromdjango.contrib.auth.modelsimportUserfromdjango.contrib.authimportauthenticatefromdjango.templateimportRequestContext#Createyourviewshere.classUserForm(forms.Form):username=forms.CharField(label="user",max_length=100)password=forms.CharField(label="passwd",widget=forms.PasswordInput())defindex(request):returnrender_to_response('index.html')deflogin(request):ifrequest.method=='POST':uf=UserForm(request.POST)ifuf.is_valid():username=uf.cleaned_data['username']password=uf.cleaned_data['password']printusername,password,"[*******]"user1=authenticate(username=username,password=password)is_add=Trueifuser1.has_perm('test01.add')elseFalseprint'user1--->',user1,user1.has_perm('test01.add'),is_addifuser1:returnrender_to_response('index.html',locals(),context_instance=RequestContext(request))else:returnHttpResponseRedirect('/login/')else:uf=UserForm()returnrender_to_response('login.html',{'uf':uf})

4.在admin.py注册models.py里的表

fromdjango.contribimportadminfromtest01importmodelsadmin.site.register(models.quanxian)admin.site.register(models.Userinfo)

5.urls.py

fromdjango.conf.urlsimporturlfromdjango.contribimportadminfromtest01importviewsurlpatterns=[url(r'^admin/',admin.site.urls),url(r'^index/$',views.index),url(r'^$',views.login,name='login'),]

6.初始化数据表,创建后台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.


7.登录admin后台,创建用户

http://127.0.0.1:8000/admin/



8.前端页面

vim login.html

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"lang="en"><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/><title>登录</title></head><!--styletype="text/css">body{color:#efd;background:#453;padding:05em;margin:0}h2{padding:2em1em;background:#675}h3{color:#bf8;border-top:1pxdotted#fff;margin-top:2em}p{margin:1em0}</style--><body><h2>登录页面:</h2><formmethod='post'enctype="multipart/form-data">`uf`.`as_p`<inputtype="submit"value="ok"/></form></body></html>

index.html

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>index</title></head><body>{%ifis_add%}<button>编辑</button><button>添加</button><button>删除</button>{%else%}<button>查看</button>{%endif%}<div>欢迎{{username}}登录</div></body></html>


9.测试

首先用zhangsan用户登录


lisi用户登录后





大功告成

附件:http://down.51cto.com/data/2368094