美文网首页django
django四、中间件、session与cookie实现登录注册

django四、中间件、session与cookie实现登录注册

作者: Jason_c8d4 | 来源:发表于2018-06-02 16:27 被阅读0次

    session cookie

    会话技术,比如在做登录功能的时候,需要配合是用存储在客户端的cookie信息,以及存储在服务端的session来实现登录功能。 在cookie中保存了用户的信息,特别是一个特殊的令牌信息,当用户拿着这个特殊的令牌来访问网站的时候,网站会从cookie中 获取这个特殊令牌去数据库session中去查询是否有这个对应的令牌的信息,如果有则验证成功,就可以把用户的信息返回给客户端 了,如果验证失败则提示用户没有登录等等提示信息。

    1. cookie

    1.1 描述
    浏览器端的回话技术
    cookie本身由浏览器生成,通过Response将cookie写在浏览器上,下一次访问,浏览器会根据不同的规则携带cookie过来
    
    
    1.2 设置cookie
        response.set_cookie(key, value, max_age=None, exprise=None)
        request.GET.get(key)
    
    

    注意:cookie不能跨浏览器

    参数定义:

        max_age :  整数,指定cookie过期时间,以秒为单位
        exprise: 整数,指定过期时间,还支持是一个datetime或者timedelta,可以指定一个具体日期时间
        max_age和exprise两个选一个指定
        过期时间的几个关键时间
        max_age设置为0浏览器关闭失效
        设置位None永不过期
        exprise=timedelta(days=10) 10天后过期
    
    

    2. session

    2.1 描述
    服务端会话技术,依赖于cookie
    
    
    2.2 开启session设置

    1)django中启用SESSION 在settings中修改如下地方

        INSTALLED_APPS:
            ‘django.contrib.sessions’
        MIDDLEWARE:
            ‘django.contrib.sessions.middleware.SessionMiddleware’
    
    

    每个HttpResponse对象都有一个session属性,也是一个类字典对象 讲解cookie和session通信,session_id等

    2.3 常用操作

    get(key, default=None) 根据键获取会话的值 clear() 清除所有会话 flush() 删除当前的会话数据并删除会话的cookie delete request[‘session_id’] 删除会话 session.session_key 获取session的key 设置数据 request.session[‘user’] = username 数据存储到数据库中会进行编码使用的是base64 注意: Session 支持中文 cookie不支持中文 token自己维护

    登录注册

    通过cookie和token去实现登录功能,用户在登录账号以后,随机产生一个随机数并存在cookie中,并在服务端也存储同一个数在数据库中。 当下一次url请求过来的时候,解析request中绑定的cookie信息,解锁出之前存的随机数,判断该随机数是否是存储在服务器端的数据,如果 没有查询到则表示该cookie过期,或者该cookie是伪造的,或者服务器上存储该信息的数据缓存到期被清空了。则该提示用户重新登录,并且 重新产生随机数,并存储在cookie中以及服务端,以保证下次请求和响应能够顺利。

    操作演示

    1. 编写一个方法,用于注册用户的账号和密码。

    2. 编写一个方法,用于登录用户的账号和密码,并且登录的时候绑定一个加密的参数在cookie上,并且该加密参数也存储在服务端中。

    3)在以后的任意一个请求,我们都获取request中的cookies,查看cookie中绑定的参数是否合法,以及查询是否在服务端存储了。

    4)如果验证成功则返回请求url的结果信息到页面,如果验证失败则返回错误提醒信息页面

    1. 注销登录

    6)定义装饰器去验证用户登录以后才执行对应的视图函数,反之跳转到登录页面中

    1. 注册方法

    从页面中获取账号和密码,进行创建

    image.png

    2. 登录,并且绑定参数到cookie上

    先检验用户名是否在数据库中,如果查询到则继续验证密码, 如果密码验证对,则绑定一个参数到cookie中。 解析密码,加密密码来源与一下的模块:

    from django.contrib.auth.hashersimportcheck_password,make_password
    
    image.png

    3. 在方法中验证cookie中传递的参数是否正确

    cookie是在用户提交url请求的时候都会带上的一个参数,所以可以从中获取到我们设置的参数,并且在服务端进行验证,看服务端有这个标识符没有, 如果能查询到,则表示用户登录过了,并且还在登录时效内,则直接返回用户提交url对应的响应。如果在服务端没有查询到数据,则表示标识符过期, 或者无效了,需要登录了,则直接提示错误信息即可!

    image.png

    4. 注销登录

    删除cookie中的认证令牌

    image.png

    5. 通过定义装饰器去验证用户是否是登录状态,如果不是,则跳转到登录

    定义装饰器--闭包

    image.png

    django自带的登录注册

    在django中,django帮我们封装好了登录注册以及注销的函数,在下面的代码案例中,我们将使用django定义好的注册登录注销函数去实现用户的登录验证,用户登录,以及用户注销等操作,以及定义login_rqueired装饰器,去装饰我们定义的函数,实现登录才能处理对应的业务逻辑

    1. 实现注册方法

    1.1 页面提交注册字段

    在页面的form中有一下三个字段,用户名和密码1和密码2,页面在submit提交的时候,会提交该三个字段后后端,在后端中获取该参数即可

    image.png

    1.2 后端处理注册的信息

    后端获取前端传递的参数,进行简单的验证后,进行创建用户的信息

    image.png

    2. 实现登录方法

    2.1 登录页面提交登录的字段

    image.png

    2.2 后端进行登录的验证

    image.png

    3. 实现注销方法

    image.png

    中间件

    中间件:

    a) 是一个轻量级的,底层的插件,可以介入Django的请求和响应的过程(面向切面编程)

    b) 中间件的本质就是一个python类

    c) 面向切面编程(Aspect Oriented Programming)简称AOP,AOP的主要实现目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获取逻辑过程中各部分之间低耦合的隔离效果

    1.1 中间件的处理函数
    __init__:没有参数,在服务器响应的第一个请求的时候自动调用,用户确定时候启动该中间件
    
    process_request(self, request): 在执行视图前被调用,每个请求上都会被调用,不主动进行返回或返回HttpResponse对象
    
    process_view(self, request, view_func,view_args, view_kwargs):调用视图之前执行,每个请求都会调用,不主动进行返回或返回HttpResponse对象
    
    process_template_response(self, request, response):在视图刚好执行完后进行调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
    
    process_response(self, request, response):所有响应返回浏览器之前调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
    
    process_exception(self, request, exception):当视图抛出异常时调用,不主动进行返回或返回HttpResponse对象
    
    
    1.2 处理流程
    image.png
    1.3 自定义中间件流程
    1. 在工程目录下创建middleware目录

    2. 目录中创建一个python文件

    3. 在根据功能需求,创建切入需求类,重写切入点方法

    4.  from django.utils.deprecation import MiddlewareMixin
      
       class AuthUserMiddleWare(MiddlewareMixin):
      
           def process_request(self, request):
      
              print(‘xxxx’)
      
      
    5. 启动中间件,在settings中进行配置,MIDDLEWARE中添加middleware.文件名.类名

    image.png

    相关文章

      网友评论

        本文标题:django四、中间件、session与cookie实现登录注册

        本文链接:https://www.haomeiwen.com/subject/ljbidftx.html