使用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. epoll_wait会被系统中断唤醒

    今天,当一个程序在epoll_wait阻塞时,用strace跟踪了一下,结果epoll_wait就被EINTR唤醒了,并且返回-1: 所以,当epoll_wait返回-1时,需要判断errno是不是E ...

  2. 【Git】 GitLab简单使用

    本例介绍简单实用GitLab,安装请参照[Git] GitLab服务器社区版安装与配置 1.用户和组的管理 a.创建组,在首页点击Create a group b.创建用户,在首页点击Add peop ...

  3. sql pivot(行转列) 和unpivot(列转行)的用法

    1.PIVOT用法(行转列) select * from Table_Score as a pivot (sum(score) for a.name in ([语文],[数学],[外语],[文综],[ ...

  4. Wordpress“固定链接”页面出现404原因及解决方法

    编辑配置文件:/etc/apache2/apache2.conf(非常靠后的位置),将里面的AllowOverride选项由None设置为All. <Directory /> Option ...

  5. Note | Markdown

    目录 一.代码段 1.简单代码 2.大段代码 二.块注释 Blockquote 三.标题设置 四.字体 1.斜体 2.粗体 3.下划线 方案1:行内 HTML 方案2:html的span标签.设置行内 ...

  6. 设置navigation的title

      onReady(){         wx.setNavigationBarTitle({           title: this.data.title         });     } 

  7. bzoj3929(sam)

    因为题目中树的特殊性暴力dfs建sam就好了.然后sam有一个有意思的性质是一个点代表的子串个数等于mx[i]-mx[fail[i]],至于为什么,我不会严谨的证明,但想想还是可以的,就是当前串的所有 ...

  8. visual2017专业版MFC编程环境搭建及第一个MFC程序的创建

    1.MFC介绍及环境搭建 MFC全程为Microsoft Foundation class Library,即微软的基本类库,MFC实际上是一个庞大的文件库,它由指向文件和源文件组成. 首先,打开vi ...

  9. Vuejs——(13)组件——杂项

    版权声明:出处http://blog.csdn.net/qq20004604   目录(?)[+]   本篇资料来于官方文档: http://cn.vuejs.org/guide/components ...

  10. Python自动化开发 - RESTful API

    本节内容 1.  RESTful 简介 2.  RESTful 设计指南 3.  Django REST Framework 最佳实践 4.  理论拓展与开放平台 5.  API文档化与测试 一  R ...