Django-auth模块

Posted mqhpy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-auth模块相关的知识,希望对你有一定的参考价值。

一、什么是auth模块:

auth模块是Django自带的用户认证模块,我们在开发网站的时候,无可避免的需要设计实现网站的用户系统,此时我们需要实现包括用户注册,用户登录,用户认证,注销,修改密码等功能,这还真是比较麻烦的事情呢!!!

同时,Django最为一个完美主义者的终极框架,当然也会想到用户的这些情况。由此用户认证系统auth就出现了!

二、auth模块的常用方法:

1.创建用户:

from django.contrib.auth.models import User
User.objects.create(username=username,password=password)  # 不可用  密码不是加密的
User.objects.create_user(username=username,password=password)  # 创建普通用户密码自动加密
User.objects.create_superuser(username=username,password=password,email=123@qq.com)  # 创建超级用户需要邮箱数据

 

2.校验用户名和密码是否正确:

from django.contrib import auth
user_obj = auth.authenticate(request,username=username,password=password)
# 必须传用户名和密码两个参数缺一不能

3.保存用户登录状态:

auth.login(request,user_obj)
# 只要这句话执行了 后面在任意位置 只要你能拿到request你就可以通过request.user获取到当前登录的用户对象

4.判断用户登录状态:

request.user.is_authenticated()

5.校验原密码是否正确

request.user.check_password(old_password)

6.修改密码:

request.user.set_password(new_password)
request.user.save()  # 千万不要忘了

7.注销:

auth.logout(request)

8.校验用户是否登录|装饰器

from django.contrib.auth.decorators import login_required
#局部配置(login_url=‘/login/‘)
    @login_required(login_url=/login/)
    def index(request):
        pass
#全局配置(login_url=‘/login/‘)
    settings配置文件中 直接配置
    LOGIN_URL = /login/
    @login_required
    def index(request):
        pass
# 如果全局配置了 局部也配置  以局部的为准

三、如何扩展auth_user字段表

方式一:利用一对一外键字段关系

from django.contrib.auth.models import User
class
UserDetail(models.Model): phone = models.BigIntegerField() user = models.OneToOneField(to=User)

方式二:利用继承关系(推荐使用)

from django.contrib.auth.models import AbstractUser
class Userinfo(AbstractUser):
  phone = models.BigIntegerField()
  register_time = models.DateField(auto_now_add=True)

# 一定要注意 还需要去配置文件中配置
AUTH_USER_MODEL = app01.Userinfo  # 应用名.表名
# 这么写完之后 之前所有的auth模块功能全都以你写的表为准 

 

以上是关于Django-auth模块的主要内容,如果未能解决你的问题,请参考以下文章

Django-Auth模块之auth_user表

django-auth组件的权限管理

django-auth组件的注册登录

如何利用Django-auth做用户认证

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何有条件地将 C 代码片段编译到我的 Perl 模块?