zoukankan      html  css  js  c++  java
  • Django中 cookies and session的使用

    Django中 cookies and session的使用

    1. http协议

      • 两个特性:
        • 无连接:一次请求一次响应就断开。
        • 无状态:不记住上次连接的信息,每次连接都是新的连接。
      • 后面出现:短连接(keep-alive)
    2. cookie:会话跟踪(解决http协议无状态)

      • what:首先来讲,cookie是浏览器的技术,Cookie具体指的是一段小信息,它是服务器发送出来存储在浏 览器上的一组组键值对,可以理解为服务端给客户端的一个小甜点,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。

      • 规范:

        • 大小上限为4kb
        • 一个服务器最多在客户端浏览器上保存20个cookie
        • 一个浏览器最多保存300个cookie,因为浏览器可以访问多个服务器。
        • 一个用户:一个浏览器:一个服务端
      • Django中使用:ret.set_cookie('k1','v1')

        from django.shortcuts import render,HttpResponse,redirect
        
        def wraper(f):
            def inner(request, *args, **kwargs):
                is_login = request.COOKIES.get('is_login')
                if is_login == 'True':
                    ret = f(request, *args, **kwargs)
                    return ret
                else:
                    # return redirect('login')
                    return HttpResponse('滚犊子')
            return inner
        
        @wraper
        def index(request):
            return render(request, 'index.html')
        
        def login(request):
            if request.method == 'GET':
                return render(request, 'login.html')
            else:
                username = request.POST.get('username')
                password = request.POST.get('password')
                print(username, password)
                if username == 'hqq' and password == '123':
                    ret = redirect('index')
                    ret.set_cookie('is_login', 'True')
                    return ret
                else:
                    return redirect('login')
        
        
    3. session

      table:django_session
        session_key   123ssfjasld
        session_data  {'username':'hqq'}加密后数据
      
      from django.shortcuts import render,HttpResponse,redirect
      
      def login_decorator(f):
          def inner(request, *args, **kwargs):
              if request.session.get('is_login') == True:
                  ret = f(request, *args, **kwargs)
                  return ret
              else:
                  return redirect('login')
          return inner
      
      
      def login(request):
          if request.method == 'GET':
              return render(request, 'login.html')
          else:
              username = request.POST.get('username')
              password = request.POST.get('password')
              print(username, password)
              if username == 'hqq' and password == '123':
                  # from django.conf import settings
                  # from django.conf import global_settings
                  # settings.SESSION_COOKIE_NAME
      
                  request.session['is_login'] = True
                  request.session['username'] = 'chao'
                  """
                  1.生成了sessionid:随机字符串;
                  2.在cookie里面加上了一个键值对,session_id:zdfafdsf;
                  3.将用户的数据进行了加密,并保存到了django-session表里。
      
                  session_key  session_data
                  assdfsfds     用户数据加密后的字符串
      
                  """
      
                  return redirect('home')
              else:
                  return redirect('login')
      
      
      @login_decorator
      def home(request):
          # print(request.session)
          # <django.contrib.sessions.backends.db.SessionStore object at 0x10d3b1e48>
          is_login = request.session.get('is_login')
          print(is_login)  # bool值的True
          """
                 1.从cookie里面拿出了session_id:xxx这个随机字符串
                 2.去django-session表里查询到对应的数据
                 3.反解加密的用户的数据,并获取用户需要的数据
      
          """
          return render(request, 'home.html')  
        
        
      
  • 相关阅读:
    缓存小记
    ffplay源码分析(转)
    (转)Qt之QNetworkProxy(网络代理)
    pcm编码为aac后播放变快且模糊
    Qt常用控件(转)
    Qml(二)Quick基本组件
    QML(一)HelloWorld
    C++ MySQL连接及增删改查操作
    Linux ar打包静态库 plugin needed to handle lto object 问题
    Qt笔记(二)linux下Qt安装使用
  • 原文地址:https://www.cnblogs.com/he-qing-qing/p/11271529.html
Copyright © 2011-2022 走看看