Django框架(十一)——Auth模块

Auth模块

一、什么是auth模块

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

Auth模块是Django自带的用户认证模块,可以实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。默认使用 auth_user 表来存储用户数据。

二、Auth模块使用

1.创建超级用户  (createsuperuser)

创建超级用户就是在auth_user表中插入数据,密码是加密的。

在  Run manage.py Task  创建

createsuperuser

2.查询用户(authenticate())

验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。如果认证成功(用户名和密码正确有效),便会返回一个 User 对象

from django.contrib import auth
user_obj = auth.authenticate(request, username=name, password=pwd)

不能使用filter这种查询方法,因为user表存的密码是加密的

models.User.objects.filter(username=username,password=password).first()

3.登录用户(login())

该函数接收一个HttpRequest对象,以及一个经过查询认证的user_obj

登录之后,会将用户状态记录到session中

from django.contrib import auth

auth.login(request,user_obj)

4.登录成功

只要执行了上面那句话登录成功,你就可以在后端任意位置通过request.user获取到当前用户对象

user_obj = request.user

5.判断用户是否登录(is_authenticated)

用来判断当前请求是否通过了认证,如果通过就是true,反之false

request.user.is_authenticated

6.登录认证装饰器

快捷的给某个视图添加登录校验。

若用户没有登录,则会跳转到django默认的登录URL‘/accounts/login/‘,并传递当前访问url的绝对路径(登录成功后,会重定向回到该路径)

如果自定义了登录URL,则需要在settings.py文件中通过LOGIN_URL 设置登录路径

from django.contrib.auth.decorators import  login_required

@login_required(login_url=‘/xxx/‘)  # 局部配置 直接在装饰器里面写一个登录路径
def index(request):
    pass

# 全局配置  settings文件中写
LOGIN_URL = ‘/xxx/‘
设置完后直接写装饰器 @login_required 就可以

7.注册超级用户和普通用户

错误方法:User.objects.create(username =username,password=password)  # 创建用户名的时候 千万不要再使用create 了
User.objects.create_user(username =username,password=password)  # 创建普通用户
User.objects.create_superuser(username =username,password=password,email=‘[email protected]‘)  # 创建超级用户  邮箱必填

8.校验密码(check_password())

#校验密码
request.user.check_password(old_password)

9.修改密码(set_password())

注意:修改密码的时候,一定要save保存,否则不会生效

request.user.set_password(new_password)
request.user.save()

10.退出登录(logout())

当调用该函数时,当前请求的session信息会全部清除,相当于request.session.flush().该用户即使没有登录,使用该函数也不会报错

auth.logout(request)

11.User对象的其他属性

# 在网站上线以前,将is_active和is_staff设置为False
is_active    # 禁止登录网站(用户还存在,封号)
is_staff    # 是否对网站有管理权限(能不能登录admin)

request.user.is_active = False
request.user.is_staff = False

三、自定义auth_user表

1.方法一:定义一个表模型,跟User一对一关联(不推荐使用)

from django.contrib.auth.models import User

class UserDetail(models.Model):
    phone=models.CharField(max_length=32)
    # 一对一跟auth_user表做关联
    # 如果是从外部引入的表模型,是不能加引号的
    # 如果加引号,只是在当前model找
    user=models.OneToOneField(to=User)

2.方法二:使用类的继承,继承(AbstractUser)

from django.contrib.auth.models import AbstractUser

class Userinfo(AbstractUser):
    # 千万不要跟原来表中的字段重复 只能创新
    phone = models.BigIntegerField()
    avatar = models.CharField(max_length=32)

注意:

1.一旦我们通过继承来实现扩展auth_user表,那么做数据库迁移,以后就没有auth_user这个表了,以后认证组件用的表就是UserInfo。原来使用 auth_user 表模型的地方全部要用新的表模型——UserInfo

2.告诉django不再使用auth默认的表,而是使用你自定义的表,需要在settings.py中设置
AUTH_USER_MODEL = ‘app01.Userinfo‘   ‘应用名.类名‘

原文地址:https://www.cnblogs.com/wangcuican/p/11587959.html

时间: 2024-11-06 07:47:00

Django框架(十一)——Auth模块的相关文章

django框架之auth模块

内容回顾    1. form表单组件        1. 常用字段            1. CharField()            2. ChoiceField()        2. 参数或配置            1. label="label标签显示的文本内容"            2. initial="默认值"            3. widget=forms.widgets.TextInput()   --> <input

四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

Django框架,models.py模块,数据库操作--创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, oracle,postgresql数据库. 1,django默认使用sqlite的数据库,默认自带sqlite的数据库驱动   引擎名称:django.db.backends.sqlite3 在全局配置文件settings.py可以看到确认配置使用的sqlite数据库 # Database # h

Django CSRF与auth模块

目录 Django CSRF与auth模块 CSRF CSRF相关装饰器 auth模块 扩展默认的auth_user表 Django CSRF与auth模块 CSRF FORM表单中怎么通过CSRF校验 只需要在form表单中写一个 {% csrf_token %} ajax通过asrf校验有三种方法 $.ajax({ url:'', type:'post', {#data:{'username':'yang'},#} //第一种方式 自己手动获取 {#data:{'username':'yan

Django框架之 auth认证模块

目录 一.Auth模块是什么 二.Auth模块的使用 2.1 User对象的属性 三.扩展auth_user表的字段 3.1 通过AbstractUser类来进行扩展 再次注意: 一.Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用

1205 CSRF跨站请求与django中的auth模块使用

目录 今日内容 昨日回顾 基于配置文件的编程思想 importlib模块 简单代码实现 跨站请求伪造csrf 1. 钓鱼网站 如何实现 模拟该现象的产生 2. 解决问题 解决 {% csrf_token %} 3. ajax如何解决 方式1 方式2 方式3 4. csrf相关的两个装饰器 1. 使用 2. 两个装饰器在CBV上的异同 django里settings源码剖析 django有两个配置文件 django auth模块 1. 是什么 2. 常用方法 2.1 创建用户 create_use

Django认证系统--Auth模块

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

django自关联,auth模块

一.自关联 写蛮好的一篇博客:https://www.cnblogs.com/Kingfan1993/p/9936541.html 1.一对多关联 1.表内自关联是指表内数据相关联的对象和表是相同字段,这样我们就直接用表内关联将外键关联设置成自身表的字段 2.例如,对于微博评论,每条评论都可能有子评论,但每条评论的字段内容应该都是相同的,并且每条评论都只有一个父评论,这就满足了一对多的情形,父评论id为关联字段,可以对应多个子评论 3.外键关联是在子评论中,有关联字段的是子评论,子评论查父评论是

Django中的auth模块

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

Django内置auth模块中login_required装饰器用于类视图的优雅方式

使用多继承 以及类似java中的静态代理模式 原理:OrderView.as_view()根据广度优先,调用的是LoginRequiredMixin中的as_view(cls, *args, **kwargs) 这时的cls=OrderView 接下来super(LoginRequiredMixin, cls).as_view(*args, **kwargs) 会调用到View类中的as_view()并返回一个视图函数 然后,用将这个视图函数作为参数传给Login_required()并返回经过

Django框架(十一):模板介绍、模板语言、模板继承、HTML转义

1. 模板介绍 1.1 模板的功能 产生html,控制页面上展示的内容.模板文件不仅仅是一个html文件. 模板文件包含两部分内容: 静态内容:css.js.html. 动态内容:用于动态去产生一些页面内容.通过模板语言来产生. 1.2 模板文件的使用 通常是在视图函数中使用模板产生html内容返回给客户端. 加载模板文件loader.get_template,获取模板文件的内容,产生一个模板对象. 定义模板上下文RequeseContext,给模板文件传递数据. 模板渲染产生html页面内容r