Django로 인스타그램 만들기 - 02. Post, Comment 모델
참고문서
- Introduction to models
- The model to use to represent a User (AUTH_USER_MODEL)
- Using settings in Python code (django.conf.settings)
- Referencing the User Model (ForeignKey User reference)
- makemigrations
- migrate
- ImageField requires the Pillow library
- MEDIA_URL
- MEDIA_ROOT
- Managing files (User uploaded files)
post앱 생성, Post, Comment Model생성, DB migration
Terminal
./manage.py startapp post
pip install pillow
post/models.py
from django.conf import settings
from django.db import models
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL)
photo = models.ImageField(upload_to='post')
def __str__(self):
return f'Post (PK: {self.pk}, Author: {self.author.username})'
class Comment(models.Model):
post = models.ForeignKey(Post)
author = models.ForeignKey(settings.AUTH_USER_MODEL)
content = models.TextField()
def __str__(self):
return f'Comment (PK: {self.pk}, Author: {self.author.username})'
ForeignKey
필드에서 유저 모델에 대한 연결을 만들고자 할 경우, 위와 같이 django.conf.settings
에서 값을 가져오는 형태로 사용한다.
config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'member',
'post',
]
Terminal
./manage.py makemigrations
./manage.py migrate
Admin설정
member/admin.py
from django.contrib import admin
from .models import Post, Comment
admin.site.register(Post)
admin.site.register(Comment)
관리자 페이지에서 관리될 모델 클래스를 등록한다.
MEDIA_URL, MEDIA_ROOT 설정
`config/settings.py
...
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_URL = '/static/'
# Media files (User uploaded files)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL
로 시작하는 요청은 MEDIA_ROOT
에서 찾은 파일을 응답으로 보내주고자 두 경로를 각각 지정한다.
MEDIA_URL이 MEDIA_ROOT의 파일과 연결되도록 설정
config/urls.py
from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
urlpatterns += static(
settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT
)
django.conf.urls.static.static()
함수는 첫 번째 인자로 주어진 경로(MEDIA_URL
)로 요청이 올 경우, document_root
에 지정된 경로에서 파일을 찾아 응답으로 보내준다.
테스트용 Post를 Django Admin에서 추가
./manage.py runserver
실행 후 Django admin으로 이동, 포스트 추가
01. 커스텀 유저 모델에서 생성한 슈퍼유저 계정으로 로그인