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实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
利用Python破解验证码实例详解
Dec 08 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
详解Python给照片换底色(蓝底换红底)
Mar 22 Python
Django中信号signals的简单使用方法
Jul 04 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
Windows下实现将Pascal VOC转化为TFRecords
Feb 17 Python
Python爬虫之Spider类用法简单介绍
Aug 04 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中的超全局变量
2006/10/09 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
PHP单例模式详细介绍
2015/07/01 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
我的javascript 函数链之演变
2011/04/07 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
Backbone.js的一些使用技巧
2015/07/01 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
python之Socket网络编程详解
2016/09/29 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
python对一个数向上取整的实例方法
2020/06/18 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
研究生自荐信
2013/10/09 职场文书
信息工程学院毕业生推荐信
2013/11/05 职场文书
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
总裁助理岗位职责
2014/02/17 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书