python的Web框架,auth权限系统
使用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权限系统的更多相关文章
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python Flask Web 框架入门
Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...
- 比我的脸还干的gan货——Python Flask Web 框架入门
Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...
- python 实现web框架simfish
python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...
- Python之Web框架们
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...
- Python的WEB框架
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. ? 1 2 ...
- 将Python的Django框架与认证系统整合的方法
将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...
- Python之Web框架
Python之Web框架: 一. Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...
- python各种web框架对比
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
随机推荐
- UVA 2451 Brackets sequence
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=9 ...
- Nodejs之路:非I/O的异步API
本篇主要介绍setTimeout,setInterval,setImmediate和process.nextTick. 1,定时器 Node中的定时器和浏览器中用法一致.区别在于:在Node中,执行到 ...
- 位图法bitmap
1.概念 1)所谓bitmap,就是用每一位(bit)来标记某个元素对应的value, 而key即是该元素,通常bitmap是一个int数组,用每一个int数的每一个bit来映射某个数据 2)由于采用 ...
- MyBatis-Plus 多库部署方式;spring mvc 多库部署方式
1.实现mybatis-plus的多个数据库的切换方式 源码地址:https://github.com/baomidou/mybatisplus-spring-mvc 2.因为其文档都是相互依赖的,所 ...
- IOS https抓包及10.3.3版本证书不生效问题解决
Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP抓包 ...
- python多版本管理包pyenv
前言: CentOS7 默认版本 python2.7.5 ,但是目前项目开发都是在python3的环境下,而单独编译安装python3时会出现各种异常!!! 系统默认python2.7又不能删除,否 ...
- EBS CAS SSO测试
https://wiki.jasig.org/display/CAS/CASifying+Oracle+Portal https://wenku.baidu.com/view/5f110a85b9d5 ...
- 简单的Poc Exp编写(上)
简单的POC EXP 编写 (上) 作者BY Greekn 今天主要讲的 是关于web 方面的 poc 编写 关于web 安全 个人理解的话 一个就是攻击 另一个就是漏洞挖掘了 防御的话 看 ...
- HttpRunner框架(一)
HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 中文使用文档地址:h ...
- 实现instanceof关键字
如果用Java的伪代码来表现Java语言规范所描述的运行时语义,会是这样: // obj instanceof T boolean result; if (obj == null) { result ...