导读:今天首席CTO笔记来给各位分享关于django怎么管理用户的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
请教Django的User/Group/Permission管理
Django的用户权限管理也是业界比较通用的RBAC(Role-Based Access Control)的权限控制模型。其实很简单:看一个用户是否有权限访问某页面(view),就看这个用户是否拥有访问这个页面所必需的角色(Role)。而一个用户的所拥有的所有的角色有两个途径获得,1、是直接赋给这个用户的角色,2、是这个用户所属的所有小组所拥有的角色,这个用户间接地就拥有了这些权限角色。
如何利用Django-auth做用户认证
首先,让我们开始创建项目和APP,前面我也很详细的说明了如何创建项目和APP。
创建数据库,和相关用户的权限。
root@CD-FTP-VPN:/opt/jastme# tree
.
|-- jastme
| |-- __init__.py
| |-- __init__.pyc
| |-- settings.py
| |-- settings.pyc
| |-- urls.py
| |-- urls.pyc
| |-- wsgi.py
| `-- wsgi.pyc
|-- login
| |-- admin.py
| |-- __init__.py
| |-- __init__.pyc
| |-- models.py
| |-- models.pyc
| |-- tests.py
| |-- views.py
| `-- views.pyc
|-- manage.py
`-- start.sh
2 directories, 18 files
root@CD-FTP-VPN:/opt/jastme#
使用python manage.py syncdb 来创建一个叫jastme,密码为jastme的超级用户。我们可以用Django-admin来管理这些用户。
首先看看setting.py
root@CD-FTP-VPN:/opt/jastme# more jastme/settings.py
"""
Django settings for jastme project.
For more information on this file, see
For the full list of settings and their values, see
"""
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# Quick-start development settings - unsuitable for production
# See
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'r!1=i^3qhwglr(zf*9n*ii!b_oy2h()ics(6(de3wuo0-oh8h'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
TEMPLATE_DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = (
# 'django.contrib.admin', #注释掉admin
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', #这个中间件是防止跨站攻击的。有意思的朋友可以去搜索下。
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'jastme.urls'
WSGI_APPLICATION = 'jastme.wsgi.application'
# Database
#
DATABASES = { #数据库的相关配置
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'jastme',
'USER':'jastme',
'PASSWORD':'jastme',
'HOST':'localhost',
'PORT':'3306',
}
}
# Internationalization
#
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
#
STATIC_URL = '/static/'
TEMPLATE_DIRS =( #模板的路径
'/var/www/jastme/',
)
views.py
root@CD-FTP-VPN:/opt/jastme# more login/views.py
from django.shortcuts import render
from django.contrib import auth
# Create your views here.
from django.shortcuts import render_to_response
from django.contrib.auth import authenticate, login
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse,HttpResponseRedirect
from django.contrib.auth.decorators import login_required
def my_login(request): #我们自定义一个函数,这个函数名字一定不要写成login,因为Django有有login模块。
if request.method == 'POST': #我们使用POST的方法来获取从HTML传递过来的表单内容
username = request.POST['username'] #获取账号和密码
password = request.POST['password']
user = authenticate(username=username, password=password) #我们用user来实例化 authenticate(username=username, password=password)
if user is not None: #用户名不为空
if user.is_active: #为激活用户
login(request, user) #调用django.contrib.auth中的login函数,可以具体去看看源码
return HttpResponseRedirect('/main') #登陆成功就重定向到主页
else:
login_error = 'login error.'
return render_to_response('login.html', {'login_error' : login_error, 'is_display' : 'display:block'}) #失败则返回登陆页面
return render_to_response('login.html', {'is_display' : 'display:none'}) #同理
@login_required #调用了这个修饰器,就可以让这个页面在成功登陆后才能访问
def main(request):
return HttpResponse('login sucess') #直接返回这个字符串
再看看urls.py
root@CD-FTP-VPN:/opt/jastme# more jastme/urls.py
from django.conf.urls import patterns, include, url
#from django.contrib import admin
from login.views import my_login,main #这里是我们导入的项目中的views.py中的模块,就是我们自己写的函数
#from django.contrib.auth.views import login, logout
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'jastme.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
# url(r'^admin/', include(admin.site.urls)),
(r'^main/$',main),
(r'^login/$',my_login),
)
login.html
root@CD-FTP-VPN:/var/www/jastme# pwd
/var/www/jastme
root@CD-FTP-VPN:/var/www/jastme# ls
login.html
form action="" method="POST" #在此页面以POST的方式来提交参数
input type=text name="username"
input type=text name="password"
input type=submit value="send"
/form
django admin实现后台多用户隔离
很多人说django自带的后台只能用来做管理,其实简单的多用户发布需求还是可以用自带的admin模块来做的。核心是使用 request.user 获取当前登录用户,然后根据用户筛选后台显示内容。
复杂的用户权限管理使用django-guardian等组件
模拟了一个根据用户每天输入的数据,生成可视化报表的项目。预想的是根据不同的报表类型,预设不同的数据模板。前端请求的时候发送报表类型和数据范围用户等信息到后端。后端返回数据后交给前端echart处理。
花了整个下午才完成基本的后台,因为目的是实现多用户,后面的部分有空再去写。
![HTZMQ)4(7BXHAD`K~F]QSLR.png]( )
创建和修改model时,会显示关联的外键的所有的值,比如显示出所有的用户来了。使用 get_form 方法隐藏外键字段(例如user), save_model 设置user默认值,也别忘了列表页的筛选 get_queryset
django1.9.5怎么建立超级用户?
首先我们要新建一个用户名,用来登陆管理网站,可以使用如下命令:
python manage.py createsuperuser
输入想要使用的用户名:
Username (leave blank to use 'administrator'): user01
输入email:
Email address: (在这里输入你的自己的邮箱帐号)
输入密码,需要输入两次,并且输入密码时不会显示出来:
Password:
Password (again):
当两次密码都相同的时候,就会提示超级帐号创建成功。
Superuser created successfully.
运行服务:
python manage.py runserver
python创建并打开管理员账户
在 Python web 应用中,通常使用框架(如 Django、Flask 等)来管理用户账号,因此创建超级管理员账号的方式可能会因框架而异。下面以 Django 为例,介绍创建超级管理员账号的方法。首先,你需要安装 Django 并创建一个 Django 项目。然后,你可以使用以下命令创建超级管理员账号:python manage.py createsuperuser运行该命令后,Django 会提示你输入超级管理员账号的用户名、邮箱地址和密码。输入完成后,Django 会为你创建一个超级管理员账号。
有大拿在Django中用过LDAP来管理用户吗
使用环境:
python 2.7
django 1.3
python-ldap-2.4.3
django-auth-ldap-1.0.12
settings.py:
import ldap
from django_auth_ldap.config import LDAPSearch,PosixGroupType
AUTH_LDAP_SERVER_URI = 'ldap://*.*.*.*:389' #服务器URI
AUTH_LDAP_BIND_DN = "cn=admin,dc=qfei,dc=com"
AUTH_LDAP_BIND_PASSWORD = "123456"
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=staff,dc=qfei,dc=com", #查询用户
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=staff,dc=qfei,dc=com", #查找组
ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)"
)
AUTH_LDAP_GROUP_TYPE = PosixGroupType(name_attr="cn")
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_staff": "cn=tech,ou=Tech,ou=Staff,dc=qfei,dc=com",
"is_active": "cn=tech,ou=Tech,ou=Staff,dc=qfei,dc=com",
"is_superuser": "cn=tech,ou=Tech,ou=Staff,dc=qfei,dc=com", #验证 Django 的 User 的is_staff,is_active,is_superuser
}
AUTH_LDAP_USER_ATTR_MAP = { #把LDAP中用户条目的属性 映射到 Django 的User
"username":"uid",
"password":"userPassword",
"first_name": "givenName",
"last_name": "sn",
"email":"mail",
}
AUTH_LDAP_MIRROR_GROUPS=True #注意 此为重点:当这个值为 True, LDAP的用户条目映射并创建 Django User 的时候,会自动映创建Group
AUTH_LDAP_ALWAYS_UPDATE_USER = True #是否每次都从LDAP 把用户信息 更新到 Django 的User
AUTH_LDAP_FIND_GROUP_PERMS = True #如果为True, LDAPBackend将提供基于LDAP组身份验证的用户属于的组的权限
AUTH_LDAP_CACHE_GROUPS = True #如果为True,LDAP组成员将使用Django的缓存框架。
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 1800 #缓存时长
AUTHENTICATION_BACKENDS=( #设置使用 LDAPBackend
"django_auth_ldap.backend.LDAPBackend",
"django.contrib.auth.backends.ModelBackend",
)
注:
1,需要创建 django 的 User Group 表
2,当LDAP条目 同步至 django User,Group 后,同关系型数据库一样 操作 数据即可
不足:暂时 未实现 django 表 至LDAP 的数据双向同步
结语:以上就是首席CTO笔记为大家介绍的关于django怎么管理用户的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。
以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!
版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。