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中exit、return、sys.exit()等使用实例和区别
May 28 Python
mac下pycharm设置python版本的图文教程
Jun 13 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
Python字典遍历操作实例小结
Mar 05 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
看看如何用Python绘制小米新版天价logo
Apr 20 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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来自动调用不同服务器上的flash
2006/10/09 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
python3中sys.argv的实例用法
2020/04/24 Python
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
How to spawning asynchronous work in J2EE
2016/08/29 面试题
学生干部的自我评价分享
2014/01/18 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
2015年计划生育责任书
2015/05/08 职场文书
第二次离婚起诉书
2015/05/18 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript