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聚类算法之基本K均值实例详解
Nov 20 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
windows下python安装小白入门教程
Sep 18 Python
Python正则表达式和元字符详解
Nov 29 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
对Django外键关系的描述
Jul 26 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Python web如何在IIS发布应用过程解析
May 27 Python
python实现简易名片管理系统
Apr 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
PHP邮件专题
2006/10/09 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
python进阶教程之异常处理
2014/08/30 Python
在Python中使用判断语句和循环的教程
2015/04/25 Python
python中PIL安装简单教程
2016/04/21 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
高中毕业生自我鉴定例文
2013/12/29 职场文书
行政申诉状范文
2015/05/20 职场文书
追讨欠款律师函
2015/06/24 职场文书
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS