Django之auth模块用户认证模块

一、Auth模块

1)auth模块是什么。登录后台使用的账号密码,则就是使用的auth模块创建的表

Auth模块是Django自带的用户认证模块:

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。
此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。
Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,
它默认使用 auth_user 表来存储用户数据。

2)auth模块的功能

2.1)导入auth模块

from django.contrib import auth

2.2)auth模块下的方法。authenticate()。认证功能

提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。
如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。
authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。
用法:
user = authenticate(username=‘usernamer‘,password=‘password‘)

具体使用如下

from django.contrib import auth
def auth_test(request):
    username = request.POST[‘username‘]
    password = request.POST[‘password‘]
    user = auth.authenticate(username=username, password=password)
    if user:
        print(user.username)
        return HttpResponse("登录成功")
    return HttpResponse("登录失败")

authenticate使用

2.3)login(request,user)。登录功能(认证成功后)

from django.contrib import auth
def auth_test(request):
    user = auth.authenticate(request,username=‘user2‘,password=‘user123456‘)    # 认证
    print(user)
    if user:
        print(user.username)    # 登录的用户名
        auth.login(request,user)
    return render(request,‘auth_test.html‘)

auth.login(request,user)

登录后,前端也可获取到登录的用户名

<body>
<div>{{ request.user }}</div>
</body>

{{ request.user }}

在前端也可判断请求是否通过。

<body>
<div>{{ request.user }}</div>
<div>{{ request.user.is_authenticated }}</div>
</body>

is_authenticated

2.4)auth.logout(request)。用户退出方法

def auth_test_logout(request):
    auth.logout(request)
    return HttpResponse(‘退出成功‘)

auth.logout(request)

二、auth模块扩展。用于创建用户,登录装饰器

1)新增字段

1.1)修改配置文件settings.py

# AUTH_USER_MODEL = "app名.用户名表"
AUTH_USER_MODEL = "app01.UserInfo"  # 指定表

settings.py

1.2)创建的表,继承AbstractUser。可重写表结构

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    nid = models.AutoField(primary_key=True)
    telephone = models.CharField(max_length=32)

AbstractUser

2)创建用户

def auth_test_creat_user(request):
    # 管理员
    UserInfo.objects.create_superuser(username=‘usersb1‘,password=123,email=‘[email protected]‘)
    # 普通用户
    UserInfo.objects.create_user(username=‘usersb2‘,password=123,email=‘[email protected]‘)
    return HttpResponse(‘成功‘)

creat_user

3.1)登录装饰器方法一。视图函数前加上url

@login_required(login_url=‘/auth_test_login/‘)   # 登录以后才能有的操作
def auth_test_logout(request):
    auth.logout(request)
    return HttpResponse(‘退出成功‘)

@login_required

login_url=‘/auth_test_login/‘,没有登录跳转到的url

3.2)登录装饰器方法二。settings全局配置

LOGIN_URL = ‘/auth_test_login/‘

settings.py

视图函数前就不用加url了

@login_required   # 登录以后才能有的操作
def auth_test_logout(request):
    auth.logout(request)
    return HttpResponse(‘退出成功‘

4)检查密码。check_password(password)。

密码正确返回True,否则返回False。

check_password(password)
auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。

tag = user.check_password(‘密码‘)
if tag:
    print("ok")
else:
    print("错误")

check_password(‘密码‘)

5)修改密码。set_password(password)

auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。
注意:设置完一定要调用用户对象的save方法!!!
用法:
user.set_password(password=‘‘)
user.save()

set_password(password=‘‘)

一个简单的修改密码示例

@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)

6)User对象的属性

User对象属性:username, password
is_staff : 用户是否拥有网站的管理权限.
is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。

三、总结(auth模块使用)

配置文件:settings.py
    AUTH_USER_MODEL = "app01.UserInfo"  # 创建扩展用户表
    LOGIN_URL = ‘/auth_test_login/‘        # 装饰器的跳转登录url
创建表:models.py
    from django.contrib.auth.models import AbstractUser        # 继承 AbstractUser
    class UserInfo(AbstractUser):
        nid = models.AutoField(primary_key=True)
        telephone = models.CharField(max_length=32)
视图函数方法:views.py
    auth.authenticate(request,username=‘user2‘,password=‘user123456‘)    # 认证
    auth.login(request,user)    # 登录
    print(request.user)            # 属性,用户名
    request.user.is_authenticated    # 属性,判断请求是否通过

    @login_required                # 装饰器
    UserInfo.objects.create_superuser()        # 创建超级管理员
    UserInfo.objects.create_user()            # 创建普通管理员
    check_password(password)    # 检查密码
    set_password(password)        # 修改密码

前端文件:
    request请求体里面含有user对象
    后端有的属性,前端也能获取到
    {{ request.user }}
    {{ request.user.is_authenticated }}

原文地址:https://www.cnblogs.com/linu/p/9733149.html

时间: 2024-11-04 20:35:38

Django之auth模块用户认证模块的相关文章

auth模块用户认证

一.auth模块什么 auth模块时django自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据 二auth模块常用方法 首先先导入auth模块 from django.contrib import auth

auth用户认证模块

auth模块 用auth模块 就一定要用它本身提供的一些查询,检索,修改,校验的方法 自带的admin管理后台中创建管理员用户,普通用户 (tools菜单中的run manager.py选项下输入) 如何创建超级用户 用于登录django admin的后台管理 createsuperuser createuser #普通用户 auth基本使用语法 (views.py中) from django.contrib import auth from django.contrib.auth.models

重新开发Jumpserver用户认证模块,调用独立认证接口(一)

一.概述 Jumpserver用的是python的django框架开发,所以主要完成两个事情: 1.开发自己的认证后台 一个认证后台就是要实现如下两个方法的类: get_user(id) 和 authenticate(**credentials) . 方法 get_user 返回一个 User 对象,参数 id 可以是用户名或者数据库ID.  方法authenticate(**credentials)可以使用密码.token或者已有的认证接口实现身份认证,返回User对象.如果你的认证后台的Us

python2.0_day18_Django自带的用户认证模块的使用

用户验证我们基于一个项目来学习利用Django框架中的user表实现用户认证Django练习小项目:学员管理系统设计开发 项目需求: 1.分讲师\学员\课程顾问角色, 2.学员可以属于多个班级,学员成绩按课程分别统计 3.每个班级至少包含一个或多个讲师 4.一个学员要有状态转化的过程 ,比如未报名前,报名后,毕业老学员 5.客户要有咨询纪录, 后续的定期跟踪纪录也要保存 6.每个学员的所有上课出勤情况\学习成绩都要保存 7.学校可以有分校区,默认每个校区的员工只能查看和管理自己校区的学员 8.客

实战Nginx(3)-访问控制与用户认证模块及nginx内置状态页介绍

一.访问控制模块详解 Nginx的访问控制模块是ngx_http_access_module,实际上deny和allow指令属于ngx_http_access_module.我们想控制某个uri或者一个路径不让人访问,就需要依赖此模块. 1.模块安装: 编译安装nginx时不需要指定访问控制模块参数,这个模块已经内置在了nginx中,除非你安装中使用了--without-http_access_module. 2.模块指令: 允许:allow 语法: Syntax:allow address |

重新开发Jumpserver用户认证模块,调用独立认证接口(二)

一.urls.py # --*--coding:utf-8--*-- from django.conf.urls import patterns, url urlpatterns = patterns('myauth.login', url(r'^login/$', 'do_login', name='login'), url(r'^logout/$', 'do_logout', name='logout'), ) 二.myauth_backend.py Jms_Users 是继承Django的

python—day66 Django自带的用户认证 Auth模块

 Auth模块: 导入auth模块 from django.contrib import auth 这个模块主的三个方法: 1.authenticate()  2.login(request, user) 3.logout(request) 原文地址:https://www.cnblogs.com/kermitjam/p/9248652.html

Apache用户认证---模块

1.vim /usr/local/apache/conf/extra/http-vhosts.conf更改虚拟主机配置文件 加入: <Directory /data/www/abc>         #----需要认证访问的文件目录 AllowOverride AuthConfig AuthName "自定义的" AuthType Basic AuthUserFile /data/.htpasswd         #----------存放用户名密码的文件,[不可复制进去

Python Django 生命周期 中间键 csrf跨站请求伪造 auth认证模块 settings功能插拔式源码

一 django 生命周期 二 django中间键 1.什么是中间键 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的功能. 简单来说就相当于django门户,保安:它本质上就是一个自定义类,类中定义了几个方法. 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models): 响应走的时候也需要经过中间件才能到达w