django认证系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django认证系统相关的知识,希望对你有一定的参考价值。

Django认证系统同时处理认证和授权。简单地讲,认证验证一个用户是否它们声称的那个人,授权决定一个通过了认证的用户被允许做什么。这里的词语“认证”同时指代这两项任务。

认证系统包含:

  • 用户

  • 权限:二元(是/否)标志指示一个用户是否可以做一个特定的任务。

  • 组:对多个用户运用标签和权限的一种通用的方式。

  • 一个可配置的密码哈希系统

  • 用于登录用户或限制内容的表单和视图

  • 一个可插拔的后台系统



使用:

位于django.contrib.auth,配置在settings.py中的

INSTALLED_APPS = [

    ‘django.contrib.auth‘, #包含认证框架的核心和默认的模型。

    ‘django.contrib.contenttypes‘,] #是Django内容类型系统,它允许权限与你创建的模型关联。

MIDDLEWARE = [

    ‘django.contrib.sessions.middleware.SessionMiddleware‘,#管理请求之间的会话

    ‘django.contrib.auth.middleware.AuthenticationMiddleware‘,] #使用会话将用户与请求关联起来。

有了这些设置,运行manage.py migrate命令将为认证相关的模型创建必要的数据库表并为你的应用中定义的任意模型创建权限


登录:

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

注销:

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

只允许登录的用户访问:

方法一:

from django.conf import settings
from django.shortcuts import redirect
def my_view(request):
    if not request.user.is_authenticated():
        return redirect(‘%s?next=%s‘ % (settings.LOGIN_URL, request.path))
    # ...

方法二:

login_required装饰器

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

    主要完成两件事:

    1、如果用户没有登入,则重定向到settings.LOGIN_URL(需要设置),并将当前访问的绝对路径传递到查询字符串中。例如:/accounts/login/?next=/polls/3/。

    2、如果用户已经登入,则正常执行视图。视图的代码可以安全地假设用户已经登入。

from django.contrib.auth.decorators import login_required
@login_required(login_url=‘/accounts/login/‘)
def my_view(request):
    ...

注意,如果你没有指定login_url参数,你需要确保settings.LOGIN_URL与你的登录视图正确关联。例如,使用默认值,可以添加下面几行到你的URLconf中:

from django.contrib.auth import views as auth_views
url(r‘^accounts/login/$‘, auth_views.login),


跳转到登录之前的页面,即next=XXX页面:

from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect
@login_required(login_url=‘/accounts/login/‘)
def my_view(request):
    return redirect(request.GET.get(‘next‘) or ‘/‘)


以上是关于django认证系统的主要内容,如果未能解决你的问题,请参考以下文章

django扩展User认证系统

django 认证系统

Django用户认证

django认证系统

django认证系统 Authentication

django 认证系统--2