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处理JSON数据并生成条形图
Aug 05 Python
Python socket套接字实现C/S模式远程命令执行功能案例
Jul 06 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
Jul 04 Python
python 随机森林算法及其优化详解
Jul 11 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
python获取整个网页源码的方法
Aug 03 Python
Numpy数组的广播机制的实现
Nov 03 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
Docker 如何布置PHP开发环境
2016/06/21 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
canvas绘制七巧板
2017/02/03 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
html5的localstorage详解
2017/05/09 HTML / CSS
Html5新标签解释及用法
2012/02/17 HTML / CSS
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
高三政治教学反思
2014/02/06 职场文书
辞职信如何写
2015/02/27 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
详解nginx location指令
2022/01/18 Servers
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server