django项目开发模拟auth的做一个登录验证(二)
2017-12-09 21:59
519 查看
上一章节我们实现了密码的加密解密与修改密码,本章讲述模拟
2、封装登录的方法
3、测试
1、导包
2、定义一个装饰器
3、使用
1、定义一个中间件
2、在
3、测试
1、定义一个上下文
2、在
3、测试
2、相同点是他们都有点类似定义了一个全局变量,在整个项目中都可以获取到
3、主要区别:中间件是使用在后端代码中使用,而上下文是在前端模板中使用
4、在现在前后端分离开发的情况下上下文有点类似前端的本地存储,在实际开发过程中已经不需要定义了,除非你还是使用的是前后端不彻底分离的开发模式才需要使用
auth封装登录、退出、装饰器、中间件、上下文的功能
一、封装登录的函数
1、导包(使用第二种加密方式的模块)from models import WebUserModel import configs
2、封装登录的方法
# 封装登录的方法 def front_login(request, email, password): # 根据邮箱查询用户密码 webUser = WebUserModel.objects.filter(email=email).first() if webUser: # 校验用户输入的密码是否正确 result = webUser.check_password(password) if result: # 把当前用户的uid保存到request.session request.session[configs.LOGINED_KEY] = str(webUser.uid) return webUser else: return None else: return None
3、测试
# 测试登录 def login(request): email = 'aab@qq.com' password = '123' result = front_login(request,email,password) print '*'*100 print result print '*'*100 if result: return render(request, 'login.html') else: return HttpResponse(u'login fail')
二、退出的封装
1、具体代码# 封装退出的方法 def front_logout(request): try: del request.session[configs.LOGINED_KEY] except KeyError: pass
三、登录的装饰器
装饰器实际上就是一个函数,一个接收一个函数的柯理化函数1、导包
import configs from django.shortcuts import redirect, reverse
2、定义一个装饰器
# 定义一个登录的装饰器 def front_login_required(func): def wrapper(request, *args, **kwargs): # 从request中获取登录时候存放的uid uid = request.session.get(configs.LOGINED_KEY) if uid: return func(request, *args, **kwargs) else: # 模仿auth的装饰器 url = reverse(configs.FRONT_LOGIN) + '?next=' + request.path return redirect(url) return wrapper
3、使用
from frontauth.decorators import front_login_required @front_login_required def index(request): return render(request,'index.html')
四、中间件
中间件是在request和
view之间以及
view和
response之间做一些处理的
1、定义一个中间件
from django.utils.deprecation import MiddlewareMixin
from models import WebUserModel import configs
# 定义一个前端的中间件
class AuthFrontMiddleWare(MiddlewareMixin):
# 处理view->request
def process_request(self, request):
# 1.从request中获取uid判断是否登录
if request.session.get(configs.LOGINED_KEY):
# 2.判断当前的request中是否已经添加了front_user
if not hasattr(request, 'front_user'):
uid = request.session.get(configs.LOGINED_KEY)
webUser = WebUserModel.objects.filter(pk=uid).first()
setattr(request, 'front_user', webUser)
# 处理view->response
# def process_response(self, request,response):
# pass
2、在
settings.py文件中注册
MIDDLEWARE = [ ... 'frontauth.middlewares.AuthFrontMiddleWare', # 注册自己定义的中间件 ]
3、测试
def middleWares(request): if hasattr(request,'front_user'): print request.front_user return HttpResponse(u'已经有中间件front_user') else: return HttpResponse(u'还没有中间件front_user')
五、上下文处理器
上下文处理器返回的是一个字典(别的语言叫对象,这个是必须的)1、定义一个上下文
import configs from models import WebUserModel def FrontAuth(request): # 1.判断用户是否登录 uid = request.session.get(configs.LOGINED_KEY) if uid: if hasattr(request,'front_user'): return {'front_user':request.front_user} else: webUser = WebUserModel.objects.filter(pk=uid).first() return {'front_user': webUser} else: return {}
2、在
settings.py文件中注册
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ ... 'frontauth.contextProcessors.FrontAuth' ], }, }, ]
3、测试
<h1>{{ front_user.email }}</h1>
六、总结对比中间件与上下文
1、相同点是定义了都需要在settings.py文件中注册
2、相同点是他们都有点类似定义了一个全局变量,在整个项目中都可以获取到
3、主要区别:中间件是使用在后端代码中使用,而上下文是在前端模板中使用
4、在现在前后端分离开发的情况下上下文有点类似前端的本地存储,在实际开发过程中已经不需要定义了,除非你还是使用的是前后端不彻底分离的开发模式才需要使用
七、代码下载地址传送门
相关文章推荐
- django项目开发模拟auth的做一个登录验证(一)
- MVC4项目中验证用户登录一个特性就搞定
- Struts开发一个权限验证拦截器来判断用户是否登录
- django开发环境搭建和创建一个简单的django项目
- 使用Django开发一个图书管理系统 03----迈出第一步,建立项目
- python练习笔记——编写一个装饰器,模拟登录的简单验证
- django开发项目实例3--用session是实现简单的登陆、验证登陆和注销功能
- Django框架下使用ajax模拟用户登录验证
- 使用Django开发一个ToDoList小项目
- 模拟IE登录一个需要(windows身份)验证的网站
- DJango-如何快速准备Python虚拟开发环境并快速定制一个项目
- pythonWeb -- Django开发-创建一个Django项目
- MVC4项目中验证用户登录一个特性就搞定
- 使用Django开发一个图书管理系统 03----迈出第一步,建立项目
- django实战--天天生鲜项目开发(用户注册-登录-用户中心)
- MVC4项目中验证用户登录一个特性就搞定
- EOS非Portal模式下,如何开发一个用户登录验证程序,用户只有在登录验证通过后,方可访问系统。
- Django+xadmin开发笔记(二) 一个简单的django项目开发
- django开发项目实例1--建立一个项目并初步运行
- [转]MVC4项目中验证用户登录一个特性就搞定