TIL (2020.06.13)

Awesome·2020년 6월 13일
0

TIL

목록 보기
13/46
post-custom-banner

오늘 알게 된 것들

render와 redirect

쿠키나 세션의 도움 없이 로그인 정보를 다른 페이지에서 이어받으려고 redirect 함수에 텍스트를 전달했으나 오류가 발생했다. render 함수에서는 딕셔너리 형태로 전달 가능했는데 안되길래 찾아봤다.

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 에 전달한다.

redirect

rediect는 template이 아니라 url주소 자체를 인자로 받는다. context는 인자로 줄 수 없다. 요청에 대한 응답으로 이동할 url경로만 줄 수 있다.

views.py
def post(self,request):
    ...
    return redirect("user:login")

Queryset API

django 에서 모델을 만들고 데이터를 조작하다보면 queryset을 다룰 일이 생긴다. 자주 쓴 것들 위주로 정리해보자.

Queryset : 파이썬으로 정의된 models.py의 데이터가 sql과 매핑되어 queryset이라는 자료 구조로 변환됨

  • Class.objects.all() : 해당 class의 모든 인스턴스를 보여준다.
  • Class.objects.values() : 해당 class의 모든 값을 보여준다.
  • Class.objects.create() : 해당 class의 인스턴스 생성
  • Class.objects.delete() : 해당 class의 인스턴스 제거
  • Class.objects.filter() : 특정 기준으로 인스턴스 추출
  • Class.objects.order_by("기준") : 특정 기준으로 정렬(- : desc)
  • Class.objects.update() : 특정 값 수정

이 밖에도 count(), latest() 등등 워낙 많다.
하나 더 주의할 점은 해당 값들이 전부 List 형태로 반환된다. 따라서 index or slicing 을 통해서 처리한 후에 value에 접근할 수 있다.

그 밖에 알게 된 것들

  • sqlite3 에서 생성되어 있는 데이터를 지우고 새로 추가하면 pk 가 가장 마지막에 있던 pk+1 이 된다. reset하고 싶은 경우
    # sqlite3
    delete from table; 
    delete from sqlite_sequence where name="table";
  • template 사용하기 위해서는 template 디렉토리를 만들고 그 안에 넣는다.
  • css/js/img 는 static 디렉토리 안에 넣는다.
    html에서 적용할 때는 다음과 같이 한다.
    # html
    {% load static %}
    <link href="{% static 'style/login.css' %}"/>
  • html form 태그에서 action 속성을 부여할 때
#html
<form action = "{% url 'app_name:url-name' %}">
  • 각 app 별로 urls.py 를 생성하고 관리할 때, urls.py 에 app_name 을 지정하고, urlpatterns 안의 요소마다 name을 지정해주면 위의 form 태그 action 속성과 같이 경로를 부여할 수 있다.
  • main urls.py 에 합칠때는 include 함수를 사용한다.
# project/urls.py
from django.urls import path, include

urlpatters = [
    path("login/", include("user.urls")),
    ]
  • 경로의 우선순위는 project urls.py > app urls.py 순이다.
profile
keep calm and carry on
post-custom-banner

0개의 댓글