django 装饰器 检测登录状态操作
作者:羽下佳人 发布时间:2021-03-13 16:40:40
标签:django,装饰器,登录
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.
解决办法: 判断用户session后,一定要return返回值
2、登录检查成功,路由未被更改,页面未跳转
解决办法: 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' # 自定义中间件
来源:https://blog.csdn.net/zjl199303/article/details/85156411
0
投稿
猜你喜欢
- 本文介绍了通过Cursor 工具使用GPT-4的方法。Cursor 是集成了 GPT-4 的 IDE 工具,目前免费并且无需 API Key
- 今天在学习vue的过程中,发现一个有趣的现象。在某一组件下的某一数据通过点击事件被动态修改的时候,对应view中的数据同步的进行了修改,没错
- 第一招、mysql服务的启动和停止net stop mysqlnet start mysql第二招、登陆mysql语法如下: mysql -
- 本文实例讲述了PHP队列用法。分享给大家供大家参考。具体分析如下:什么是队列,是先进先出的线性表,在具体应用中通常用链表或者数组来实现,队列
- 最近微信迎来了一次重要的更新,允许用户对”发现”页面进行定制。不知道从什么时候开始,微信朋友圈变得越来越复杂,当越来越多的人选择”仅展示最近
- 一、排序排序查询语法:select * from 表名 order by 列1 asc/desc [,列2 asc/desc,..
- 最近因为编程,需要大量地看一些说明文档,无奈说明文档都是英文的,可把我这个半桶水折腾死了,太多词汇不知道,一个个复制翻译太麻烦了。于是我根据
- (1) os.system仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息system(command) -> exit_
- 本文介绍python如何进行截图保存的几种方法,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图。结合Python其它模块如time
- 本文实例讲述了Python多线程threading模块用法。分享给大家供大家参考,具体如下:多线程 - threadingpython的th
- 修复Access数据库,我们一般使用微软Office 97中带的Access 97对数据库进行修复和整理。Access数据库被损坏分以下几种
- 本文介绍了Python 堆叠柱状图绘制方法,分享给大家,具体如下:'''''''
- Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么。在讲is和==这两种运算符区别之前,首先要知道Py
- reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中。reduce函数先从列表(或序列
- 本文为大家分享了微信小程序实现留言板的具体实现方法,供大家参考,具体内容如下先说一下小程序的开发环境之类的基础东西1.到微信公众平台下载开发
- 函数很简单, 主要是针对字符串和数字两种类型的传入数据分别进行了处理,具体用法:字符类型的strUsername = C
- 前言defer语句被用于预定对一个函数的调用。我们把这类被defer语句调用的函数称为延迟函数。而defer 延迟语句在其他编程语言里好像没
- BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_i
- 本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下:Python版本: python3.+ 运
- 本文实例讲述了python使用正则表达式分析网页中的图片并进行替换的方法。分享给大家供大家参考。具体分析如下:这段代码分析网页中的所有图片表