참고문서


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. 커스텀 유저 모델에서 생성한 슈퍼유저 계정으로 로그인