django user 权限
分类: Python/Ruby
1.用户
2.权限(判断一个用户是否有特定的操作权限yes/no)
3.组
4.消息A simple way to queue messages for given users
安装
必须要INSTALLED_APPS = (
'django.contrib.auth',)
然后运行manage.py syncdb 将相应的表创建起来
用户Users
class models.User
具备了以下的字段属性
username
Required. 30 characters or fewer. Alphanumeric characters only
(letters, digits and underscores).
first_name
Optional. 30 characters or fewer.
last_name
Optional. 30 characters or fewer.
email
Optional. E-mail address.
password
Required. A hash of, and metadata about, the password
is_staff
Boolean. Designates whether this user can access the admin site.
is_active
Boolean. Designates whether this user account should be considered active.
Set this flag to False instead of deleting accounts.
is_superuser
Boolean. Designates that this user has all permissions without explicitly assigning them.
last_login
A datetime of the user’s last login. Is set to the current date/time by default.
这个表示的是auth_user表里面的字段。系统自带的用户表!
其实打开其自带的表发现其权限是比较简单的。
用户表、用户组、用户-组关联、日志表、组-权限表、用户-权限表、权限表
发现用户表与组还有权限是多对多关联。
所以可以有这样的ORM层方法
myuser.groups = [group_list]
myuser.groups.add(group, group, ...)
myuser.groups.remove(group, group, ...)
myuser.groups.clear() 因为是多对多的models关系
myuser.user_permissions = [permission_list]
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear()
这个类的自带的model里面的方法
is_anonymous()
is_authenticated()
get_full_name()
set_password(raw_password)
check_password(raw_password)
set_unusable_password()
has_usable_password()
get_group_permissions()
get_all_permissions()
has_perm(perm)
has_module_perms(package_name)
get_and_delete_messages()
email_user(subject, message, from_email=None)
get_profile()
管理的方法
create_user(username, email, password=None)
make_random_password(length=10, allowed_chars='RSTUVWXYZ23456789')
使用示例
1.创建用户
>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
# At this point, user is a User object that has already been saved
# to the database. You can continue to change its attributes
# if you want to change other fields.
>>> user.is_staff = True
>>> user.save()
2.修改密码
>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username__exact='john')
>>> u.set_password('new password')
>>> u.save()
创建超级管理员
manage.py createsuperuser --username=joe --email=joe@example.com
现在应用它来做WEB的校验
首先必须要安装两个中间件
SessionMiddleware and AuthenticationMiddleware
安装好了之后就可以应用request.user在views里面了如果用户未登录那
request.user就是一个匿名用户
if request.user.is_authenticated():
# Do something for authenticated users.认证过的用户如何处理
else:
# Do something for anonymous users.匿名用户如何处理
def index(request):
common_dict={
"sitename":"我的网站测试中。。。",
"sitedomain":"127.0.0.1",
'app_label':'',
}
content='fffffffff'
username='amouysuser'
if request.user.is_authenticated():
username = request.session.get('username', None)
content=' 认证的用户'
else:
content=' 匿名用户'
return render_to_response('index.html',common_dict)
那用户如何进行校验是不是合法用户呢?
可以使用authenticate() 方法
from django.contrib.auth import authenticate
user = authenticate(username='john', password='secret') #校验处理
if user is not None:#表示校验成功了
if user.is_active:
print "You provided a correct username and password!"
else:
print "Your account has been disabled!"
else:
print "Your username and password were incorrect."
调用两个示例。先校验是不是合法用户然后调用login方法存储用户的ID到session里面
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.
Note that logout() doesn't throw any errors if the user wasn't logged in.
一般后台管理的话都需要用户事先登录过系统这样怎么保证用户的每一个方法都是在登录状态下呢
原始方法
def my_view(request):
if not request.user.is_authenticated():
return render_to_response('myapp/login_error.html')
做一个判断
高级的一种做法
做一个装饰器login_required()
from django.contrib.auth.decorators import login_required
def my_view(request):
# ...
my_view = login_required(my_view) 装饰器实现
还可以这样
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
装饰器还可以带参数
from django.contrib.auth.decorators import login_required
@login_required(redirect_field_name='redirect_to')
def my_view(request):
# ...
表示一旦失败抛到哪个URL去
其他的内建视图
django.contrib.auth.views.logout_then_login()
直接退出到登录页
感受:是不是可以不用自己再做一套权限了直接用它了得了
django user 权限的更多相关文章
- Django万能权限框架组件
业务场景分析 假设我们在开发一个培训机构的 客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下 客户管理 销售人员可以录入客户信息,对客户进行跟踪,为客户办理报名手续 ...
- [Django]用户权限学习系列之权限管理界面实现
本系列前三章: http://www.cnblogs.com/CQ-LQJ/p/5604331.htmlPermission权限基本操作指令 http://www.cnblogs.com/CQ-LQJ ...
- [Django]用户权限学习系列之设计自有权限管理系统设计思路
若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...
- [Django]用户权限学习系列之User权限基本操作指令
针对Django 后台自带的用户管理系统,虽说感觉还可以,但是为了方便用户一些操作,特别设计自定义的用户权限管理系统. 在制作权限页面前,首先需要了解权限和用户配置权限的指令,上章讲到权限的添加,删除 ...
- [Django]用户权限学习系列之Permission权限基本操作指令
若需建立py文件进行测试,则在文件开始加入以下代码即可 #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODU ...
- 【django之权限组件】
一.需求分析 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,一个角色拥有若干权限.这样,就构造成& ...
- django用户权限操作
第一步:创建数据库和超级管理员,为了比较方便使用(里面有些的是没用的),额外新增 chioces , per_method , argument_list # 用户权限# 建立一个权限表,将映射关系存 ...
- Django之权限管理
Django权限管理之初步完整版 项目背景:这是一个权限管理系统(给一些角色和他们的权限指URL和页面可以删除的按钮比如:增删改查) 使用到了中间件,和初始化权限,使用了admin的后台管理系统. 我 ...
- django通用权限控制框架
在web项目中根据不同的用户肯定会限制其不同的权限,利用以下模块可以满足日常几乎所有的权限控制 permission_hook.py # 自定义权限控制,必须返回True/false ,True表 ...
随机推荐
- 压缩维度oj P1173+P1174+P1164
今天在洛谷上刷dp,忽然冒出一道求最大字段和的问题,然后忘了瞬间忘了这是dp,几分钟一个贪心出来了成功ac,忽然想起自己在作dp,于是乖乖刷dp. 这个可能很多人都会但是今天有4种解法哦,本人只尝试了 ...
- iOS将excel转plist
iOS将excel转plist 先把excel用Numbers打开,转换成CSV,然后新建一个工程,写下面的代码: - (void)viewDidLoad { [super viewDidLoad]; ...
- 【socket-python应用】控制泓格ET-7044通信模块输入DI输出DO
socket-python应用:控制泓格ET-7044通信模块输入DI输出DO 本节主要内容: 1.socket-python建立TCP通信 2.配合泓格通信模块说明书,查看输入输出寄存器地址,发送指 ...
- 运行vs2010,Debug时发生“无法启动程序"http://localhost:xxx",系统找不到指定文件
网上参考回答:应该是Visual Studio不能启动浏览器导致的结果!第一种结果是没有设置默认的浏览器,第二种情况是注册表被修改了! 我的尝试: 1.在启动处点击下三角,选择“使用以下浏览器浏览” ...
- Spring Security 4.2.3 Filters 解析
一. 熟悉一个模块的最快方法 1. 配置logback文件,打印相应的debug信息 2. 根据相应的信息,打断点查看执行结果 二.spring 使用 DelegatingFilterProxy 管理 ...
- JavaScript学习(二)
比如isNaN("100")会返回true 注意:parseInt()的参数必须以数字开头
- explain之key_len计算
通常在优化SQL查询的时候,我们都会使用explain分析SQL执行计划,通常来说当用到组合索引的时候我们如何判断索引完全用上呢?当然高手看看表结构及SQL语句就知道到底用到了几个字段,对于不熟悉的同 ...
- 6个laravel常用目录路径函数
public_path() public_path函数返回public目录的绝对路径:$path = public_path(); base_path() base_path函数返回项目根目录的绝对路 ...
- css继承样式怎么控制?用选择器
css样式继承性是指下级的样式属性会继承上级的属性,通俗点讲是儿子来继承父亲的属性,比如li会继承ul的属性.css继承原理是我们设置上级(父级)的CSS样式,上级(父级)及以下的子级(下级)都具有此 ...
- oracle安装---yum.sh
!#/bin/bash yum install binutils* -yyum install compat* -yyum install elfutils* -yyum install gcc* - ...