一、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系统、权限问题的更多相关文章

  1. 潭州课堂25班:Ph201805201 django框架 第十三课 自定义404页面,auth系统中的User模型,auth系统权限管理 (课堂笔记)

    当 DEBUG=True 时,django 内部的404报错信息, 自带的报错信息, 要自定义404信息,要先把 DEBUG=False , 之后要自定义4040页面,有两种方法, 方法1,在创建40 ...

  2. Django 学习第十二天——Auth 系统

    一.Auth系统中的表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别 存放了用户,用户组,权限的信息表. 另外三张表就是多对多的关系表 Us ...

  3. python框架之Django(13)-admin组件

    使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS ...

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

    Django Auth系统中的表 注册登陆实例 权限的实现 登陆权限 操作权限 组操作  Auth系统中的表 从表的名称我们就能看出,auth_user,auth_group,auth_permiss ...

  5. python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作

    django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...

  6. 『Django』第N+1节: Django自带的认证系统 - auth

    个人网站: lipeiguan.top 以后会慢慢转移到个人网站, 欢迎大家收藏^ . ^ 写在前面 我们在开发一个网站的时候, 经常需要实现网站的用户系统. 这个时候我们需要实现用户注册.用户登录. ...

  7. django 学习-18 用户管理Auth系统使用

    1.首先跟之前说的admin的要求有点像, vim urls.py from django.contrib import adminadmin.autodiscover()               ...

  8. django中admin路由系统工作原理

    一.如图所示 from django.contrib import admin from . import models class zhangsan(admin.ModelAdmin): list_ ...

  9. Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法

    Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法 一丶ORM常用字段 ...

随机推荐

  1. LaTeX数学公式基础

    LaTeX数学公式 参考:https://www.cnblogs.com/Sinte-Beuve/p/6160905.html 原博客显示有点问题,重新搬运整理LaTeX数学公式部分的基本用法 基础 ...

  2. 每天一道算法题(12)——和为n的连续正数序列或者随机数

    题目:输入一个正数n,输出所有和为n 连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5.4-6 和7-8. 1.思路 尊崇以下策略: (1)对 ...

  3. sharepoint 2013创建网站集,域帐户无法访问,只有administrator可以访问

    解决方法: 1.创建WEB应用程序时,可配置帐户必须为域帐户 2.确定关闭防火墙(这是重点) 我在测试时发现80端口和30714端口在其它同事的电脑上(域帐户)都可以访问,除这两个端口以后都无法访问, ...

  4. 【总结整理】WMS、WMTS、WFS

    参考:http://www.cnblogs.com/naaoveGIS/p/5508882.html WMTS:WMTS是OGC制定的一种发布瓦块地图的Web服务规范,wms主要是动态地图,wmts是 ...

  5. Windows 安装 Microsoft Visual Studio 2010

    Windows 安装 VS2010 我的电脑系统:Windows 10 x64位 我要安装的Microsoft Visual Studio 是:VS2010 注意: VS2010 没有专门的64位版. ...

  6. ROS Learning-006 beginner_Tutorials 编译ROS程序包

    ROS Indigo beginner_Tutorials-05 编译 ROS 程序包 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04 ...

  7. Luogu 3008 [USACO11JAN]道路和飞机Roads and Planes

    BZOJ2200 听说加上slf优化的spfa的卡过,真的不想写这些东西. 考虑使用堆优化的dij算法. 先加上所有双向边,然后dfs一下搜出所有由双向边构成的联通块,然后加上所有的单向边,一边对所有 ...

  8. winform ComBox绑定数据

    初始化数据: List<KeyValuePair<string, string>> list: ComBox1.ValueMember = "Key";Co ...

  9. mvvm模式下在WPF项目中动态加载项目的程序集和类

    在mvvm模式的wpf项目中有个需求需要去加载解决方案的程序集,并且根据程序集去动态加载当前程序集的类,做成下拉框形式. 效果: //全局定义 private ComboBox abList= nul ...

  10. c# ftp创建文件(非上传文件)

    c#  ftp创建文件(非上传文件) 一.奇葩的故事: 今天项目中遇到这么个奇葩的问题,ftp文件传输完成后要在ftp目录下另一个文件夹下创建对应的空文件,听说是为了文件的完整性,既然这么说,那么就必 ...