django 装饰器 检测登录状态操作


Posted in Python onJuly 02, 2020

1、检测登录状态

base.py

def checkLogin(func):
 
  """
  查看session值用来判断用户是否已经登录
  :param func:
  :return:
  """
  def warpper(request,*args,**kwargs):
    if request.session.get('username', False):
      return func(request, *args, **kwargs)
 
    else:
      return HttpResponse('/login')
  return warpper

index.py:

from proApp import models, article, base
@base.checkLogin
def index(request):
  dict = {
    "article_list": article.getArticle(),
  }
  return render(request, 'index.html',dict)

1报错:

The view proApp.base.warpper didn't return an HttpResponse object. It returned None instead.

django 装饰器 检测登录状态操作

解决办法: 判断用户session后,一定要return返回值

2、登录检查成功,路由未被更改,页面未跳转

django 装饰器 检测登录状态操作

解决办法: redirect(‘跳转路径和名称‘)方法,页面跳转

from django.shortcuts import render,render_to_response,redirect
def checkLogin(func):
 
  """
  查看session值用来判断用户是否已经登录
  :param func:
  :return:
  """
  def warpper(request,*args,**kwargs):
    if request.session.get('username', False):
      return func(request, *args, **kwargs)

    else:
      return redirect('/login')
  return warpper

注意:render与redirect两点区别:

1、render返回一个登陆成功后的页面,刷新该页面将回复到跳转前页面。而redirect则不会

2、render返回一个登陆成功页面,不会经过url路由分发系统,也就是说,不会执行跳转后url的试图函数。这样,返回的页面渲染不成功;而redirect是跳转到指定页面,当登陆成功后,会在url路由系统进行匹配,如果有存在的映射函数,就会执行对应的映射函数。

补充知识:Django中的中间件与类视图

类视图

函数视图:以函数的方式定义的视图称为函数视图

类视图:以类的方式定义的视图称为类视图

代码可读性好

类视图相对于函数视图有更高的复用性

因此大部分视图都使用类进行封装。

from django.views import View
class ClassView(View):
  """类视图的介绍"""

  def get(self, request):
    """get请求方法"""
    print('get请求方法进次函数')
    return HttpResponse('get请求方法')

  def post(self, request):
    """post请求方法进此函数"""
    print('post请求方法')
    return HttpResponse('post请求方法')
  """
 在url中配置
 """
 urlpatterns = [
  url(r"^classview/$", views.ClassView.as_view())
  #ClassView是一个类 需要调用Django自带的as_view方法转换为view

]

中间件

中间件

Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。

我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。

#先在子应用文件下新建(自定义).py文件
# 自定义中间键
def outer(fuc):
  print('调用前')
  def inner(*args, **kwargs):
    print('执行前')
    data = fuc(*args, **kwargs)
    print(' 执行后')
    return data
  return inner
#2. settings.py的middleware下面加入自定义的中间件
'user1.middlewares.outer' # 自定义中间件

django 装饰器 检测登录状态操作

django 装饰器 检测登录状态操作

django 装饰器 检测登录状态操作

以上这篇django 装饰器 检测登录状态操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python列表推导式的使用方法
Nov 21 Python
python发送伪造的arp请求
Jan 09 Python
Python变量作用范围实例分析
Jul 07 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
Django Path转换器自定义及正则代码实例
May 29 Python
详解python字符串驻留技术
May 21 Python
总结Python使用过程中的bug
Jun 18 Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 #Python
django 实现后台从富文本提取纯文本
Jul 02 #Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 #Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 #Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 #Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 #Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 #Python
You might like
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
PHP强制转化的形式整理
2020/05/22 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
Python基本语法经典教程
2016/03/11 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
爱普生美国官网:Epson美国
2018/11/05 全球购物
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
4s客服专员岗位职责
2013/12/01 职场文书
销售主管岗位职责
2014/02/08 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
村委会贫困证明范文
2014/09/21 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
汽车销售合同文本
2019/08/08 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python