쿠키나 세션의 도움 없이 로그인 정보를 다른 페이지에서 이어받으려고 redirect 함수에 텍스트를 전달했으나 오류가 발생했다. render 함수에서는 딕셔너리 형태로 전달 가능했는데 안되길래 찾아봤다.
render 함수는 template 과 context(dict)를 인자로 전달할 수 있다. 따라서 views.py 에서 http method 에 따라 결과를 return 할 때, render 함수에 template을 전달하여 해당 html로 이동한다.
views.py
class SignView(View):
def get(self,request):
form = LogInForm()
return render(request, "user/login.html", {"form":form})
위와 같이 GET 요청이 들어 왔을때, django form을 context로 login.html 에 전달한다.
rediect는 template이 아니라 url주소 자체를 인자로 받는다. context는 인자로 줄 수 없다. 요청에 대한 응답으로 이동할 url경로만 줄 수 있다.
views.py
def post(self,request):
...
return redirect("user:login")
django 에서 모델을 만들고 데이터를 조작하다보면 queryset을 다룰 일이 생긴다. 자주 쓴 것들 위주로 정리해보자.
Queryset : 파이썬으로 정의된 models.py의 데이터가 sql과 매핑되어 queryset이라는 자료 구조로 변환됨
이 밖에도 count(), latest() 등등 워낙 많다.
하나 더 주의할 점은 해당 값들이 전부 List 형태로 반환된다. 따라서 index or slicing 을 통해서 처리한 후에 value에 접근할 수 있다.
# sqlite3
delete from table;
delete from sqlite_sequence where name="table";
# html
{% load static %}
<link href="{% static 'style/login.css' %}"/>
#html
<form action = "{% url 'app_name:url-name' %}">
# project/urls.py
from django.urls import path, include
urlpatters = [
path("login/", include("user.urls")),
]