Django用户认证系统的扩展和使用

一、Django用户认证系统的扩展和使用

 

user对象

  user表包含的字段

username   用户名(必须字段,30个字符或更少,可以包含 _, @, +, . 和 - 字符)

password    密码(必须字段,存储的是哈希值)

first_name    可选

last_name    可选

email      可选

is_staff      (Boolean  决定用户是否可以访问admin管理界面。默认False)

is_active    (Boolean。 用户是否活跃,默认True。一般不删除用户,而是将用户的is_active设为False)

is_superuser (Boolean。默认False。当设为True时,用户获得全部权限)

date_joined  用户创建的时间

last_login     上一次的登录时间,为datetime对象

 

  方法

is_anonymous()    是否是匿名用户。

is_authenticated()     用户是否通过验证,登陆。

get_full_name()         返回first_name plus the last_name, with a space in between.

get_short_name()     返回first_name.

set_password(raw_password)  设置密码。

check_password(raw_password)  验证密码。

get_group_permissions(obj=None)  返回用户组权限的集合。

get_all_permissions(obj=None)  返回用户所有的权限集合。

has_perm(perm, obj=None)  用户是否具有某个权限。

has_perms(perm_list, obj=None)  用户是否具有权限列表中的每个权限。

 

当我们想要扩展一些字段时,我们可以另外写一个model,然后OneToOneField到user表

from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=32)

这样我们就可以通过request.user 和request.user.userprofile.name分别获取到user表的username和userprofile表的name

 

用户验证、登录、退出 authenticate()、login(request,user) 、logout(request) 

from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required

@login_required
def acc_home(request):
    return render(request,"index.html")

def acc_login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username=username,password=password) #验证

        if user is not None:
            login(request,user) #登录
            return redirect("/app01/acc_home/")
    else:
        return render(request,"login.html")

def acc_logout(request):
    logout(request) #退出

 

验证是否登录 is_authenticated()

if request.user.is_authenticated():
        print("已登录")

 

创建用户

  可以使用python manage.py createsuperuser创建超级用户,然后在admin进行添加,如果是需要自己写一个注册创建用户,有些地方需要注意

User对象的密码不是明文存储的,所以创建User对象时与通常的Model create不同,需用内置的create_user()方法。在创建好后还要和你扩展的表进行关联

accounts_dic={"username":username,"password":password}
uu = models.User.objects.create_user(**accounts_dic)    #创建用户             
models.UserProfile.objects.create(name="张三",user_id=uu.id)#关联UserProfile表

 

修改密码 set_password()

amend_obj = models.User.objects.get(username='zhangsan')
amend_obj .set_password('new password')
amend_obj .save()

 

posted @ 2016-07-11 19:26  J_hong  阅读(554)  评论(0)    收藏  举报