python登陆成功页面跳转_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.

20200702152222.jpg

解决办法: 判断用户session后,一定要return返回值

2、登录检查成功,路由未被更改,页面未跳转

20200702152230.jpg

解决办法: 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' # 自定义中间件

20200702152702.jpg

20200702152715.jpg

20200702152727.jpg

以上这篇django 装饰器 检测登录状态操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持python博客。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值