views.py의 post_list가 작동하는 메커니즘
# views.py
def post_list(request):
return HttpResponse('Post list')
- 브라우저에서 요청
- 요청이 runserver로 실행중인 서버에 도착
- runserver는 요청을 Django code로 전달
- Django code중 config.urls모듈이 해당 요청을 받음
- config.urls모듈은 ‘‘(admin/를 제외한 모든 요청)을 blog.urls모듈로 전달
- blog.urls모듈은 받은 요청의 URL과 일치하는 패턴이 있는지 검사
- 있다면 일치하는 패턴과 연결된 함수(view)를 실행 7-1. settings모듈의 TEMPLATES속성 내의 DIRS목록에서 blog/post_list.html파일의 내용을 가져옴 7-2. 가져온 내용을 적절히 처리(렌더링, render()함수)하여 리턴
- 함수의 실행 결과(리턴값)를 브라우저로 다시 전달
Migration의 생성과 적용
- 맨 처음 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 <- 이 파일에 테이블이 생성됨
- 이미 있던 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일
- 장고 설치 하고 runserver 띄우기
- blog app추가 및 Post model추가
- blog app을 INSTALLED_APPS에 추가, Post모델의 migration 생성 및 admin에 등록
1월 30일
- blog.urls모듈 생성 및 루트 url을 blog.view.post_list에 연결
- template폴더 추가 및 settings의 TEMPLATE옵션의 DIR항목에 해당폴더 경로 추가
- post_list.html작성, 해당 파일 render한 결과 리턴
- post_detail생성, url.py, views.py수정
- post_list에서 Post QuerySet을 template으로 전달, template tag에서 QeurySet반복
- STATICFILES_DIRS설정 및 bootstrap, custom css 파일 추가 및 적용
- static template tag사용, blog.css 구현
- post_detail에 동적으로 pk값을 URL을 통해 받을 수 있도록 처리
- post_detail로 이동하는 링크를 url태그를 사용해서 동적으로 생성
Comments