Django中的Users权限系统 2011-05-21 15:04:33

分类: 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 权限的更多相关文章

  1. Django万能权限框架组件

    业务场景分析 假设我们在开发一个培训机构的 客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下 客户管理 销售人员可以录入客户信息,对客户进行跟踪,为客户办理报名手续 ...

  2. [Django]用户权限学习系列之权限管理界面实现

    本系列前三章: http://www.cnblogs.com/CQ-LQJ/p/5604331.htmlPermission权限基本操作指令 http://www.cnblogs.com/CQ-LQJ ...

  3. [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...

  4. [Django]用户权限学习系列之User权限基本操作指令

    针对Django 后台自带的用户管理系统,虽说感觉还可以,但是为了方便用户一些操作,特别设计自定义的用户权限管理系统. 在制作权限页面前,首先需要了解权限和用户配置权限的指令,上章讲到权限的添加,删除 ...

  5. [Django]用户权限学习系列之Permission权限基本操作指令

    若需建立py文件进行测试,则在文件开始加入以下代码即可 #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODU ...

  6. 【django之权限组件】

    一.需求分析 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,一个角色拥有若干权限.这样,就构造成& ...

  7. django用户权限操作

    第一步:创建数据库和超级管理员,为了比较方便使用(里面有些的是没用的),额外新增 chioces , per_method , argument_list # 用户权限# 建立一个权限表,将映射关系存 ...

  8. Django之权限管理

    Django权限管理之初步完整版 项目背景:这是一个权限管理系统(给一些角色和他们的权限指URL和页面可以删除的按钮比如:增删改查) 使用到了中间件,和初始化权限,使用了admin的后台管理系统. 我 ...

  9. django通用权限控制框架

    在web项目中根据不同的用户肯定会限制其不同的权限,利用以下模块可以满足日常几乎所有的权限控制 permission_hook.py  # 自定义权限控制,必须返回True/false  ,True表 ...

随机推荐

  1. jquery 数组的操作

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  2. 更改配置:远程访问gitlab的postgresql数据库

    作为这篇文章的补充: 将gitlab中的postgresql数据库开通远程访问 https://www.cnblogs.com/andy9468/p/10609682.html 替代(二)中的2.3. ...

  3. python-面向对象-07_继承

    继承 目标 单继承 多继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不 ...

  4. pycharm快捷键帮助文档Keymap Reference

    前面我们已经安装了pycharm,为了提升效率,我们一般会用到快捷键操作,pycharm有哪些快捷键呢?Pycharm中打开Help->Keymap Reference可查看默认快捷键帮助文档, ...

  5. Sql批量修改帝国cms文章发布时间(需unix时间,否则会变为1970-01-01)

    在迁移网站时,有时我们需要将帝国cms文章发表时间批量修改为当前时间,在帝国cms后台→系统设置→备份与恢复数据→执行sql语句: update phome_ecms_news set newstim ...

  6. 帝国cms用户密码忘记怎么修改

    帝国CMS7.2忘记后台密码怎么找回呢?有时候经常会忘记用户密码,我们可以通过修改数据库的值来初始化密码,下面就和ytkah一起来操作吧 1:进入phpmyadmin 2:找到 phome_enews ...

  7. SQL Server 2016 发送邮件功能

    --1 安装好SQL Server 2016 --2 安装.Net 3.5 由于SQL Server 2016 安装不提示强制安装.NET 3.5 但是还是需要安装,数据库发送邮件会使用.NET 3. ...

  8. Centos的yum源更换为国内的阿里云源

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  9. Python3学习之路~2.7 文件操作

    对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 Somehow, it seems the love I knew was always the ...

  10. 如何卸载docker

    1.卸载 (1)yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ d ...