使用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. Chapter3_操作符_直接常量和指数计数法

    (1)直接常量 在程序中使用直接常量,相当于指导编译器,告诉它要生成什么样的类型,这样就不会产生模棱两可的情况.比如flaot a = 1f等,后缀表示告诉编译器想生成的类型.常用的后缀有l/L(lo ...

  2. docker 技术

    利用docker打包一个sshd的服务 准备环境 安装docker     修改主机名与hosts解析     echo '10.0.0.11 docker01'     参考文档:https://m ...

  3. ActiveMQ_2安装

    Linux安装 环境JDK7以上 gz文件拷贝到 /usr/local/目录下 解压 后缀为 .tar.gz的压缩包 进入解压后的文件夹 cd apache-activemq-x.xx.x/ cd b ...

  4. 实战C++对象模型之成员函数调用

    先说结论:C++的类成员函数和C函数实质是一样的,只是C++类成员函数多了隐藏参数this. 通过本文的演示,可以看见这背后的一切,完全可C函数方式调用C++类普通成员函数和C++类虚拟成员函数. 为 ...

  5. Raft知识图谱

  6. Xutils简

    //解析 private void myinitData() { RequestParams parms=new RequestParams("http://huixinguiyu.cn/A ...

  7. python 在unix下json格式显示结果

    在使用命令号输出接口测试结果,发现无法按照期望的json格式进行显示.查阅资料发现python自带强大的工具. 直接上代码: import os,requests url = XXXXXX conte ...

  8. Codeforces828 A. Restaurant Tables

    A. Restaurant Tables time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. 使用Python对Twitter进行数据挖掘(Mining Twitter Data with Python)

    目录 1.Collecting data 1.1 Register Your App 1.2 Accessing the Data 1.3 Streaming 2.Text Pre-processin ...

  10. C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档

    项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.Net+FreeSpire.PDF三个类库实现了生成pdf.生成条形码和打印pdf功能. 首先在项 ...