본문 바로가기

programming/Gukbi

국비 교육 109일차 - django cookie사용

728x90
반응형

자바에서 쿠키를 사용해봤듯이 파이썬 장고에서도 쿠키를 사용할 수 있다. 

오늘은 일단 이걸 연습해보겠다. 

 

가장 중요한 파일은 views이다. 세션에다 쿠키를 저장하기 때문에 작동원리를 이해하고 사용을 할 수 있어야 한다. 

<div class="row">
            {% for row in rd%}
            <div class="col-md-4">
                <div class="thumbnail">
                  <a href="/recipe/recipe_before/?no={{row.no}}">
                    <img src="{{row.poster}}" alt="Lights" style="width:100%">
                    <div class="caption">
                      <p>Lorem ipsum...</p>
                    </div>
                  </a>
                </div>
              </div>
            {% endfor %}
        </div>

 디테일을 넘어가기 전에 detail_before를 걸어준다. 디테일 화면을 보여주기전에 먼저 정보를 저장하고 들어가야해서

이렇게 써줘야 한다. 

 

def recipe_before(request):
    # 쿠키 저장
    no=request.GET['no']
    response=redirect('/recipe/recipe_detail/?no='+str(no))
    response.set_cookie(f"k{no}",no,60*60*24)
    return response

 우선 url주소에서 받아온 no값을 받아오고, response에 redirect를 저장한다. 

또 response에 쿠키정보를 셋팅해준다. 

 

그리고 response를 리턴한다

 

 

 

dao에서 쿠키에 사용할 데이터를 가져와준다. 

def recipe_info(no):
    conn=getConnection()
    cursor=conn.cursor()
    sql=f"""
        SELECT no,title,poster
        FROM recipe
        WHERE no={no}
    """
    cursor.execute(sql)
    data=cursor.fetchone()
    cursor.close()
    conn.close()
    return data

 no,title,poster정도만 가져와주면 된다. 

 

def recipe_list(request):
    try:
        page=request.GET['page']
    except Exception as e:
        page="1"

    curpage=int(page)
    recipe_data=recipeDao.recipeListData(curpage)
    rd=[]
    for r in recipe_data:
        rr={"no":r[0],"title":r[1],"poster":r[2],"chef":r[3]}
        rd.append(rr)
    temp = request.COOKIES
    cookie_data=[]
    if temp:
        for c in temp:
            if c.startswith('k'):
                value = request.COOKIES.get(c)
                print(value)
                cd=recipeDao.recipe_info(int(value))
                cd2={"no":cd[0],"title":cd[1],"poster":cd[2]}
                cookie_data.append(cd2)
    return render(request,'recipe/recipe_list.html',{"rd":rd,"cd":cookie_data})

 그리고 list의 목록을 출력해주는 views 메소드

 

 

일단 temp에서 request에 담겨있는 모든 쿠키정보를 받아온다. 

temp = request.COOKIES

 

 

만약 쿠키에 저장된 값이 있으면,

if temp:

 

for문을 돌려서 저장된 쿠키의 값을 하나씩 받아온다. 

        for c in temp:
            if c.startswith('k'):

 쿠키를 저장할때 k+{no} 형식으로 저장했기 때문에, 꼭 k로 시작하는 값들만 가져오게 한다. 

 

 

value = request.COOKIES.get(c)

 value에 cookie의 값 (여기서는 detail no)를 받아온다. 

 

 

cd=recipeDao.recipe_info(int(value))

 미리 dao에 만들어준 메소드를 사용해서 쿠키에 뿌려줄 값을 가져온다. 

 

cd2={"no":cd[0],"title":cd[1],"poster":cd[2]}
                cookie_data.append(cd2)

 딕트로 저장을 해주고, 배열에 값을 append해주면 끝이다. 

 

쿠키를 사용할지 안할지는 모르겠지만 일단 사용하고 싶으면 앞으로 이렇게 사용해보려한다. 

 

 

728x90
반응형