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常用字段 ...
随机推荐
- 异常 android.content.res.Resources$NotFoundException: String resource ID #0x61
09-09 16:08:41.554: E/Weaver(13140):09-09 16:08:41.554: E/Weaver(13140): android.content.res.Resourc ...
- onRetainNonConfigurationInstance方法状态保存
onRetainNonConfigurationInstance方法作用于ONSAVEINSTANCE类似,但是能保存更多的信息,可以使用getLastNonConfigurationInstance ...
- 窗体控件JFrame的使用
---------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:MyFrame.java 工程结构目录如下: 在 Source 界面和 Des ...
- Go语言-变量和常量
我们在这里需要优先说明的是用于声明变量的关键字var,以及用于声明常量的关键字const.要知道,绝大多数的数据类型的值都可以被赋给一个变量,包括函数.而常量则不同,它只能被赋予基本数据类型的值本身. ...
- ROS Learning-025 (提高篇-003 A Mobile Base-01) 控制移动平台
ROS 提高篇 A Mobile Base-01 - 控制移动平台 - 基本知识 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 ...
- HTML中关于url、scr、href的区别
URL是什么 URL:Uniform Resource Locators(统一资源定位器)的简写,Web浏览器通过URL从Web服务器请求页面. url不是属性,src和href是属性,src用于替换 ...
- excel导入工具
1 介绍 excel导入工具 整个项目的代码结构如下 \---excelExport # 导出工具包 | AsyncExportExcel.java #多线程导出 | ExcelImport.java ...
- 1、Tomcat7性能监控与优化
1. 目的 通过优化tomcat提高网站的并发能力. 2. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响. 3. 优化配置 3.1. 配置tomcat管理员账户 ...
- 认识data-xxx 的属性
认识data-xxx 的属性 如, 在bootstrap之data-toggle="table", 不加这个属性,就不能实现框架自带的js效果. 1.它属于 HTML5 的 dat ...
- SQL 分组后拼接字符串
with t as( select 'Charles' parent, 'William' child union select 'Charles', 'Harry' union select 'An ...