django实现登录原理
写道
django自带auth模块,可实现用户验证登录
当用户登录了网站,django通过两个中间键验证用户登录:
django.contrib.sessions.middleware.SessionMiddleware 和
django.contrib.auth.middleware.AuthenticationMiddleware
当用户登录了网站,django通过两个中间键验证用户登录:
django.contrib.sessions.middleware.SessionMiddleware 和
django.contrib.auth.middleware.AuthenticationMiddleware
写道
1.当用户登录成功,服务器生成一个sessionid,保存于数据库,并写到用户浏览器cookie中
2.用户再次访问,首先中间键SessionMiddleware会读取这个名为sessionid的cookie,根据该值查询数据库,获取用户id,生成一个session对象
3.然后中间建AuthenticationMiddleware根据session对象获取用户user对象,保存成request.user
4.当处理对应的视图函数时,request中就保存的相应的user对象,可判断是否登录
2.用户再次访问,首先中间键SessionMiddleware会读取这个名为sessionid的cookie,根据该值查询数据库,获取用户id,生成一个session对象
3.然后中间建AuthenticationMiddleware根据session对象获取用户user对象,保存成request.user
4.当处理对应的视图函数时,request中就保存的相应的user对象,可判断是否登录
写道
中间建AuthenticationMiddleware
文件:django/contrib/auth/middleware.py
文件:django/contrib/auth/middleware.py
from django.contrib import auth from django.core.exceptions import ImproperlyConfigured class LazyUser(object): def __get__(self, request, obj_type=None): if not hasattr(request, '_cached_user'): from django.contrib.auth import get_user request._cached_user = get_user(request) return request._cached_user class AuthenticationMiddleware(object): def process_request(self, request): assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'." request.__class__.user = LazyUser() return None
实现双系统用户验证原理
写道
要实现双系统用户验证,就不按正常的django验证流程,自己重写一个登录验证的中间件
具体实现原理:
用户请求访问系统A,系统A中间件同样首先读取相应的cookie值。得到cookie值后,不是像正常的流程一样查询数据库获取user对象
而且将该值发送给系统B,由系统B验证,如果系统B验证通过,则把该用户的username发送过来,如果没通过,则发送空值
系统A获取username后,去自己的auth_user表中查找,如果没有,则创建一个user对象(get_or_create)
最后将user对象保存于request.user中
具体实现原理:
用户请求访问系统A,系统A中间件同样首先读取相应的cookie值。得到cookie值后,不是像正常的流程一样查询数据库获取user对象
而且将该值发送给系统B,由系统B验证,如果系统B验证通过,则把该用户的username发送过来,如果没通过,则发送空值
系统A获取username后,去自己的auth_user表中查找,如果没有,则创建一个user对象(get_or_create)
最后将user对象保存于request.user中
具体操作
写道
1.setting文件中中间件'django.contrib.auth.middleware.AuthenticationMiddleware',
改成自己的中间件'myauth.middleware.AuthenticationMiddleware',
改成自己的中间件'myauth.middleware.AuthenticationMiddleware',
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', #'django.contrib.auth.middleware.AuthenticationMiddleware', 'myauth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', )
写道
2.创建app myauth, 并有文件middleware.py
myauth/middleware.py
from django.conf import settings from django.contrib.auth.models import AnonymousUser, User class LazyUser(object): def __get__(self, request, obj_type=None): if not hasattr(request, '_cached_user'): #from django.contrib.auth import get_user request._cached_user = get_user(request) return request._cached_user class AuthenticationMiddleware(object): def process_request(self, request): assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'." request.__class__.user = LazyUser() def get_user(request): session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None) user_dict = get_user_from_icnet(session_key) if user_dict: user, iscreate = User.objects.get_or_create(username=user_dict['username']) else: user = AnonymousUser() return user def get_user_from_icnet(session_key): user_dict = {'username': 'test'} return user_dict
相关推荐
Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书...
python课程设计基于Django实现的电子商城系统源码,数据库MySQL 包括注册、登录、购物车、订单中心、管理员管理商品、管理员管理用户等功能 管理员账号:admin 管理员密码:admin python课程设计基于Django实现的...
Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统...
Python+Django实现基于人脸识别的门禁管理系统【源码】Python+Django实现基于人脸识别的门禁管理系统【源码】Python+Django实现基于人脸识别的门禁管理系统【源码】Python+Django实现基于人脸识别的门禁管理系统...
使用django实现的一个图书管理系统,可以进行借书,还书,后台登录,多用户借书功能。 使用django实现的一个图书管理系统,可以进行借书,还书,后台登录,多用户借书功能。 使用django实现的一个...
Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django...
使用Django实现的文件分享系统,实现搜索功能,分享功能,用户分享文件查询,写该项目的目的主要是用于保存一些电子书籍和学习资料,方便自己和其他人查找资料,所以对文件大小进行限制最大为5M。 使用Django...
django实现用户的登录注册连接后台数据库完成主页的搭建,并且附有忘记密码 验证码等功能。
Python基于Django框架实现的一个学生信息管理系统源码 Python基于Django框架实现的一个学生信息管理系统源码 Python基于Django框架实现的一个学生信息管理系统源码 Python基于...
基于python框架django实现的个人博客管理系统包含前端+后台 运行环境 django1.10+python3+sublime text3+Navicat Premium+cmd命令 项目技术 django+python+sql+cmd+html+css+jquery 使用分页插件,jquery实现万年历...
使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现...
python+django+bootstrap实现的管理系统,注释全,功能强大,又文档说明,导入即可查看源码,初学者必备
Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频...
一个基于django实现的轻量级文件共享系统源码 一个基于django实现的轻量级文件共享系统源码 一个基于django实现的轻量级文件共享系统源码 一个基于django实现的轻量级文件共享系统源码 一个基于django实现的轻量...
基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于...
可修改用户信息,头像,个性签名等
python+Django+layui实现婚庆系统源码 python+Django+layui实现婚庆系统源码 python+Django+layui实现婚庆系统源码 python+Django+layui实现婚庆系统源码 python+Django+layui实现婚庆系统源码 python+...
主要介绍了Django异步任务线程池实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
python-Django实现用户登录
Django实现登录-注册等功能==仅供参考