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中使用ConfigParser解析ini配置文件实例
Aug 30 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
python开发中range()函数用法实例分析
Nov 12 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
Pygame框架实现飞机大战
Aug 07 Python
Python标准库之typing的用法(类型标注)
Jun 02 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对象在内存中的存在形式分析
2015/02/03 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
jquery 查找新建元素代码
2010/07/06 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
收集的几个Python小技巧分享
2014/11/22 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
php优化查询foreach代码实例讲解
2021/03/24 PHP
大学生求职简历的自我评价范文
2013/10/12 职场文书
教育学专业实习生的自我鉴定
2013/11/26 职场文书
法学个人求职信范文
2014/01/27 职场文书
同学聚会主持词
2014/03/18 职场文书
档案接收函格式
2015/01/30 职场文书
卖车协议书范文
2016/03/23 职场文书
四年级作文之植物
2019/09/20 职场文书
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技