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中使用Queue和Condition进行线程同步的方法
Jan 19 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
用Python写一段用户登录的程序代码
Apr 22 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
Python绘制频率分布直方图的示例
Jul 08 Python
python百行代码自制电脑端网速悬浮窗的实现
May 12 Python
如何在python中判断变量的类型
Jul 29 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
python中reload重载实例用法
Dec 15 Python
python实现股票历史数据可视化分析案例
Jun 10 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
PHP 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
jQuery 开天辟地入门篇一
2009/12/09 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
Flask框架配置与调试操作示例
2018/07/23 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
人力资源管理专业毕业生自荐书
2014/05/25 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书