2018-01-30 TIL WPS 17. Django-2

views.py의 post_list가 작동하는 메커니즘

# views.py
 def post_list(request):
 	return HttpResponse('Post list')	
  1. 브라우저에서 요청
  2. 요청이 runserver로 실행중인 서버에 도착
  3. runserver는 요청을 Django code로 전달
  4. Django code중 config.urls모듈이 해당 요청을 받음
  5. config.urls모듈은 ‘‘(admin/를 제외한 모든 요청)을 blog.urls모듈로 전달
  6. blog.urls모듈은 받은 요청의 URL과 일치하는 패턴이 있는지 검사
  7. 있다면 일치하는 패턴과 연결된 함수(view)를 실행 7-1. settings모듈의 TEMPLATES속성 내의 DIRS목록에서 blog/post_list.html파일의 내용을 가져옴 7-2. 가져온 내용을 적절히 처리(렌더링, render()함수)하여 리턴
  8. 함수의 실행 결과(리턴값)를 브라우저로 다시 전달

Migration의 생성과 적용

  1. 맨 처음 Model구성시 1-1. 클래스 구성 class Post(models.Model): title = models.CharField(max_length=200)

1-2. migration생성 manage.py makemigrations 0001_initial.py <- 테이블을 생성하기 위한 로직

1-3. migration을 적용 manage.py migrate db.sqlite3 <- 이 파일에 테이블이 생성됨

  1. 이미 있던 Model을 수정시

2-1. 클래스의 속성 변경 class Post(models.Model): …. created_date = models.DateTimeField(auto_now_add=True)

2-2. migration생성 manage.py makemigrations 0002_add_field_created_date.py <- 테이블에 새 column을 추가하는 로직

2-3. migration을 적용 manage.py migrate db.sqlite <- blog_post테이블에 새 column ‘created_date’가 생성

IPython에서 강사님이 하신 것

혹시몰라서 일단 저장

In [2]: from blog.models import Post

In [3]: Post.objects.all()
Out[3]: <QuerySet [<Post: 첫번째 글>, <Post: 두번째 글>, <Post: 세번째 글>, <Post: 네번째 글>, <Post: 다섯번째 글>, <Post: 여섯번째 글>]>

In [5]: for post in Post.objects.all():
   ...:     print(post.title)
   ...:
   ...:
첫번째 글
두번째 글
세번째 글
네번째 글
다섯번째 글
여섯번째 글

In [6]: for post in Post.objects.all():
   ...:     print(post.content)
   ...:
   ...:
   ...:
1번째 글 내용
2번째 글 내용
...
6번째 글 내용


In [8]: from django.contrib.auth.models import User

In [9]: me = User.objects.get(username = 'chrisaor')

In [10]: me
Out[10]: <User: chrisaor>

In [11]: type(me)
Out[11]: django.contrib.auth.models.User

In [12]: Post.objects.create(
    ...:     author=me,
    ...:     title='Sample title',
    ...:     content='Sample content',
    ...: )
Out[12]: <Post: Sample title>

In [13]: Post.objects.all()
Out[13]: <QuerySet [<Post: 첫번째 글>, <Post: 두번째 글>, <Post: 세번째 글>, <Post: 네번째 글>, <Post: 다섯번째 글>, <Post: 여섯번째 글>, <Post: Sample title>]>

In [14]: Post.objects.filter(title__contains='첫')
Out[14]: <QuerySet [<Post: 첫번째 글>]>

In [15]: post
Out[15]: <Post: 여섯번째 글>

In [18]: post
Out[18]: <Post: 첫번째 글>

In [19]: post.publish()

In [20]: post.published_date
Out[20]: datetime.datetime(2018, 1, 30, 3, 44, 44, 728180, tzinfo=<UTC>)

In [21]: Post.objects.all()
Out[21]: <QuerySet [<Post: 첫번째 글>, <Post: 두번째 글>, <Post: 세번째 글>, <Post: 네번째 글>, <Post: 다섯번째 글>, <Post: 여섯번째 글>, <Post: Sample title>]>

In [25]: Post.objects.order_by('-created_date')
Out[25]: <QuerySet [<Post: Sample title>, <Post: 여섯번째 글>, <Post: 다섯번째 글>, <Post: 네번째 글>, <Post: 세번째 글>, <Post: 두번째 글>, <Post: 첫번째 글>]>

In [26]: Post.objects.order_by('created_date')
Out[26]: <QuerySet [<Post: 첫번째 글>, <Post: 두번째 글>, <Post: 세번째 글>, <Post: 네번째 글>, <Post: 다섯번째 글>, <Post: 여섯번째 글>, <Post: Sample title>]>

Django Tutorial(history)

1월 29일

  1. 장고 설치 하고 runserver 띄우기
  2. blog app추가 및 Post model추가
  3. blog app을 INSTALLED_APPS에 추가, Post모델의 migration 생성 및 admin에 등록

1월 30일

  1. blog.urls모듈 생성 및 루트 url을 blog.view.post_list에 연결
  2. template폴더 추가 및 settings의 TEMPLATE옵션의 DIR항목에 해당폴더 경로 추가
  3. post_list.html작성, 해당 파일 render한 결과 리턴
  4. post_detail생성, url.py, views.py수정
  5. post_list에서 Post QuerySet을 template으로 전달, template tag에서 QeurySet반복
  6. STATICFILES_DIRS설정 및 bootstrap, custom css 파일 추가 및 적용
  7. static template tag사용, blog.css 구현
  8. post_detail에 동적으로 pk값을 URL을 통해 받을 수 있도록 처리
  9. post_detail로 이동하는 링크를 url태그를 사용해서 동적으로 생성

Comments