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认证系统的主要内容,如果未能解决你的问题,请参考以下文章