文档章节

Django内置的认证系统

ZeroBit
 ZeroBit
发布于 08/13 16:59
字数 945
阅读 3
收藏 0

auth模块

from django.contrib import auth

authenticate()方法

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

用法:

user = auth.authenticate(request,username='theuser',password='thepassword')

login(HttpRequest, user)方法

  • 该函数接受一个HttpRequest对象,以及一个经过认证的User对象。
  • 该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据

用法:

from django.contrib.auth import authenticate, login

def my_view(request):
  username = request.POST['username']
  password = request.POST['password']
  user = authenticate(request, username=username, password=password)
  if user is not None:
    login(request, user)
    # Redirect to a success page.
    ...
  else:
    # Return an 'invalid login' error message.
    ...

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

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。
ok = user.check_password('密码')

set_password(password)方法

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

用法:

user.set_password(password='')
user.save()

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

User对象的属性

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

扩展默认的auth_user表

可以通过继承内置的 AbstractUser 类,来定义一个自己的Model类。这样既能根据项目需求灵活的设计用户表,又能使用Django强大的认证系统了。

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

    def __str__(self):
        return self.username

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

写法如下:

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

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

© 著作权归作者所有

ZeroBit

ZeroBit

粉丝 1
博文 63
码字总数 62103
作品 0
南宁
私信 提问
使用django-mama-cas快速搭建CAS服务

当公司有多条产品线,或者有多个不同的应用的时候,每次都做登录是个非常烦人的事情。(原谅我没有从SSO的角度看这个问题。。对我来说能偷懒少写点东西最实在)。为什么需要每次都做个登录?...

小埋酱
2016/11/27
1K
8
django 1.8 官方文档翻译: 13-1-1 Django 中的用户认证

Django 中的用户认证 Django从开始就带有一个用户认证系统。它处理用户账号、组、权限以及基于cookie的用户会话。本节文档解释默认的实现如何直接使用,以及如何扩展和定制它以适合你项目的需...

apachecn_飞龙
2015/08/30
0
0
Django 扩展User 编写自己的认证后台

前言 今天用django写web平台,需要用到账号管理,当然第一时间就想到Django的强大的User模型,各种权限的控制,session的管理都速度解决了。但是Django的管理系统与自己的后台数据库User对象是...

snakelxc
2013/07/17
10.7K
5
Django的用户认证----介绍

Django自带了一个用户认证系统。它处理用户账户、组、权限和基于cookie的用户会话。 概括 Django认证系统处理认证和授权。简单的说,认证是验证一个用户被声明为谁,授权是确定一个认证的用户...

844365389
2018/06/27
0
0
详解Django的CSRF认证

1.csrf原理 2.Django中的CSRF中间件 首先,我们知道Django中间件作用于整个项目。 在一个项目中,如果想对全局所有视图函数或视图类起作用时,就可以在中间件中实现,比如想实现用户登录判断...

任平生78
2018/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

gitlab重置管理员密码

登录gitlab服务器 [root@localhost bin]# sudo gitlab-rails console productionLoading production environment (Rails 5.2.3)irb(main):001:0> u = User.where(email: 'admin@example.co......

King华仔o0
4分钟前
0
0
F5公司的负载均衡解决方案在银行中起什么作用?

  F5公司的负载均衡解决方案在银行中起什么作用?今天我们就来探讨一下这个问题。   我是民生银行的,我所在银行采用负载均衡解决方案实现了同城双活数据中心的业务部署和数据中心之间的...

梅丽莎好
16分钟前
1
0
浅谈梯子游戏三门打法技巧走势攻略教程(学会稳稳上岸)

摘要:那么下面我就给大家总结一下技巧和玩法!一、玩梯子的前期准备:1,最重要是zi金准备,提前做好ben金准备能保证自己的zi金链不断,稳中求胜。2,其次是止sun底线,风险控制一定要懂得舍弃,买彩...

V_6696089
49分钟前
8
0
今天发布 需求登记表,不戴眼镜开发的成果

今天是不戴眼镜调理第八天 之前带五百度眼睛0.5 现在是做了三次调理,通常,成人比青少年要慢些 明天正式学习 调理技术 最近不怎么开电脑做开发,发现时间多了许多 虽然想把开发缓一阵子,但...

蒋志祥
57分钟前
4
0
Linux 之docker部署,走过的那些坑

初次使用docker, 多有不足,这里把坑一点点的记下来 概念篇 docker 是什么? 太多文字不同,书读的少, 不懂大大道理; 在我的理解, 它就是个沙箱环境; 在linux中 ,独立进程, 有着自己的小世界 使...

莫库什勒
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部