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爬虫:通过关键字爬取百度图片
Feb 17 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
django2 快速安装指南分享
Jan 05 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
Python实现的个人所得税计算器示例
Jun 01 Python
python版飞机大战代码分享
Nov 20 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
python如何实现数据的线性拟合
Jul 19 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
Python 改变数组类型为uint8的实现
Apr 09 Python
图神经网络GNN算法
May 11 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/03 咖啡文化
精美漂亮的php分页类代码
2013/04/02 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
javascript中eval函数用法分析
2015/04/25 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
用Python的urllib库提交WEB表单
2009/02/24 Python
python列表的增删改查实例代码
2018/01/30 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
基于python实现坦克大战游戏
2020/10/27 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
static函数与普通函数有什么区别
2015/12/25 面试题
幼儿师范毕业生自荐信
2013/11/09 职场文书
学校消防演习方案
2014/02/19 职场文书
火箭队口号
2014/06/18 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
员工担保书范本
2015/09/22 职场文书
学生安全责任协议书
2016/03/22 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏