【Python】Django用户、认证、鉴权模块使用
此文是总结Django官方网站里面的Document的文章 User authentication in Django http://www.djangoproject.com/documentation/authentication/
该模块由 用户(Users) 权限(Permissions) 组(Groups) 消息(Messages)
这些从字面上也都很好的理解,但是我对消息(Messages)还不是很理解…………
1、安装 1)将'django.contrib.auth'添加到Setting.py的INSTALLED_APPS 中 2)安装数据库 manage.py syncdb. 其实用户权限模块是Django自己已经写好的app,所以他也具有自身的Models,所以需要同步数据库。
2、User 1)属性 其中他包含User类,他具有以下字段 username,first_name,last_name,email,password,is_staff(是否具有进入网站管理权限), is_active,is_superuser,last_login,date_joined.
这是Django自带的User的基本的信息,如果你要使用该权限模块,就必须要使用他的User类, 但是通常情况下,我们的用户信息还会有其他的属性,这时我们可以再增加一类来扩展,该类和User的关系是OneToOne。 如: #这是china-django中的代码















2)方法 这里列举几个主要的方法 is_anonymous():是否为匿名用户,如果你已经login,则这个方法返回始终为false. is_authenticated():是否通过验证,也就是通过用户名和密码判断该用户是否存在. get_group_permissions():得到所有该用户所属组别的权限. get_all_permissions():得到该用户所有的权限. has_perm(perm):判断用户是否具有特定权限,perm的格式是appname.codename. email_user(subject, message, from_email=None):给某用户发送邮件
3) AnonymousUser AnonymousUser是继承自User接口,但是和User有不同处: id属性为None is_anonymous() 返回始终为True is_authenticated() 返回始终为False has_perm() 返回始终为False set_password(), check_password(), save(), delete(), set_groups()和set_permissions() 都会触发 NotImplementedError错误
3、User的验证 1)登陆(Login)













首先我们要验证这个用户,然后再登陆,登陆成功后,我们可以通过request.user 来得到当前登陆的用户对象。
2)注销(Logout)







3)限制非法用户访问 最普通的方法是通过request.user.is_authenticated()来判断









另外有一快捷的方法login_required








这样当你访问my_view的时候,就需要用户需要通过验证.若不通过则跳转到 /accounts/login/?next=/polls/3/ 并将当前访问的页面作为他的一个参数,并且传递三个Context变量 form 一个FormWrapper 对象用来重构登陆表单 next 就是你访问的当前页面 site_name 当前站点名称,在Setting.py中设置SITE_ID的值
另外,我们还需要在你的urls里面配置/accounts/login路径 下面有两种两种,不同的是使用不同的模版,第一种默认使用registration/login.html 模版,第二种方式是我们自定义模版



一个login.html模版的实例:




















4)用户是否有权限访问
当我们创建了一个带有class Admin:内类的类后,会自动add, create 和 delete三种权限,不过我们也可以自己定义权限。 如下:









这样我们为USCitizen类定义了三种自定义的权限,其中第一项是codename,第二项是discription。
当我们定义好权限后,我们可以通过user.has_perm来判断是否具有权限




has_perm的参数应该是appname(packname) + . + codename
还有一种更简便的方式,如下: @user_passes_test(lambda u: u.has_perm('polls.can_vote')) 这样如果该用户没有权限,则自动跳转到/accounts/login/,也可以自定义跳转 @user_passes_test(lambda u: u.has_perm('polls.can_vote'), login_url='/login/')
4、template中的用户验证 Users





Permissions {{ perms.foo }},一个已经登陆的用户对foo的app只要有任何的权限,{{ perms.foo }}就会等于True,反之为False {{ perms.foo.can_vote }}, 这个很清楚了... 实例如下:













5、authentication backends Django中队用户的验证都是通过自身的模块,也可以使用其他的模块。 默认的AUTHENTICATION_BACKENDS 是 ('django.contrib.auth.backends.ModelBackend',)
我们可以自己写一个不同的用户验证方式,但必须具有get_user 和authenticate方法 如:



































这个时候我们需要修改Setting AUTHENTICATION_BACKENDS = ( 'sputnik.backends.ldapBackend.LDAPBackend', )
这里还有一片关于Authentication Backends的文章
LDAP Authentication in Django with Backends
全文结束,谈不上总结,因为缺少我的体会和心得,也谈不上翻译,因为my englishi is Poor.
See You!!!
参考资料:
[django]总结Django中的用户权限模块:http://maplye.iteye.com/blog/448960
[ios]将 django.contrib.auth.views.login 设置为 csrf_exempt:http://www.itstrike.cn/Question/85f57468-58d3-4a40-89d3-c865b63b0c02.html
【Python】Django用户、认证、鉴权模块使用的更多相关文章
- nginx 请求文件 进行用户认证/鉴权: internal(限制为内部调用)
在进行WEB开发时, 必然会遇到向用户返回文件的场景(如图片, 文档等等), 当返回的文件较小时, 我们可以直接通过接口以数据流的形式向前台返回, 因为文件较小, 因此也不会太过于影响响应速度及服务器 ...
- Django 2.0 学习(17):Django 用户认证(auth模块)
Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...
- Django 用户认证及OneToOneField
Django 用户认证如果自己不想写 就可以用django自带的认证 首选导入模块 models.py #!/usr/bin/env python #_*_ coding:utf8 _*_ from ...
- Django的认证系统—auth模块
Django的认证系统 auth模块的知识点总结: 1. 创建超级用户 python manage.py createsuperuser from django.contrib import auth ...
- django用户认证系统——基本设置1
网站提供登录.注册等用户认证功能是一个常见的需求.因此,Django 提供了一套功能完整的.灵活的.易于拓展的用户认证系统:django.contrib.auth.在本教程中,我将向你展示 auth ...
- Spring Security 接口认证鉴权入门实践指南
目录 前言 SpringBoot 示例 SpringBoot pom.xml SpringBoot application.yml SpringBoot IndexController SpringB ...
- Mongodb 认证鉴权那点事
[TOC] 一.Mongodb 的权限管理 认识权限管理,说明主要概念及关系 与大多数数据库一样,Mongodb同样提供了一套权限管理机制. 为了体验Mongodb 的权限管理,我们找一台已经安装好的 ...
- 基于Springboot集成security、oauth2实现认证鉴权、资源管理
1.Oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAu ...
- django用户认证系统——拓展 User 模型
Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...
- django——用户认证组件
用户认证 auth模块 1 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenti ...
随机推荐
- windbg调试相关命令
windbg 查找函数:x exe!main* 条件断点打印字符:bp 7199a2b0 ".printf \"message:%ma\", poi(@esp+8);.e ...
- 洛谷P2234 [HNOI2002] 营业额统计 [splay]
题目传送门 营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...
- 【Python初级】StringIO和BytesIO读写操作的小思考
from io import StringIO; f = StringIO(); f.write('Hello World'); s = f.readline(); print s; 上面这种方法“无 ...
- python3 django 安装
参考https://www.cnblogs.com/yuyang26/p/7411269.html 前提条件:python3.x环境 windows 步骤1 pip install Django==2 ...
- [BZOJ2878][NOI2012]迷失游乐园(环套树DP+概率)
推荐讲解:https://www.cnblogs.com/Tunix/p/4561493.html 首先考虑树的情况,就是经典的树上概率DP.先DP出down表示从这个点向儿子走能走的期望长度,再DP ...
- 在windows上安装和启动Elasticseach、Kibana
写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...
- UESTC 2015dp专题 j 男神的约会 bfs
男神的约会 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descri ...
- 【转】Internet连接正常但是没有网络,禁用以太网以后再重新启动就可以使用了,原因是什么?
只是粘贴别人的答案,觉得有理,就放在博客里方便以后再学习~ 这个和网络中hdcp服务有关,网卡要在网路中通讯就必须要网络设备一般是路由器或者交换机分配地址,只有给了你电脑门牌号,信件投递能准确无误.你 ...
- serial-input, parallel-output (SIPO) chip : TPIC6595 , 74HC164 , 74HC4094 or 74HC595
http://electronics.stackexchange.com/questions/6676/which-sipo-chip-is-better-74hc4094-or-74hc595-or ...
- 【PHP内存泄漏案例】PHP对象递归引用造成内存泄漏
[案例一] 作者:老王 如果PHP对象存在递归引用,就会出现内存泄漏.这个Bug在PHP里已经存在很久很久了,先让我们来重现这个Bug,代码如下: <?php class Foo { funct ...