Django用户授权认证系统
大致看了Django自带的用户授权认证系统,还是非常复杂的,实际开发中,我们可以直接用这套系统处理各个用户之间的权限,组等问题,我今天使用了一下它最简单的登陆注销,十分方便就能实现,不用去关心Cookie和Session的处理问题。
下面会说明如何使用这一套Django自带的User Authentication系统。
首先是安装这一模块:
前提:激活Session中间件,默认是激活的。
1. 在Settings.py的INSTALLED_APPS中添加 'django.contrib.auth' 和 'django.contrib.contenttypes' (auth里的Permission模块依赖于contenttypes,所以必须同时安装2个app,无数中文教程抄来抄去,这一步就有错误。)
2. 同步数据库 manage.py syncdb
使用User模块
如果你要使用该权限模块,就必须要使用他的User类
User模块有如下字段:
username,first_name,last_name,email,password,is_staff,is_active,is_superuser,last_login,date_joined
实际开发中,我们的用户信息肯定和这个类不同,我们只需自己写一个类并和User类建立一个OneToOne的关系即可。
下面是User模块几个重要的方法:
is_anonymous():是否为匿名用户,如果你已经login,则这个方法返回始终为false。
is_authenticated():是否通过验证,也就是通过用户名和密码判断该用户是否存在。
get_group_permissions():得到所有该用户所属组别的权限。
get_all_permissions():得到该用户所有的权限。
has_perm(perm):判断用户是否具有特定权限。
后端代码
#User的登陆验证Demo: from django.contrib.auth import * username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) # 登陆成功的操作... else: # 登陆失败的操作... #User的注销Demo def logout_view(request): logout(request) # 注销后的操作
页面
在Django的Template中的用户验证Demo:
{\% if user.is_authenticated %\} <p>Welcome, .</p> {\% else %\} <p>No</p> {\% endif %\}
OK,完毕,可以看到我们可以很方便的在开发中使用这一套用户系统。
更深入地看一下它的原理,这套用户授权认证系统是基于Cookie和Session的,Cookie保存在客户端,所以肯定不能保存重的要信息,Django的Session是基于Cookie实现的,可以在Chrome里很清楚的看到:
Cookie中保存一个Session的索引编号,其它所有信息都保存在服务器端即可,
服务器的数据:
Cookie传送一个唯一的索引号,服务器保存的才是User的序列号后的敏感信息,所以很安全,很难伪造Cookie的,以前我在开发时,在Cookie里会保存用户的用户名等信息,这应该是非常危险的。