第七章、Ajango自带auth模块

一、什么是auth

auth是django自带的用户认证模块

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

二、auth模块的常用方法

首先导入模块

from django.contrib import auth
authenticate()
login(HttpRequest, user)
logout(request)
is_authenticated()
login_requierd()
create_user()
create_superuser()
check_password(password)
set_password(password)
  • authenticate()

    验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

    authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

    user = authenticate(username='usernamer',password='password')
  • login(HttpRequest, user)

    该函数接受一个HttpRequest对象,以及一个经过认证的User对象。

    from django.contrib.auth import authenticate, login
    
    def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)#校验密码不等于登录
    if user is not None: #判断user是否存在 存在就能获取
    login(request, user)#登录 本质上给后端为这个user 生成session数据
    #登陆成功后返回一个sucess的page
    ...
    else:
    # 返回一个user不存在的page
    ...
  • logout(request)

    有登陆必有注销 用来接收一个HttpRequest对象,无返回值。

    调用这个函数时,当前请求的session会全部清除。该用户即使没有登录,使用该函数也不会报错。

    from django.contrib.auth import logout
    
    def logout_view(request):
    logout(request)
    # Redirect to a success page.
  • is_authenticated()

    用来判断当前请求是否通过了认证。

    def my_view(request):
    if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path)) #不通过验证的user会重定向到登录界面
    else:
    ...#返回验证通过后跳转到的页面
  • login_requierd()

    auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验。

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def my_view(request):
    ...

    说明:

    若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。需要自定义登录的url则需要在settings.py文件中通过LOGIN_URL进行修改。比如LOGIN_URL = '/login/' 这里配置成你项目登录页面的路由

  • create_user()

    auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。

    from django.contrib.auth.models import User
    user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
  • create_superuser()

    auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password)

    from django.contrib.auth.models import User
    user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
  • check_password(password)

    auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。密码正确返回True,否则返回False。

    is_ok = user.check_password('密码')     #密码正确is_ok返回True,否则返回False。
  • set_password(password)

    auth 提供的一个修改密码的方法,接收 要设置的新密码作为参数。

    注意:设置完一定要调用用户对象的save方法!!!

    user.set_password(password='')
    user.save() #设置完一定要调用用户对象的save方法!!!

    简单修改密码案例

    @login_required
    def set_password(request):
    user = request.user
    err_msg = ''
    if request.method == 'POST':
    old_password = request.POST.get('old_password', '')
    new_password = request.POST.get('new_password', '')
    repeat_password = request.POST.get('repeat_password', '')
    # 检查旧密码是否正确
    if user.check_password(old_password):
    if not new_password:
    err_msg = '新密码不能为空'
    elif new_password != repeat_password:
    err_msg = '两次密码不一致'
    else:
    user.set_password(new_password)
    user.save()
    return redirect("/login/")
    else:
    err_msg = '原密码输入错误'
    content = {
    'err_msg': err_msg,
    }
    return render(request, 'set_password.html', content)
  • User对象的属性

    User对象属性:username, password

    is_staff : 用户是否拥有网站的管理权限.

    is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。

三、拓展默认的auth_user表

这内置的认证系统这么好用,但是auth_user表字段都是固定的那几个,我在项目中没法拿来直接使用啊!

比如,我想要加一个存储用户手机号phone的字段,怎么办?

聪明的你可能会想到新建另外一张表然后通过一对一和内置的auth_user表关联,这样虽然能满足要求但是有没有更好的实现方式呢?

答案是当然有了。

我们可以通过继承内置的 AbstractUser 类,来定义一个自己的Model类。

这样既能根据项目需求灵活的设计用户表,又能使用Django强大的认证系统了。

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
"""
用户信息表
"""
id = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11, null=True, unique=True) def __str__(self):
return self.username

别忘记执行数据迁移的命令migratemakemigrations

注意:

按上面的方式扩展了内置的auth_user表之后,一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。写法如下:

# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"

再次注意:

一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。

第七章、Ajango自带auth模块的更多相关文章

  1. Django自带的用户认证auth模块

    一.介绍 基本上在任何网站上,都无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能. 使用Django,我们可以不需要自己写这些功能,因为Dj ...

  2. Django 自带认证功能auth模块和User对象的基本操作

    一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate()    ...

  3. (30)auth模块(django自带的用户认证模块)

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

  4. Django的自带认证系统——auth模块

    Django自带的用户认证 auth模块 from django.contrib import auth 备注:使用auth模块时,我们默认使用Django提供的auth_user表,创建数据时,可以 ...

  5. python3开发进阶-Django框架的自带认证功能auth模块和User对象的基本操作

    阅读目录 auth模块 User对象 认证进阶 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其 ...

  6. Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块

    Auth模板 1. 什么是Auth模块,有什么用? django的auth的模块的使用: auth 是集合注册,登录,注销,session 多个功能集合在一起的模块 2. 使用Auth组件的默认aut ...

  7. Linux内核分析 读书笔记 (第七章)

    第七章 链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行. 2.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于 ...

  8. linux第七章笔记

    第七章 链接 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于加载时,也就 ...

  9. ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...

随机推荐

  1. Spring事务管理3----声明式事务管理(1)

     声明式事务管理(1)基于    基于 tx/aop  这种事务管理相比编程式事务管理来说对业务层基本没有改动,通过  TransactionProxyFactoryBean 创建业务层的代理,通过A ...

  2. 反向代理远端 单台tomcat 使用域名代理

    .环境 nginx 10.1.1.161 公网:123.58.251.166 tomcat 10.1.1.103 .远端tomcat 配置 [root@host---- ~]# netstat -tn ...

  3. 机器学习实战笔记——KNN

    机器学习实战——读书笔记 书籍奉上

  4. SQL中有关DQL、DML、DDL、DCL的概念与区别?

    SQL(Structure Query Language)结构化查询语言是数据库的核心语言,是高级的非过程化编程语言.它功能强大,效率高,简单易学易维护.SQL语言基本上独立于数据库本身.使用的机器. ...

  5. 《Java语言程序设计》继承与多态

    一.动手实验:继承条件下的构造方法 调用运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent ...

  6. IDEA使用mybatis generator自动生成代码

    主要就三步: 1.pom 文件中引入jar包并配置 build 属性 <dependencies> <!-- 自动生产mapper Begin! --> <depende ...

  7. .NET的垃圾回收机制

    .NET的垃圾回收机制: CLR管理内存的区域主要有三块: 一: 线程的堆栈 ,用于分配值类型实例.堆栈主要有操作系统管理,不受垃圾收集器的控制,当值类型实例所在的方法结束时,其存储单位自动释放.栈的 ...

  8. HDU 1317:XYZZY

    Problem Description It has recently been discovered how to run open-source software on the Y-Crate g ...

  9. fastadmin cms使用注意一

    addon和application还有前端配置后还需要 注意表配置

  10. 洛谷 题解 P2280 【[HNOI2003]激光炸弹】

    一道很好的二维前缀和模板题. 什么是二维前缀和? 从这张图可以看出前缀和的求法: Map[i][j]=Map[i-1][j]+Map[i][j-1]-Map[i-1][j-1]+Map[i][j]; ...