django自定义实现登录验证


  • django内置的登录验证必须让开发者使用django内置的User模块,这会让开发者再某些方面被限制住
  • 下面的模块是我自己自定义实现的django验证,使用方式和django的一样
  •  from django.http import HttpResponse
    from django.shortcuts import redirect
    from django.conf import settings
    from django.views import View class HttpResponseUnauthorized(HttpResponse):
    status_code = 401 def login(request, user):
    request.session['login'] = user.id def logout(request):
    request.session.flush() def login_required(func):
    """
    对需要登录的视图函数进行验证
    @login_required
    def your_view(request, *args, **kwargs):
    ''''''
    """ def wrapper(*args, **kwargs):
    request = args[0]
    is_login = request.session.get('login') if not is_login:
    redirect_url = '%s?next=%s' % (settings.LOGIN_URL, request.path)
    return redirect(redirect_url)
    else:
    result = func(*args, **kwargs)
    return result return wrapper class LoginRequired(View):
    """
    对需要登录的类视图进行验证
    class YouView(LoginRequired):
    ''''''
    """ @classmethod
    def as_view(cls, **initkwargs):
    view = super(LoginRequired, cls).as_view()
    return login_required(view)
  • 当验证用户名密码成功后,使用login登入一个用户,将request,和登录后的user对象(model的实例)传进去, 即可记录下当前用户的登录状态
  • 退出用户直接将session清除即可。
  • 对于函数视图,用装饰器对函数视图进行装饰:
    • 判断当前的请求request里面的session有没有被login生成一个key为'login'的值:
      • 如果没有则跳转到登录页面
      • 有则进行正常访问
  • 类视图调用的是as_view方法,可以在urls里面对该url对应的类视图的as_view用login_required进行调用,这种方法比较繁琐,代码可读性查
  • 对于类视图,因为类视图最后都要调用as_view方法,可以重新写一个类来继承View,重写View的as_view方法。
    • 调用父类的as_view方法,将返回的view对象用login_required进行调用,最后实现了类方法的验证

django自定义实现登录验证-更新版的更多相关文章

  1. 自定义Django中间件(登录验证中间件实例)

    前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰 ...

  2. Django 中间件版登录验证

    中间件版的登录验证需要依靠session,所以数据库中要有django_session表. urls.py # urls.py from django.conf.urls import url fro ...

  3. 如何使用Django实现用户登录验证

    最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...

  4. Django 自带登录验证:authenticate和login,login_require,logout模块

    验证之前需要在settings 中指定验证数据models AUTH_USER_MODEL = 'crm.UserProfile'#app名字.表名字 1.authenticate是一个方法,验证账号 ...

  5. SpringSecurity系列之自定义登录验证成功与失败的结果处理

    一.需要自定义登录结果的场景 在我之前的文章中,做过登录验证流程的源码解析.其中比较重要的就是 当我们登录成功的时候,是由AuthenticationSuccessHandler进行登录结果处理,默认 ...

  6. Spring-Security 自定义Filter完成验证码校验

    Spring-Security的功能主要是由一堆Filter构成过滤器链来实现,每个Filter都会完成自己的一部分工作.我今天要做的是对UsernamePasswordAuthenticationF ...

  7. 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)

    前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...

  8. nutz中实现登录验证

    一.nutz是什么 nutz是一个轻便的web端开发框架.主页如下:http://www.nutzam.com/core/nutz_preface.html 二.session简单介绍 大家都知道ht ...

  9. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

随机推荐

  1. 测试必知必会系列- Linux常用命令 - mv

    21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 移动当 ...

  2. js获取按钮的文字

    button按钮有两种情况: 1 <input type="button" id="button" value="button"> ...

  3. .Net Framework 工具Mpgo.exe与Ngen.exe

    首先放出官方MSDN的文档地址 Mpgo.exe 主要用于分析程序集启动时需要哪些东西,然后将信息反馈给NGen.exe 来更好的优化本机映像,使得应用程序启动更快,工作集缩小.准备发布时,用MPGO ...

  4. JS排序算法--冒泡排序和选择排序

    在我们JS语法当中,数据类型中的复杂数据类型,有一项我们常用的数组数据类型,其中存储的数据有时是乱序的,需要排序,我们有多种方法,最简单的肯定是 :变量.sort(fonction(a,b){a> ...

  5. Natas25 Writeup(目录遍历、头部注入)

    Natas25: 打开页面,是一段引文以及可以选择语言的下拉list.查看源码,发现关键代码: function setLanguage(){ //选择语言 /* language setup */ ...

  6. SpringMVC框架——数据绑定

    Spring MVC 数据绑定 使用POJO绑定参数 entity package com.sunjian.entity; /** * @author sunjian * @date 2020/3/1 ...

  7. 强智教务系统验证码识别 OpenCV

    强智教务系统验证码识别 OpenCV 强智教务系统验证码验证码字符位置相对固定,比较好切割 找准切割位置,将其分为四部分,匹配自建库即可,识别率近乎100%,如果觉得不错,点个star吧

  8. WSL下卸载了zsh / fish后无法启动bash解决方案

    最近在鼓捣wsl,感觉自己用还是蛮好用的.听说1903要更新新的cmd,还蛮期待的 解决步骤: 建议先下载个everything , windows下非常好用的文件查找软件. 启动后搜索.bashrc ...

  9. 2019牛客多校第四场 A meeting

    链接:https://ac.nowcoder.com/acm/contest/884/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...

  10. HDU 1754 I hate it 树状数组维护区间最大值

    Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写 ...