Django中 cookies and session的使用

Django中 cookies and session的使用

  1. http協議html

    • 兩個特性:
      • 無鏈接:一次請求一次響應就斷開。
      • 無狀態:不記住上次鏈接的信息,每次鏈接都是新的鏈接。
    • 後面出現:短鏈接(keep-alive)
  2. cookie:會話跟蹤(解決http協議無狀態)python

    • what:首先來說,cookie是瀏覽器的技術,Cookie具體指的是一段小信息,它是服務器發送出來存儲在瀏 覽器上的一組組鍵值對,能夠理解爲服務端給客戶端的一個小甜點,下次訪問服務器時瀏覽器會自動攜帶這些鍵值對,以便服務器提取有用信息。django

    • 規範:瀏覽器

      • 大小上限爲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. sessioncookie

    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')
相關文章
相關標籤/搜索