shikailun的日志

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里会保存用户的用户名等信息,这应该是非常危险的。

Posted on
This entry was posted in technology  and tagged Django  Python  后端