django-用户认证组件

一、models:

AbstractUser  或  User
from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
    """
    用户信息
    """
    nid = models.AutoField(primary_key=True)
    telephone = models.CharField(max_length=11, null=True, unique=True)
    avatar = models.FileField(upload_to='avatars/', default="avatars/default.png")
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    blog = models.OneToOneField(to='Blog', to_field='nid', null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.username

  UserInfo表会继承AbstractUser的字段,其中username、password为必填字段。

from django.contrib.auth.models import User


class UserInfo(User):
    pass
继承User

  如果UserInfo继承的是User,则增加一个必填字段email。

二、views:auth模块

  在设计表结构的时候如果使用了用户认证组件,那么Django会自动写好session,如果要在session中自定义一些值,自行添加即可。

  1、登录

from django.shortcuts import render, HttpResponse, redirect
from django.contrib import auth

def login(request):
    if request.method == "POST":
        response = {"user": None, "msg": None}
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        check_codes = request.POST.get('check_code')

        check_code_session = request.session.get('check_code')
        if check_codes.upper() == check_code_session.upper():
            user = auth.authenticate(username=user, password=pwd)
            if user:
                auth.login(request, user)
                response['user'] = user.username
            else:
                response['msg'] = '用户名或密码错误!'
        else:
            response['msg'] = '验证码错误!'
        return JsonResponse(response)
    return render(request, 'login.html')
auth之authenticate&login

  获取前端传过来的用户名和密码之后,传给authenticate,它会拿着数据到数据库进行验证,如果验证通过则返回一个user对象,该对象包含了UserInfo表的所有字段以及username、password。

  把request对象和user对象传给auth的login()方法即实现登录。

  user对象

  (1)、request.user.is_authenticated():返回一个布尔值,判断用户是否已登录

def my_view(request):
  if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

  (2)、create_user辅助函数创建用户

from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email=''
参考
user_dict = {"username": username, "password": password, "email": email}
# models.UserInfo.objects.create(**user_dict)   # 无效,只能用create_user()
models.UserInfo.objects.create_user(**user_dict)

 

  (3)、修改密码

    check_password(passwd):检查用户输入的旧密码passwd,如果正确返回True

    set_password():修改密码

user = UserInfo.objects.get(username='')
user.set_password(password='')
user.save()

 

  

 

  2、退出

def logout(request):
    # 退出,清除session
    auth.logout(request)
    return redirect('/login/')
auth之logout

 

posted @ 2018-07-19 14:58  web123  阅读(97)  评论(0编辑  收藏  举报