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之集成开发环境(IDE)
Sep 12 Python
Python 描述符(Descriptor)入门
Nov 20 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
python 设置文件编码格式的实现方法
Dec 21 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
Python3.4 tkinter,PIL图片转换
Jun 21 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
python中复数的共轭复数知识点总结
Dec 06 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
中国收音机工业发展史
2021/03/02 无线电
php中用文本文件做数据库的实现方法
2008/03/27 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
accesskey 提交
2006/06/26 Javascript
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
基于python实现雪花算法过程详解
2019/11/16 Python
Tensorflow 实现释放内存
2020/02/03 Python
python文件路径操作方法总结
2020/12/21 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
集体生日活动方案
2014/08/18 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
教师党员整改措施
2014/10/24 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
七一表彰大会简报
2015/07/20 职场文书
php去除deprecated的实例方法
2021/11/17 PHP