Django 13 admin和auth系统、权限问题
一、auth系统
auth系统的数据表

#User:User是auth模块中维护用户信息的关系模式(继承了models.Model), 数据库中该表被命名为auth_user.
#Group:User对象中有一个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
#Permission:Django的auth系统提供了模型级的权限控制, 即可以检查用户是否对某个数据表拥有增(add), 改(change), 删(delete)权限。
User模型常用属性和方法
username #用户名
email #邮箱
groups #多对多的组
user_permissions #多对多的用户权限
is_staff #是否是admin的管理员
is_active #是否激活,判断该用户是否可用
is_superuser #是否是超级用户
last_login #上次登录时间
dete_joined #注册时间
is_authenticated #是否验证通过了
is_anonymous #是否是匿名用户
set_password(raw_password) #设置密码,传原生密码进去
check_password(raw_password) #检查密码
has_perm(perm) #判断用户是否有某个权限
has_perm(perm_list) #判断用户是否有权限列表中的某个列表
auth认证系统的功能
create_user #创建用户
authenticate #验证登录
login #记住用户的登录状态
logout #退出登录
is_authenticated #判断用户是否登录
login_required #判断用户是否登录的装饰器
运用auth系统
from django.shortcuts import render,reverse,redirect
from .forms import RegisterForm,LoginForm
from .models import UserModel
# Create your views here.
from django.contrib.auth.models import User,Permission,Group #从auth系统导入User,Permission,Group 表
from django.contrib.auth import login,logout,authenticate #导入login,logout,authenticate三个方法 def home(request):
return render(request,'login/home.html') def register(request):
if request.method == 'GET':
return render(request,'login/register.html')
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
password_repeat = form.cleaned_data.get('password_repeat')
email = form.cleaned_data.get('email')
if password == password_repeat:
# UserModel.objects.create(username = username,password = password,email = email)
User.objects.create_user(username=username,password=password,email=email) #用create_user自动给密码加密
return redirect(reverse('login_login'))
else:
return redirect(reverse('login_register'))
return redirect(reverse('login_register'))
return redirect(reverse('login_register')) def login_view(request):
if request.method == 'GET':
return render(request,'login/login.html')
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
# user = UserModel.objects.filter(username=username,password=password)
user = authenticate(username=username,password=password) #自动验证数据库是否有该用户,自动密码解密
if user:
# request.session['username'] = username
login(request,user) #这种方式实现登录状态
return redirect(reverse('login_home'))
else:
return redirect(reverse('login_register'))
return redirect(reverse('login_register'))
else:
return redirect(reverse('login_register')) def logout_view(request):
# request.session.flush()
logout(request) #这种方式实现退出用户
return render(request,'login/login.html')
二、设置blog主页的登录权限
为了实现在进入博客页面之前必须得登录(就是设置登录权限)
#1、setting.py最后添加
LOGIN_URL = '/login/login' #把这个页面设置成登录页面,只要没登录就会跳转这个页面 #2、在想要设置权限的地方加上装饰器,在blog的app主页里面添加
from django.contrib.auth.decorators import login_required,permission_required @login_required #实现登录权限;想要进入这个页面,如果没有登录,就会跳转到默认登录页面
def index(request):
'''
主页
'''
return render(request,'blog/demo_index.html') #3、为了用户体验而言,实现登录用户后直接跳转到博客页面而不是主页,从GET里面获取next的url,在保持用户登录状态之后添加代码
if user:
# request.session['username'] = username
login(request,user) #这种方式实现登录状态
next_url = request.GET.get('next') #为了用户体验而言,实现登录用户后直接跳转到博客页面而不是主页,从GET里面获取next的url
if next_url: #如果存在,跳转到该url
return redirect(next_url)
return redirect(reverse('login_home'))
三、关于权限
#在auth系统当中,django已经为我们提供了一个用户身份验证,用户组和权限管理这些功能, 那么就可以使用它来完善我们现有的这个项目.
修改用户密码
def test(request):
xcc = User.objects.filter(username='xuchengcheng').first()
xcc.set_password('qwe123') #修改密码
xcc.save()
return HttpResponse(111111)
设置添加博客权限
@permission_required('blog.add_blogmodel') #设置app名blog下的add_blogmodel权限,用户必须有这个权限才能添加博客
def add(request):
'''
添加页
'''
pass
添加权限方式
def test(request):
#给小明一个添加博客的权限
xiaoming = User.objects.filter(username='xiaoming').first() #获取用户
add_blog_permission = Permission.objects.filter(codename='add_blog').first() #获取权限
xiaoming.user_permissions.add(add_blog_permission) #给用户添加权限 #给组增加一个添加博客的权限,将用户放入这个组里面就可以实现添加博客权限
g1 = Group()
g1.name = 'add_blog_permission' #设置组
g1.save()
g1.permissions.add(add_blog_permission) #给组添加权限
g1 = Group.objects.filter(name='add_blog_permission')
xiaohong = User.objects.filter(username='xiaohong').first()
print(xiaohong)
g1.user_set.add(xiaohong) #将小红添加到这个组 return HttpResponse(111111)

Django 13 admin和auth系统、权限问题的更多相关文章
- 潭州课堂25班:Ph201805201 django框架 第十三课 自定义404页面,auth系统中的User模型,auth系统权限管理 (课堂笔记)
当 DEBUG=True 时,django 内部的404报错信息, 自带的报错信息, 要自定义404信息,要先把 DEBUG=False , 之后要自定义4040页面,有两种方法, 方法1,在创建40 ...
- Django 学习第十二天——Auth 系统
一.Auth系统中的表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别 存放了用户,用户组,权限的信息表. 另外三张表就是多对多的关系表 Us ...
- python框架之Django(13)-admin组件
使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS ...
- Django——13 Auth系统 登陆注册实例 权限的实现
Django Auth系统中的表 注册登陆实例 权限的实现 登陆权限 操作权限 组操作 Auth系统中的表 从表的名称我们就能看出,auth_user,auth_group,auth_permiss ...
- python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作
django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...
- 『Django』第N+1节: Django自带的认证系统 - auth
个人网站: lipeiguan.top 以后会慢慢转移到个人网站, 欢迎大家收藏^ . ^ 写在前面 我们在开发一个网站的时候, 经常需要实现网站的用户系统. 这个时候我们需要实现用户注册.用户登录. ...
- django 学习-18 用户管理Auth系统使用
1.首先跟之前说的admin的要求有点像, vim urls.py from django.contrib import adminadmin.autodiscover() ...
- django中admin路由系统工作原理
一.如图所示 from django.contrib import admin from . import models class zhangsan(admin.ModelAdmin): list_ ...
- Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法
Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法 一丶ORM常用字段 ...
随机推荐
- URL与HTTP介绍
一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源 ...
- python中的变量以及字符串的使用
在python中只有一个变量:动态变量 在Python当中令人奇怪的是我们的python没有静态变量,这个特性大大的增加了python的灵活性. 由于python中没有静态变量所以我们千万不要使用静态 ...
- 【译】Android 数据库 ORMLite
@DatabaseField cloumnName:指定字段名,不指定则变量名作为字段名 canBeNull:是否可以为null dataType:指定字段的类型 defaultValue:指定 ...
- MyBatis总结七:动态sql和sql片段
开发中,sql拼接很常见,所以说一下动态sql: 1 if 2 chose,when,otherwise 3 where,set 4 foreach 用法解析(现有一张users表 内有id user ...
- ActionbarActivity和普通的Activity的区别
ActionbarActivity用于支持API11以下的程序支持ActionBar的功能,但是需要加入支持库 不这样做的话只有API11以上的才能支持ActionBar
- zabbix启动web界面提示:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
问题 zabbix启动web界面提示: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' ( ...
- POJ 3580 SuperMemo (FHQ_Treap)
题意:让你维护一个序列,支持以下6种操作: ADD x y d: 第x个数到第y个数加d . REVERSE x y : 将区间[x,y]中的数翻转 . REVOLVE x y t :将区间[x,y] ...
- WOJ 10 精英选拔
神仙dp,膜Claris 题意:给一个长度为$n$的数列,求出不超过k次交换后的最大连续子区间和. 发现交换后的最优答案一定是这样的(0和2的长度可以为0) 0 ...
- HTML5应用程序缓存Application Cache详解.RP
什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...
- hive和sequoiadb对接的问题
使用hive和spark对接的时候,当两个表做JOIN的时候,如果表的数据量很大一定要做 set hive.auto.convert.join=false