django 装饰器 检测登录状态操作

作者:羽下佳人 时间:2021-03-13 16:40:40 

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 装饰器 检测登录状态操作

来源:https://blog.csdn.net/zjl199303/article/details/85156411

标签:django,装饰器,登录
0
投稿

猜你喜欢

  • MySQL root账号远程新建数据库报错1044问题及解决方法

    2024-01-23 23:37:56
  • 了解一点js的Eval函数

    2024-04-19 09:59:45
  • 关于windos10环境下编译python3版pjsua库的问题

    2021-06-04 08:12:13
  • Python实现原神抽卡的方法

    2023-11-16 00:01:43
  • Python Flask入门之模板

    2023-10-05 01:44:10
  • Python实现简单拆分PDF文件的方法

    2022-09-27 19:20:37
  • jQuery 1.3的VS智能提示下载

    2009-01-18 12:54:00
  • 一个简单的北京2008奥运倒计时代码

    2008-03-16 14:15:00
  • python实现图片转字符画

    2021-02-13 22:58:33
  • golang 实现tcp转发代理的方法

    2023-08-06 02:46:55
  • matplotlib 输出保存指定尺寸的图片方法

    2021-09-06 11:29:12
  • Golang指针隐式间接引用详解

    2024-02-22 02:29:53
  • ASP中Cache技术的应用

    2007-09-28 12:41:00
  • python实现批量获取指定文件夹下的所有文件的厂商信息

    2021-12-14 20:42:27
  • SQL Server导入导出数据方法

    2007-08-17 09:50:00
  • word-wrap同word-break的区别

    2007-10-24 20:08:00
  • go解析svn log生成的xml格式的文件

    2024-03-13 15:13:34
  • 使用Python为中秋节绘制一块美味的月饼

    2023-06-30 17:36:10
  • Vue前端后端的交互方式 axios

    2024-05-21 10:28:58
  • 如何用js实现鼠标向上滚动时浮动导航

    2024-04-19 09:55:24
  • asp之家 网络编程 m.aspxhome.com