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 dict remove数组删除(del,pop)
Mar 24 Python
Python中的map、reduce和filter浅析
Apr 26 Python
Python映射拆分操作符用法实例
May 19 Python
Python按行读取文件的简单实现方法
Jun 22 Python
python基于物品协同过滤算法实现代码
May 31 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
Python run()函数和start()函数的比较和差别介绍
May 03 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
细说NumPy数组的四种乘法的使用
Dec 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
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP中static关键字原理的学习研究分析
2011/07/18 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
python写入xml文件的方法
2015/05/08 Python
python中lambda()的用法
2017/11/16 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
10条PHP编程习惯
2014/05/26 面试题
高中教师评语大全
2014/04/25 职场文书
七一讲话心得体会
2014/09/05 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
工资证明范本
2015/06/12 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript