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实现多进程共享数据的方法分析
Dec 04 Python
python 输出上个月的月末日期实例
Apr 11 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
代码详解django中数据库设置
Jan 28 Python
linux查找当前python解释器的位置方法
Feb 20 Python
详解js文件通过python访问数据库方法
Mar 03 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
python异步存储数据详解
Mar 19 Python
树莓派与PC端在局域网内运用python实现即时通讯
Jun 22 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 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 的 __FILE__ 常量
2007/01/15 PHP
php的一个登录的类 [推荐]
2007/03/16 PHP
php array_slice函数的使用以及参数详解
2008/08/30 PHP
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
vue动画效果实现方法示例
2019/03/18 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
Python的另外几种语言实现
2015/01/29 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
电大毕业自我鉴定
2014/02/03 职场文书
人民教师求职自荐信
2014/03/12 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
自我检讨报告
2015/01/28 职场文书
报名委托书
2015/01/29 职场文书
医院保洁员岗位职责
2015/02/13 职场文书