Django用户认证系统 Web请求中的认证解析

本文介绍了Django用户认证系统,包括login、logout、password_change等功能的使用,以及内置视图、模板和表单的详细说明,帮助开发者理解如何处理Web请求中的用户认证。
摘要由CSDN通过智能技术生成

在每个Web请求中都提供一个 request.user
属性来表示当前用户。如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例。

你可以通过is_authenticated()来区分,例如:


    if request.user.is_authenticated():
      # Do something for authenticated users.
    else:
      # Do something for anonymous users.

登陆login **
**

login()

登陆函数,需要一个HttpRequest对象和一个User对象作参数。login()使用django的session框架,将User的id存储在session中。

同时使用authenticate()和login():


    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:
        if user.is_active:
          login(request, user)
          # Redirect to a success page.
        else:
          # Return a 'disabled account' error message
      else:
        # Return an 'invalid login' error message.

如果不知道密码,login方法:


    user=MyUser.objects.get(...)
    user.backend = 'django.contrib.auth.backends.ModelBackend'
    login(request,user)

**退出登录logout
**

logout()

使用HttpRequest对象为参数,无返回值。例如:


    from django.contrib.auth import logout
    def logout_view(request):
      logout(request)
      # Redirect to a success page.

限制访问

The raw way

使用 request.user.is_authenticated()

再定向:


    from django.shortcuts import redirect 
    def my_view(request):
      if not request.user.is_authenticated():
        return redirect('/login/?next=%s' % request.path)
      # ...

或者:


    from django.shortcuts import render
    def my_view(request):
      if not request.user.is_authenticated():
        return render(request, 'myapp/login_error.html')
      # ...

使用装饰器login_required

login_required([redirect_field_name=REDIRECT_FIELD_NAME, login_url=None]


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

如果用户未登录,则重定向到 settings.LOGIN_URL,并将现在的url相对路径构成一个next做key的查询字符对附加到
settings.LOGIN_URL后面去:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值