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框架的两种形式 ...
随机推荐
- 201771010142 张燕《面向对象程序设计(java)》第一周学习总结
201771010142 张燕<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...
- 数据库-SQL语句:删除和修改语句-列类型-列约束
使用MySQL客户端连接服务器的两种方式: (1)交互模式: ——查 mysql.exe -h127.0.0.1 -uroot -p mysql -uroot (2)脚本模式:——增删改 m ...
- JNI 记
Java Native Interface(JNI)从零开始详细教程 ================================================================ ...
- 20175316盛茂淞 2018-2019-2 《Java程序设计》第2周学习总结
20175316盛茂淞 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 1.整数:可细分为为short整数(占2字节),int整数(占4字节),long整数( ...
- 亲写javascript 各类面试题
DOM修改: 1.全文单词首字母大写---2013 腾讯 var toCapitalize = function (str){ var aStr1 = str.split(" ") ...
- Python_day5
局部变量 全局变量 def test(): # 声明使用全局变量x global x x = 100 y = 300 # 局部变量:作用域和生存周期仅在从定义开始到函数结束 x = 200 # 全局变 ...
- USART of STM32
/*************************************************************************** * 文件名:USART.h * * 编写人:离 ...
- 向jsp中引入公共文件
前沿,在网页开发中,总会存在某几个.js或者某几个.css是所有.jsp文件的公用文件,为了方便引用 我们把这些在公共的.js及.css文件放到一个.jsp文件中,只需要将这个引入所有公共.js及.c ...
- 2017-2018-1 20155326信息安全系统设计基础》嵌入式C语言课上考试补交
2017-2018-1 20155326信息安全系统设计基础>嵌入式C语言课上考试补交 PPT上的例子 已知位运算规则为: &0 --> 清零 &1 --> 不变 | ...
- 【pycharm 警告】unittest RuntimeWarning: Parent module ” not found while handling absolute import
Pycharm 2016.2执行单元测试遇到如下问题: RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handlin ...