使用django默认权限系统实现用户登录退出

判断用户是否登录
request.user.is_authenticated

返回的为bool值

一个简单的登录视图范式:

 # 导包
from django.contrib.auth import login, logout, authenticate def loginview(request): # 判断是否登录,如果没有登录,这个user就是一个匿名用户(AnonymousUser)。
if request.user.is_authticate:
return redirect(reverse('teacher:index')) #如果登录了则跳到首页 if request.method == 'POST':
username = request.POST.get('username', '')
password = request.POST.get('password', '') #校验用户名和密码,验证成功会返回一个用户,失败则返回一个None
user = authenticate(username=username, password=password) if user is not None:
# 登录,将用户信息保存到session
login(request, user) # 绑定(接受)当前的request请求,拿到request中的session,并传入user return redirect(reverse('teacher:index')) return render(request, 'teacher/login.html') # 简单退出视图
def logoutview(request):
# 用户是否登录都可以logout,不会抛出异常。
logout(request)
return redirect(reverse('teacher:index'))

html中有一个user的上下文处理器的全局变量,所有的模板可以直接使用

{{ user.username }}

限制登录访问

如果没有登录就禁止访问网页
在函数视图中简单配置即可:

    # 如果当前用户没有登录,则返回登录页面
if not request.user.is_authenticated:
return redirect(reverse('teacher:login'))

但是使用了这个之后,无法跳转到我当前进入的网页。下面去解决这个问题。

登录后的跳转

限制登录访问后,在登录之后,自动跳转到当前需要访问的页面。参数传递方法

 流程逻辑范式:

 # 传参数
def students(request):
if not request.user.is_authenticated:
# 通过参数来传递当前的页面。
return redirect(reverse('teacher:login') + '?next=%s' %request.path_info ) # 在login中接受参数并跳转,GET和POST同样需要设置,此处只示例GET
def loginview(request):
# 获取next参数
next_url = request.GET.get('next')
# 如果当前登录了账号。则跳转到初始访问的网页
if request.user.is_authenticated:
if next_url:
return redirect(next_url) # 如果没有登录,则跳转到登录的页面
else:
return redirect(reverse('teacher:login')

如果这样写的话,那就是每一个APP都需要需要加上判断和传参数代码。比较麻烦。而django为我们提供了一个方法,那就来看看把。

login_required:装饰器跳转

# 导包
from django.contrib.auth.decorators import login_required

范式

 login_url为当没有next的时候需要跳转的地方
@login_required(login_url=reverse('teacher:login'))
def students(request):
pass

如果不写login_url的话,会报错,就我们需要在settings中配置LOGIN_URL。

@login_required()
def students(request):
pass settings中配置:
from django.urls import reverse_lazy, reverse
LOGIN_URL = reverse_lazy('teacher:login') reverse_lazy:懒加载,如果直接配置reverse则会报错,因为settings是最早加载的,而APP等其他的还每有加载,立即加载是找不到我们需要的网页。

django内置权限系统管理

>>> admin.has_perm('teacher.add_student')

判断admin是否有'teacher.add_student'的权限。
# has_perm 是否有这个表的字段 返回bool值

在view中的应用:

 @login_required()
def students(request):
if not request.user.has_perm('teacher.view_students'):
return HttpResponse('你没有权限查看')
pass
......
权限的装饰器方法
第一个参数:代表当前的权限位置,第二个参数代表:报错抛出的异常
@permission_required('teacher.view_students', raise_exception=True)

HTML中判断用户登录的常规写法

    <!--判断用户是否登录-->
{% if user.is_authenticated %}
<li><a href="#">{{ user.username }},欢迎您</a></li>
<a href="{% url 'teacher:logout' %}">安全退出</a>
{% else %}
<li><a href="{% url 'teacher:login' %}">欢迎游客,请登录</a></li>
{% endif %}

HTML中根据权限显示展现的功能

    <!--如果有添加students的权限,则显示添加这个a标签-->
{% if perms.teacher.add_students %}
<a href="{% url 'teacher:add' %}" class="btn btn-primary" role="button">添加</a>
{% endif %}

删除权限

>>> 用户名.user_permissions.clear()

html权限的简单操作

{% if perms.teacher %}说明有teacher app 的权限{% endif %}

{% if perms.teacher.add_students %}说明有teacher students 模型add 的权限{% endif %}

自定义权限

写在models的模型下定义

 class Meta:
permissions = ( ('can_deleta_students', '删除学生')
) # 这样定义后,需要数据库迁移

python的Web框架,auth权限系统的更多相关文章

  1. Python之Web框架Django

    Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址  Python 下载地址:https://www.pyt ...

  2. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

  3. 比我的脸还干的gan货——Python Flask Web 框架入门

    Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...

  4. python 实现web框架simfish

    python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...

  5. Python之Web框架们

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...

  6. Python的WEB框架

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. ? 1 2 ...

  7. 将Python的Django框架与认证系统整合的方法

    将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...

  8. Python之Web框架

    Python之Web框架: 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...

  9. python各种web框架对比

    0 引言        python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...

  10. Python3.5学习十八 Python之Web框架 Django

    Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...

随机推荐

  1. UVA 2451 Brackets sequence

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=9 ...

  2. Nodejs之路:非I/O的异步API

    本篇主要介绍setTimeout,setInterval,setImmediate和process.nextTick. 1,定时器 Node中的定时器和浏览器中用法一致.区别在于:在Node中,执行到 ...

  3. 位图法bitmap

    1.概念 1)所谓bitmap,就是用每一位(bit)来标记某个元素对应的value, 而key即是该元素,通常bitmap是一个int数组,用每一个int数的每一个bit来映射某个数据 2)由于采用 ...

  4. MyBatis-Plus 多库部署方式;spring mvc 多库部署方式

    1.实现mybatis-plus的多个数据库的切换方式 源码地址:https://github.com/baomidou/mybatisplus-spring-mvc 2.因为其文档都是相互依赖的,所 ...

  5. IOS https抓包及10.3.3版本证书不生效问题解决

    Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP抓包 ...

  6. python多版本管理包pyenv

    前言: CentOS7  默认版本 python2.7.5 ,但是目前项目开发都是在python3的环境下,而单独编译安装python3时会出现各种异常!!! 系统默认python2.7又不能删除,否 ...

  7. EBS CAS SSO测试

    https://wiki.jasig.org/display/CAS/CASifying+Oracle+Portal https://wenku.baidu.com/view/5f110a85b9d5 ...

  8. 简单的Poc Exp编写(上)

    简单的POC EXP 编写 (上)   作者BY Greekn   今天主要讲的 是关于web 方面的 poc 编写 关于web 安全 个人理解的话 一个就是攻击  另一个就是漏洞挖掘了 防御的话 看 ...

  9. HttpRunner框架(一)

    HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 中文使用文档地址:h ...

  10. 实现instanceof关键字

    如果用Java的伪代码来表现Java语言规范所描述的运行时语义,会是这样: // obj instanceof T boolean result; if (obj == null) { result ...