Django中的auth模块(用户认证)

auth模块

 一、auth模块机制

使用auth模块先导入auth模块

from django.contrib import auth django.contrib.auth中提供了许多方法

  auth模块是cookie和session的升级版,auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象,而有了auth模块之后就可以很轻松的去验证用户的登录信息是否存在于数据库中。除此之外,auth还对session做了一些封装,方便我们校验用户是否已登录。

 

 

用户登录后:会在django_session中session id,并且把用户信储存起来

 

二、auth模块方法

  1 authenticate() 

  提供了用户认证,即验证用户名以及密码是否正确,一般需要username password两个关键字参数。如果认证信息有效,会返回一个 User 对象。authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。当我们试图登陆一个从数据库中直接取出来不经过authenticate()User对象会报错的!

user = authenticate(username='someone',password='somepassword')

   2、login(HttpRequest, user)

  该函数接受一个HttpRequest对象,以及一个认证了的User对象;此函数使用django的session框架给某个已认证的用户附加上session id等信息。

def log_in(request):
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        # 验证成功,返回user对象,否则返回None
        user = auth.authenticate(username=user,password=pwd)
        if user:
            auth.login(request,user)    #session写操作
            return redirect("/index/")

    return render(request,"longin.html")

  3、logout(request) 注销用户

  该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。 

def log_out(request):
    auth.logout(request)
    return redirect("/login/")

  4 user对象的 is_authenticated

 

  要求:

 

    1 用户登陆后才能访问某些页面,

 

    2 如果用户没有登录就访问该页面的话直接跳到登录页面

 

    3 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

方法1:

直接用auth的is_authenticated方法验证

def my_view(request):
      if not request.user.is_authenticated:
            return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))


方法2:

根据request.user.username来验证,如果为空,则说明没有登录

def my_view(request):
      if not request.user.username:
            return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

方法3:

django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()

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

 

  若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' (这个值可以在settings文件中通过LOGIN_URL进行修改)。并传递  当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

 

eg:

def index(request):
    print(request.user)
    print(type(request.user))

    #方法一
    # if not request.user.id:
    #     return redirect("/login/")

    #方法二
    user = request.user
    if not user.is_authenticated:
        return redirect("/login/")
    return render(request,"index.html",locals())

  

 

 

  

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/mainstream/p/11113595.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值