Django 구성 요소 의 쿠키 와 session 사용 방법

8400 단어 Djangocookiesession
따옴표
http 프로 토 콜 은 무상 태 입 니 다.요청 과 응답 에 대한 정 보 를 기록 하지 않 습 니 다.예 를 들 어 서버 의 웹 페이지 를 방문 할 때 먼저 로그 인 한 다음 웹 페이지 에 들 어가 라 고 합 니 다.그러나 이 서버 의 다른 웹 페이지 에 들 어 가 려 고 할 때 방금 로그 인 했 고 로그 인 하 라 고 하 는 것 을 알 지 못 합 니 다.바로 bug 입 니 다.하지만 인터넷 에 접속 할 때마다 로그 인 만 하면 된다 고 했 습 니 다.제 가 매번 로그 인 하 라 고 한 것 은 아 닙 니 다.이것 은 세 션 경로 기술 이 로그 인 정 보 를 기록 해 준 것 입 니 다.지금 우 리 는 Django 의 세 션 경로 기술 인 쿠키 와 session 을 이야기 하고 세 션 추적 을 실시 합 니 다.
쿠키
쿠키 는 key-value 구조 로 사전 과 유사 합 니 다.서버 의 응답 에 따라 클 라 이언 트 브 라 우 저 에 보 내 고 클 라 이언 트 브 라 우 저 는 쿠키 를 저장 합 니 다.현재 서버 에 다시 접근 할 때 쿠키 를 서버 에 다시 보 냅 니 다.

문법:

 response.set_cookie()   #    cookie 
 request.COOKIES      # cookie 
쿠키 기반 로그 인 페이지 와 홈 페이지

def login(request):    #    
  if request.method=="GET":   
    return render(request,"login.html")
  else:
    user = request.POST.get("user")
    pwd = request.POST.get("pwd")

    user_obj=UserInfo.objects.filter(name=user,pwd=pwd).first()
    if user_obj:            ,  cookie ,      ,      cookie
      # obj=HttpResponse("    !")
      obj=redirect("/index/")
      obj.set_cookie("is_login",True,20)
      obj.set_cookie("username",user)
      return obj
    return HttpResponse("Error!")

def index(request):   #       

  print("request.COOKIES",request.COOKIES)
  is_login=request.COOKIES.get("is_login")  #    cookie ,      
  username=request.COOKIES.get("username")

  if not is_login: #     ,    ,         ,        
    return redirect("/login/")

  return render(request,"index.html",{"username":username})
세 션
위의 쿠키 는 브 라 우 저 에서 저 장 됩 니 다.현재 session 은 쿠키 를 기반 으로 하지만 서버 에 저 장 된 기술 입 니 다.서버 가 실 행 될 때 방문 하 는 브 라 우 저 마다 session 을 설정 한 다음 Django 아래 에 저 장 된 Djangosession 표 에 있 습 니 다.

문법:

request.session["k1"]="v1"     session 
 request.session.get("k1")    session 
 request.session.flush()      session 
session 기반 로그 인 페이지 와 홈 페이지 접근

def login(request):
  if request.method=="GET":
    return render(request,"login.html")
  else:
    user = request.POST.get("user")
    pwd = request.POST.get("pwd")
    user_obj=UserInfo.objects.filter(name=user,pwd=pwd).first()
    if user_obj:
      request.session["is_login"]=True
      request.session["username"]=user
      return redirect("/index/")
    return HttpResponse("Error!")def index(request):
  is_login=request.session.get("is_login")
  username=request.session.get("username")if not is_login:
    return redirect("/login/")
  return render(request,"index.html",{"username":username})
4.이미지 인증 코드 의 실현
HTML 파일:로그 인 페이지

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <link rel="stylesheet" href="/static/css/bootstrap.css" rel="external nofollow" >
  <script src="/static/jquery-3.3.1.js"></script>
  <script src="/static/js/bootstrap.js"></script>
</head>
<body>
{% csrf_token %}
<div class="container">
  <div class="row">
    <div class="col-md-5">
      <div style="color: blue;font-size: 20px">    </div>
      <div class="form-group">
           <input type="text" name="user" class="form-control">
      </div>
      <div class="form-group">
           <input type="password" name="pwd" class="form-control">
      </div>
      <div class="row form-group">
        <div class="col-md-6">   <input type="text" name="yan" class="form-control"></div>
        <div class="col-md-6" style="line-height:60px"><img src="/img_drow/" alt="" width="200" height="40"></div>
      </div>
      <button class="login">  </button>
      <p style="color: red;font-size: 30px"></p>
    </div>
  </div>
</div>
  <script>
    $('.login').click(function () {
      var name = $('[name="user"]').val();
      var pw = $('[name="pwd"]').val();
      var yan = $('[name="yan"]').val();
      $.ajax({
        url: '/login/',
        type: 'post',
        data: {csrfmiddlewaretoken: $('[name="csrfmiddlewaretoken"]').val(), user: name, pwd: pw, yan: yan},
        success: function (data) {
          if (data == '200') {
            location.href = '/books/'
          }
          else if (data == '100') {
            $('p').html('          ')
          }
          else {
            $('p').html('     ');
             var num=Math.random();
            $('img').attr('src', '/img_drow?'+num)
          }
        }
      })
    });
    $('img').click(function () {
      var num=Math.random();
      $(this).attr('src', '/img_drow?'+num)
    })
  </script>
</body>
</html>
views:

             
import random
from PIL import Image,ImageDraw,ImageFont
from io import BytesIO
def get_random_color():
  return random.randint(0,255),random.randint(0,255),random.randint(0,255)
def img_drow(request):
  img=Image.new('RGB',(200,40),get_random_color())
  draw=ImageDraw.Draw(img)
  font=ImageFont.truetype('static/fonts/kumo.ttf',34)
  keep_str=''
  for i in range(5):
    num=str(random.randint(0,9))
    lower=chr(random.randint(65,90))
    upper=chr(random.randint(97,122))
    random_char=random.choice([num,lower,upper])
    draw.text((i*30+50,0),random_char,get_random_color(),font=font)
    keep_str+=random_char
  width = 200
  height=40
  for i in range(10):
    x1=random.randint(0,width)
    x2=random.randint(0,width)
    y1=random.randint(0,height)
    y2=random.randint(0,height)
    draw.line((x1,y1,x2,y2),fill=get_random_color())
  for i in range(10):
    draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())
    x = random.randint(0, width)
    y = random.randint(0, height)
    draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())
  request.session['keep_str']=keep_str
  f=BytesIO()
  img.save(f,'png')
  data=f.getvalue()
  return HttpResponse(data)
def login(request):
  if request.method=='GET':
    return render(request,'login.html')
  else:
    yan=request.POST.get('yan')
    if yan.upper()==request.session.get('keep_str').upper():
      user=request.POST.get('user')
      pwd=request.POST.get('pwd')
      obj=UserInfo.objects.filter(name=user,pwd=pwd).first()
      if obj :
        request.session['state']=True
        request.session['user']=user
        return HttpResponse('200')
      else:
        return HttpResponse('100')
    else:
      return HttpResponse('300')
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기