首页 > 其他 > 详细

auth模块

时间:2020-07-15 00:31:36      阅读:33      评论:0      收藏:0      [点我收藏+]

 

 

auth是django自带的一个认证模块,主要用在用户登录。

下面进行简单的介绍几种方法:

authenticate,login(HttpRequest,user),create_superuser(),logout(request),create_user(),login_requierd(),set_password(password),
check_password(password),is_authenticated(),

 

 

auth的导入

from django.contrib import auth

 

authenticate()   # 验证用户名密码是否正确,认证成功后返回user对象

user = authenticate(username=usernamer,password=password)

 

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

 

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

若用户没有登录,则会跳转到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 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。

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

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

 

 

扩展默认的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模块

原文:https://www.cnblogs.com/tuzaizi/p/13301888.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!