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删除列表内容
Aug 04 Python
Python中类型检查的详细介绍
Feb 13 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
python3.6实现学生信息管理系统
Feb 21 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
Python通过文本和图片生成词云图
May 21 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
python元组拆包实现方法
Feb 28 Python
python爬取网页版QQ空间,生成各类图表
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
我的论坛源代码(三)
2006/10/09 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
php 中的closure用法详解
2017/06/12 PHP
php新建文件的方法实例
2019/09/26 PHP
js constructor的实际作用分析
2011/11/15 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
200 行python 代码实现 2048 游戏
2018/01/12 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
django Serializer序列化使用方法详解
2018/10/16 Python
python实现图片转字符小工具
2019/04/30 Python
Django logging配置及使用详解
2019/07/23 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
银行批评与自我批评
2014/02/10 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
2014年老干部工作总结
2014/11/21 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
召开会议通知范文
2015/04/15 职场文书
用Python实现Newton插值法
2021/04/17 Python
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL