Django——13 Auth系统 登陆注册实例 权限的实现
Django
Auth系统中的表

从表的名称我们就能看出,auth_user,auth_group,auth_permission分别存放了用户,用户组,权限的信息表.另外三张表就是多对多的关系表
- User:User是auth模块中维护用户信息的关系模式(继承了models.Model), 数据库中该表被命名为auth_user.
- Group:User对象中有一个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
- Permission:Django的auth系统提供了模型级的权限控制, 即可以检查用户是否对某个数据表拥有增(add), 改(change), 删(delete)权限。
auth系统中User模型常用的属性和方法
auth系统的功能
- create_user 创建用户
- authenticate 验证登录
- login 记住用户的登录状态
- logout 退出登录
- is_authenticated 判断用户是否登录
- login_required 判断用户是否登录的装饰器
在之前的额博客案例中,我们对用户的账户信息使用的是自建的数据表,现在,我们用auth系统自带的账户管理表,再来进行一次操作
接下来我们要在现有的项目中实现以下功能:
- 1.使用内置的auth_user表来存储用户注册信息
- 2.使用auth系统中的login,logout,authenticate实现登录,退出和验证登录
- 3.给blog中的视图设置登录使用权限
- 4.给添加博客设置用户的权限
注册登陆实例
从注册开始
之前的注册代码是这样写的

更改为(将注册的数据添加到Auth的User表中)

登陆代码之前是这样写的

现在是

退出之前是这样写的

现在是

结果:
现在来注册账户:

现在来查看数据库

注册成功!
然后将home视图的用户查看代码修改一下

就可以登陆了

当点击退出以后,(默认未登录显示框中信息)

权限的实现
登陆权限设置
一般,当我们视图进入网站因无权限而被阻时,会自动跳转到登录页面,所以,在开始之前,需要在settings中设置一个因权限不足而跳转的url

然后回到之前的 博客小案例的实现,

新导入模块
from django.contrib.auth.decorators import login_required, permission_required
在index页面设置登陆权限

当我们访问http://127.0.0.1/blog/index的时候,页面自动跳转

当输入账号密码进入后,页面自动又跳转到了session/home页面,这显然不是我们想要的

我们需要输入完账号和密码以后,页面会继续进行到我们之前操作被暂停的页面,这时就可以发现,访问时的第一次跳转后面有一个next属性,指向的就是我们需要继续的url

这样就不会登陆到固定页面了、
这样当输入完账号信息以后,就能够正常跳转了

操作权限设置
接下来我们需要设置一个,只有特定用户,才能够拥有添加博客的功能权限
查看数据库中auth_permission这张表,在里面有所有的表的一些操作权限,这些是在表创建的同是添加进来的数据.
@permission_required(appname.codename(权限名称))
给blog app当中的add添加博客的视图设置权限
然后,我们让周杰伦这个用户成为超级用户(配置好url运行一次)


现在,当我们登陆到此页面以后

点击文件列表会有反应

但是当我们点击添加文章的时候,就会需要再次登陆

再次输入周杰伦的账号信息时,就可以添加了
组操作
创建一个组
# 创建一个组
Group.objects.create(name='add_blog_group')

添加新用户
# 找到这个新建的组
g1 = Group.objects.filter(name='add_blog_group').first()
# 给组添加权限
g1.permissions.add(add_permission)
pywjh = User.objects.get(username='pywjh')
# 将pywjh添加到g1中,pywjh也就拥有了添加博客的权限
g1.user_set.add(pywjh)

可以看到。id为2的用户在用户组1

Django——13 Auth系统 登陆注册实例 权限的实现的更多相关文章
- Django用户认证系统(三)组与权限
Django的权限系统很简单,它可以赋予users或groups中的users以权限. Django admin后台就使用了该权限系统,不过也可以用到你自己的代码中. User对象具有两个ManyTo ...
- Django 13 admin和auth系统、权限问题
一.auth系统 auth系统的数据表 #User:User是auth模块中维护用户信息的关系模式(继承了models.Model), 数据库中该表被命名为auth_user. #Group:User ...
- Django 学习第十二天——Auth 系统
一.Auth系统中的表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别 存放了用户,用户组,权限的信息表. 另外三张表就是多对多的关系表 Us ...
- Django - 用户认证、用户组、用户权限
https://www.cnblogs.com/ccorz/p/6358074.html auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和a ...
- Django框架----路由系统、视图和模板(简单介绍)
一.路由配置系统(urls) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表: 你就是以这种方式告诉Django,对于这个URL ...
- Django——20141014深入理解Django HttpRequest HttpResponse的类和实例
深入理解Django HttpRequest HttpResponse的类和实例 了解META选项 了解中间件 理清所有模板传输模板变量的方式,并作出选择 Django模板系统:如何利用Django模 ...
- javaweb 登陆注册页面
视图的数据修改,表中也修改引用工具类用<%@ page import=""%> <%@ page import="java.util.Date" ...
- 潭州课堂25班:Ph201805201 django框架 第十三课 自定义404页面,auth系统中的User模型,auth系统权限管理 (课堂笔记)
当 DEBUG=True 时,django 内部的404报错信息, 自带的报错信息, 要自定义404信息,要先把 DEBUG=False , 之后要自定义4040页面,有两种方法, 方法1,在创建40 ...
- Django实战-用户注册和登陆系统
1.环境搭建和创建项目 1.环境搭建 每当我们开始一个新项目的时候,通常都会搭建一个全新.独立.隔离的项目环境,这样做的好处自然不必多说.有很多种建立项目虚拟环境的工具,使用比较普遍的是Python中 ...
随机推荐
- go语言笔记——append底层实现和Cpp vector无异,只是有返回值,double后返回了新的vector地址而已
切片的复制与追加 如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来.下面的代码描述了从拷贝切片的 copy 函数和向切片追加新元素的 append 函数. 示例 7.12 ...
- JavaScript(JS)的简单使用
一.什么是JS(Javascript)? Javascript是一种脚本语言,被广泛用于Web应用开发,常用来为网页添加各式各样的功能,为用户提供更加流畅的浏览效果. Javascript严格区分大小 ...
- aixcoder智能编程助手开发插件推荐
1. aixcoder安装使用 1.1. 介绍 1.1.1. 功能 智能代码提示她用强大的深度学习引擎,能给出更加精确的代码提示: 代码风格检查她有代码风格智能检查能力,帮助开发者改善代码质量: 编程 ...
- Unity项目 - 捡苹果 Apple Picker
项目展示 Github项目地址:Apple Picker 涉及知识 正投视图 3D场景内树与苹果的图层 记录最高分到本地 准备工作 模型制作: 基本模型创建 树叶:sphere 拉伸为椭圆形,绿色材质 ...
- Java中多个线程交替循环执行
有些时候面试官经常会问,两个线程怎么交替执行呀,如果是三个线程,又怎么交替执行呀,这种问题一般人还真不一定能回答上来.多线程这块如果理解的不好,学起来是很吃力的,更别说面试了.下面我们就来剖析一下怎么 ...
- RocketMQ(1)--helloworld
双Master方式: 服务器环境 序号 IP 角色 模式 1 192.168.32.135 nameServer1,brokerServer1 Master1 2 192.168.32.136 na ...
- j建立一个小的servlet小程序
我们建立一个最简单的servlet程序,这个servelt程序只是单纯的输出helloworld. 步骤如下:如图:在Eclipse中选择新建一个项目,其中选择tomcat project然后点击下一 ...
- mysql数据库存储的引擎和数据类型
一.查看支持的存储引擎 SHOW ENGINES \G; 或者 SHOW VARIABLES LIKE 'have%'; 二.安装版mysql的默认引擎是InnoDB,免安装版默认引擎是MyISAM ...
- [转]Linux rpm 命令参数使用详解
转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html RPM是RedHat Package Mana ...
- Unicode gbk gb2312 编码问题 [转载]
原文地址: http://www.cnblogs.com/csn0721/archive/2013/01/24/2875613.html HTML5 UTF-8 中文乱码 <!DOCTYPE ...