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常用字段 ...
随机推荐
- Ubuntu16.04下同时安装Anaconda2与Anaconda3
转自:http://blog.csdn.net/juezhanangle/article/details/78922888 由于编程时同时需要有python2/3的环境和大量的依赖包,本文的思路是先根 ...
- show table detail
create table #t(name varchar(255), rows bigint, reserved varchar(20),data varchar(20), index_size va ...
- PLM数据库迁移注意事项
需求: PLM应用程序与数据库是存放在同一台服务器上,现需要将数据库迁移到数据库服务器10.10.1.10中. 10.10.1.10中安装了三个实例,MSSQLSERVER.MSSQLSERVER_P ...
- 第5章 选举模式和ZooKeeper的集群安装 5-1 集群的一些基本概念
xx就是我们的master,也就是我们的主节点.心跳机制,当有一个节点挂掉之后,整个集群还是可以工作的.选举模式,我们现在的master是正常运行的,但是在某些情况下它宕机了死机了,那么这个时候它这个 ...
- ann
转自 http://blog.csdn.net/yiluoyan/article/details/45308785 这篇文章接着之前的车牌识别,从输入的车图片中分割识别出车牌之后,将进行下一步:车牌号 ...
- HDOJ 4802 GPA
Problem Description In college, a student may take several courses. for each course i, he earns a ce ...
- c# ??和运算符先后的问题
; ; - not1??; Console.WriteLine(a); 输出结果为:10 问题因该是??运算符没有-的优先级高,实际这个 操作等于: ; ; - not1)??); 解决这个问题的办法 ...
- C语言-郝斌笔记-007是否为素数
是否为素数 # include <stdio.h> bool IsPrime(int val) { int i; ; i<val; ++i) { ) break; } if (i = ...
- jquery 的插件 extend
让我们来讲解 jquery中的插件机制 $.fn.extend and() $.extend()这两个方法都接受一个参数,类型为Object.Object对象的“名/值对”分别代表“函数或方 ...
- 转/keystore和truststore的区别
keytool是java自带的工具用于产生密钥 keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息. truststore是放信任的证书的一个store. 那他们 ...