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中类的一些方法分析
Sep 25 Python
使用Python开发windows GUI程序入门实例
Oct 23 Python
python多线程操作实例
Nov 21 Python
Python通过future处理并发问题
Oct 17 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
flask框架配置mysql数据库操作详解
Nov 29 Python
python能否java成为主流语言吗
Jun 22 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 Python
Django中template for如何使用方法
Jan 31 Python
Python循环之while无限迭代
Apr 30 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的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
js鼠标左右键 键盘值小结
2010/06/11 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python操作列表的常用方法分享
2014/02/13 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
html5的localstorage详解
2017/05/09 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
公共场所禁烟标语
2014/06/25 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
2019财务转正述职报告
2019/06/27 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server