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.
解决办法: 判断用户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
标签:django,装饰器,登录
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
ubuntu 18.04搭建python环境(pycharm+anaconda)
2023-09-23 20:01:56
![](https://img.aspxhome.com/file/2023/9/62579_0s.png)
ASP脚本循环语句
2009-02-19 13:34:00
在线Ajax载入动画生成工具 - Loadinfo
2008-02-18 13:34:00
![](https://img.aspxhome.com/file/UploadPic/20082/18/2008218134327641s.jpg)
python简单获取本机计算机名和IP地址的方法
2021-04-18 01:46:16
Python 使用 PyQt5 开发的关机小工具分享
2023-09-15 05:06:02
HTML编写小经验
2011-06-14 09:43:14
Python中使用PyHook监听鼠标和键盘事件实例
2022-03-23 16:53:22
python爬取淘宝商品详情页数据
2021-05-28 14:38:08
![](https://img.aspxhome.com/file/2023/0/75240_0s.png)
基于Python中isfile函数和isdir函数使用详解
2023-05-10 00:46:50
利用location.hash实现跨域iframe自适应高宽
2009-08-02 20:31:00
使用Python制作表情包实现换脸功能
2022-01-14 09:10:18
![](https://img.aspxhome.com/file/2023/4/81794_0s.webp)
JDBC连接MySQL数据库关键的四个步骤
2009-12-17 12:06:00
用browsercam做用户登录后页面的兼容性测试
2008-12-29 12:05:00
![](https://img.aspxhome.com/file/UploadPic/200812/29/20081226170940321-68s.png)
pandas 添加空列并赋空值案例
2022-12-04 13:48:16
![](https://img.aspxhome.com/file/2023/1/72091_0s.jpg)
Python+OpenCV六种实时图像处理详细讲解
2022-06-14 10:47:27
![](https://img.aspxhome.com/file/2023/5/85005_0s.png)
python 在某.py文件中调用其他.py内的函数的方法
2021-02-25 23:56:09
PyCharm设置每行最大长度限制的方法
2021-05-08 15:52:22
![](https://img.aspxhome.com/file/2023/6/82806_0s.jpg)
Python实现大数据收集至excel的思路详解
2022-02-03 10:25:25
Python dict的常用方法示例代码
2023-05-17 09:58:15
用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
2011-12-01 07:53:11