🎎

07. 모델 작성

모델 클래스 작성

이제 각각의 포스팅에 저장 공간을 만들어보도록 하겠습니다. 우선 name과 content를 만듭니다. 사진을 저장할 공간은 다른 챕터에서 만들도록 하겠습니다.
여기서 models.CharField()와 같은 값들을 Django model field라고 하는데요. 아래 문서에서 다양한 필드와 그 필드에 따른 옵션을 보실 수 있습니다. 하지만 기억하세요. 초보자에게 너무 많은 내용은 오히려 방해가 됩니다!
 
  • tutorialdjango/mysite/main/models.py
from django.db import models class Cafe(models.Model): name = models.CharField(max_length=50) content = models.TextField()
 
터미널 창에서 Ctrl + C를 누르시고 빠져나오신 다음 아래 명령어를 입력해주세요.
(myvenv)root@goorm:/workspace/컨테이너명/mysite# python manage.py makemigrations main Migrations for 'main': main/migrations/0001_initial.py -Create model Post
 
(myvenv)root@goorm:/workspace/컨테이너명/mysite# python manage.py migrate ... Running migrations: Applying main.0001_initial... OK
 
위처럼 나왔다면 성공한 것입니다. DB에 반영된 내용을 Admin page에도 보이도록 등록할 것입니다. 아래 파일에서 admin 사이트 설정을 할 수 있습니다.
 
  • tutorialdjango/mysite/main/admin.py
from django.contrib import admin from .models import Cafe admin.site.register(Cafe)
 
하지만 조금더 어려운 코드를 사용하여 아래와 같이 사용하는 것도 가능합니다. 아래 코드는 실행시키지 마시고 참고만 삼아 주세요.
admin page도 커스터마이징이 가능하다는 것을 보여드리기 위한 예제입니다.
#참고 코드 - 실행은 하지 마십시오. from django.contrib import admin from .models import Cafe # 방법1 # admin.site.register(Cafe) # 방법2 (create_at은 구분을 위해 위에 models.py에서 생성, 본 예제에서만 사용함.) @admin.register(Cafe) class CafeAdmin(admin.ModelAdmin): list_display = ['id', 'name', 'content', 'create_at'] list_display_links = ['id', 'name']
 
참고 코드 실행페이지참고 코드 실행페이지
참고 코드 실행페이지

admin 페이지를 통한 모델요소 추가

이제 Superuser를 만듭니다. Superuser는 게시물을 삭제, 수정, 저장할 수 있으며 다른 유저를 관리할 수 있습니다. 비밀번호가 *모양으로 안뜨니 주의해주세요. 또한 비밀번호 길이가 짧거나, 이름이나 이메일과 유사하게 비밀번호를 설정하면 재입력 메시지가 나오게 되니 비밀번호는 특수문자 포함하여 8자 이상으로 입력해주세요.
(myvenv)root@goorm:/workspace/컨테이너명/mysite# python manage.py createsuperuser Username (leave blank to user 'root'): leehojun Email address: leehojun@gmail.com Password: Password (again): Superuser created successfully.
 
자, 이제 서버를 구동시키는 명령어를 입력해주세요. 이제 손에 많이 익으실겁니다.
(myvenv)root@goorm:/workspace/컨테이너명/mysite# python manage.py runserver 0:80
 
프로젝트 > 실행 URL과 포트를 누르시고 URL을 클릭하신다음 뒤에 /admin라고 치시면 admin페이지가 나옵니다. 아래 형식과 같겠죠.
 
URL : https://tutorialdjango-bcrpr.run.goorm.io/admin/
 
Admin 사이트 안으로 들어오셨다면 카페를 추가해보겠습니다.
  1. 만든 superuser로 로그인 합니다.
    1. superuser의 아이디와 패스워드를 입력해주세요.superuser의 아이디와 패스워드를 입력해주세요.
      superuser의 아이디와 패스워드를 입력해주세요.
       
  1. Cafes의 '추가' 버튼을 누릅니다.
    1. notion imagenotion image
       
  1. 카페 이름과 내용을 작성합니다.
    1. notion imagenotion image
 
저장을 하면 우리가 입력한 name이 표시되는 것이 아니라 Cafe object (1)이러한 형식으로 보입니다.
notion imagenotion image
 
제목을 name으로 출력하라는 명령이 없었기 때문입니다. models.py로 들어가서 다시 제목이 무엇인지 설정해줄게요.
  • mysite/main/models.py
from django.db import models class Cafe(models.Model): name = models.CharField(max_length=50) content = models.TextField() def __str__(self): return self.name
 
브라우져 창에서 새로고침을 해보시면 이름이 바뀐 것을 볼 수 있습니다.
notion imagenotion image
 
Test를 위해 3개의 게시물을 작성하였습니다. 이번에는 이 게시물을 cafelist 페이지에 띄어 보도록 하겠습니다. views 파일을 아래와 같이 수정해주세요.
 
notion imagenotion image
 
tutorialdjango/mysite/main/views.py
from django.shortcuts import render from .models import Cafe def index(request): return render(request, 'main/index.html') def cafelist(request): cafes = Cafe.objects.all() context = { 'cafes': cafes } return render(request, 'main/cafelist.html', context)
 
Template tag를 사용하여 DB에 입력된 내용을 모두 가져옵니다. 템플릿 그와 랭귀지에 관련된 자세한 내용은 아래 링크를 참고해주세요. 위에도 언급이 되어 있지만, 다시 찾기가 불편하실 것 같아 아래 링크를 달아드립니다.
 
notion imagenotion image
<!DOCTYPE html> <html> <head> <title>cafelist</title> </head> <body> <h1>cafelist</h1> <table> {% for cafe in cafes %} <tr> <td>{{ cafe.name }}</td> <td>{{ cafe.content }}</td> </tr> {% endfor %} </table> </body> </html>
 
 
 
소스코드보기를 하면 우리가 작성했던 템플릿 랭귀지가 보이지 않습니다. 이렇게 사용자에게 보여질 때에는 html 형식으로 넘겨주게 됩니다.
<!DOCTYPE html> <html> <head> <title>cafelist</title> </head> <body> <h1>cafelist</h1> <table> <tr> <td>cafename1</td> <td>cafecon1</td> </tr> <tr> <td>cafename2</td> <td>cafecon2</td> </tr> <tr> <td>cafename3</td> <td>cafecon3</td> </tr> </table> </body> </html>