Django 深入浅出认证系统

cookie session

解决问题:
在这里插入图片描述
比较:
在这里插入图片描述

Session 存储引擎

存储session的容器,封装一系列方便操作session_key或session的方法,例如get、save、create等,同时实现__getitem__、setitemdelitem、__contains__方法,实现字典操作session。

Django 有哪些存储容器?根据配置文件选用:SESSION_ENGINE

在这里插入图片描述
session的操作:

1. 如果操作Session
写:
request.session["user_id"] = user.id
查看:
request.session.get('user_id')
request.session['user_id'],不推荐,不存在会报错
request.session.keys()、request.session.items()
删除:
del request.session['user_id']
request.session.pop(key)
存在判断:
'user_id' in request.session

在这里插入图片描述
配置项:
在这里插入图片描述
Django两个重要的中间件:

Django 自带了两个中间件:SessionMiddleware 与 AuthenticationMiddleware

(AuthenticationMiddleware 依赖 SessionMiddleware)


分别在(注意引入顺序):

'django.contrib.sessions.middleware.SessionMiddleware'

'django.contrib.auth.middleware.AuthenticationMiddleware'

在这里插入图片描述

Sessionmiddleware

在这里插入图片描述

1. views里面为何能直接操作session?
django.contrib.sessions.middleware.SessionMiddleware

2. 功能实现:
__init__初始化:

1. 动态导入对应的配置Session存储引擎

process_request: 

1. 从Cookie中获取session_id
2. 初始化Session存储引擎

process_response:
 
1. 保存session
2. 写cookie

AuthenticationMiddleware

1. views里面为何能直接操作user对象?
django.contrib.sessions.middleware.AuthenticationMiddleware

2. 功能实现:

process_request:

1. 从session中获取session_id

2. 通过session_id获取登陆用户,没有
则返回一个匿名用户AnoymouseUser

在这里插入图片描述

login_required装饰器

登陆限制装饰器:AuthenticationMiddleware绑定的对象进行校验,看是用户还是匿名用户

在这里插入图片描述
例如:

api_login_required

weixin_partner_login_required (get_user_from_request)在这里插入图片描述
在这里插入图片描述
相关登陆校验器
在这里插入图片描述

认证工作流程

Django 认证提供了认证(authentiaction)和授权(authorization)两种功能,
认证相关功能集中于auth模块,它提供了登录、注册、效验、修改密码、注销、验证用户是否登录等功能。
Django的认证主要是用户名和密码验证。

在这里插入图片描述

表关系

在这里插入图片描述

User表操作

在认证系统中User对象是其核心部分。完整的路径: django.contrib.auth.models.User
用户创建:

User.objects.create_user
User.objects.create_superuser

密码修改:
user.set_password('新的密码')

密码检查:
user.check_password('密码')

登录验证:

from django.contrib.auth import authenticate
user = authenticate(username=d, password='111111') # 验证通过,返回一个User对象。

分布式session

概念:
单服务器web应用中,session只会存储在该服务器中。

随着日益增长的用户量,单服务节点无法应对大量用户的访问,我们开始考虑适用服务器集群,

例如采用nginx做负载均衡反向代理,那么就会出现用户每次访问都会轮询到不同的web应用服务器节点,

从而导致获取不到Session的情况。

解决分布式一致性问题

在这里插入图片描述

优点

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一本讲解 Django 的书。Django 是一个 Web 开发框架,能节省 Web 开发的时间,让整个过程充满欢乐。使用 Django 开发 Web 应用能达到事半功倍的效果。本书对 The Django Book 做了全面的修订和升级。The Django Book 最初由 Apress 于 2007 年出版,题为 The Definitive Guide to Django: Web Development Done Right,后来又由两位作者在 2009 年重新出版,而且书名换成了 The Django Book。后者是一个开源项目,基于 GUN 自由文档许可证(GFDL)发布。 本书可以认为是 The Django Book 的非官方第三版。不过,我是否有这个荣幸,还要看 Jacob 和 Django 社区是否认可。对我个人而言,我十分希望 The Django Book 能够得到更新,因为我就是从那本书入门的。为了保留 Adrian 和 Jacob 对 The Django Book 的最初期许,本书的源码在本书的网站上也可以免费获取。 本书的主要目的是把你打造成 Django 专家。本书集中讲解两方面的内容。首先,深入说明 Django 的机制,教你使用它构建 Web 应用。其次,适当讨论高级概念,说明如何在项目中有效使用相关的工具。阅读本书你将学会快速开发强大网站所需的技能,而且写出的代码简洁、易于维护。 本书的第二个目的(没那么重要)是为程序员提供一份关于 Django 长期支持(Long Term Support,LTS)版本的手册。目前,Django 已经成熟,很多重要的商业网站都使用它开发。因此,本书意欲成为采用 Django1.8 LTS 的商业网站的最新权威参考资源。本书电子版会一直更新,直到对 Django 1.8 的支持结束(2018年)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值