session

Shin Woohyun·2021년 7월 10일
0

사용자 마다 다른 session에 task가 저장되게 한다.

  1. 처음 온 사용자라면 request.session에 tasks가 없을 것이다. session에 {"tasks":[]}을 저장한다.
  2. 두 번째로 온 사용자부터는 session에 저장된 값을 준다.

views.py

def index(request):
    if "tasks" not in request.session:
        request.session["tasks"] = []

    return render(request, "tasks/index.html", {
        "tasks": request.session["tasks"]
    })

"no such table: django_session" 에러가 뜬다.
장고는 테이블에 정보를 저장하는데 테이블이 없어서 나오는 에러이다.
python manage.py migrate로 default tables를 생성할 수 있다.

tasks가 없을 경우 텅 빈 칸을 보여주는 것보다는 없다는 메시지를 보여주자.

index.html

{% extends "tasks/layout.html" %}

{% block body %}
    <h1>Tasks</h1>
    <ul>
        {% for task in tasks %}
            <li>{{ task }}</li>
        {% empty %}
            <li>No tasks.</li>
        {% endfor %}
    </ul>

    <a href="{% url 'tasks:add' %}">Add a New Task</a>
{% endblock %}

views.py의 add 함수에서
tasks.append(task)request.session["tasks"] += [task]로 바꾸어 준다.
-> 이제 사용자 마다 task가 각각의 session에 저장되고 보여진다.

from django.shortcuts import render
from django import forms
from django.http import HttpResponseRedirect
from django.urls import reverse

class NewTaskForm(forms.Form):
    task = forms.CharField(label="New Task")
    priority = forms.IntegerField(label="Priority", min_value=1, max_value=5)

# Create your views here.
def index(request):
    if "tasks" not in request.session:
        request.session["tasks"] = []

    return render(request, "tasks/index.html", {
        "tasks": request.session["tasks"]
    })

def add(request):
    if request.method == "POST":
        form = NewTaskForm(request.POST)
        if form.is_valid():
            task = form.cleaned_data["task"]
            request.session["tasks"] += [task]
            return HttpResponseRedirect(reverse("tasks:index"))
        else:
            return render(request, "tasks/add.html", {
                "form":form
            })

    return render(request, "tasks/add.html", {
        "form": NewTaskForm()
    })

django 설치, 앱 만들기, html 띄워보기, post 요청 받아오기, session에 저장하기 등등 겉 햝기를 해보았다.

0개의 댓글