jc.jang

Django models 본문

카테고리 없음

Django models

jangstory 2018. 6. 19. 13:04

Django는 MTV 패턴으로 이뤄져있습니다. Model, Template, View


Model은 database에 관련되어있고


Template는 html코드와 관련되어있고


View는 중간에서 둘을 관리하는 것이라고 합니다.


오늘은 model을 활용해보았습니다.




웹 사이트 접속에 성공했고 이제 data를 관리하고 싶다.


이러한 이유로 Model을 건드리게 되었습니다. 예를 들어, 블로그에서 글이나 댓글을 관리할 때, 그 데이터들을 저장합니다. 그것들을 관리하는 테이블을 만들어 봅시다. 테이블이란 데이터베이스에서 데이터를 관리하는 표 형식의 데이터 저장 방식입니다.


공식문서참고(링크)

블로그를 관리할 때 필요한 Article 테이블과 Comment 테이블을 추가한 앱의 models.py에 다음과 같이 생성해보겠습니다.


우리는 다음과 같이 모델을 정의해봅시다.


class Article(models.Model):
    title = models.CharField(max_length=30)
    contents = models.TextField()
    view_count = models.IntegerField()

class Comment(models.Model):
    article = models.ForeignKey(Article)
    comment = models.CharField(max_length=100)


그 다음에 settings.py 파일에 등록을 해야합니다.


모델을 정의한 후에는 Django에게 해당 모델을 사용할거라고 알려줍시다. 


INSTALLED_APPS 설정을 변경하여 앱의 이름을 추가해주세요. 저는 blog라는 이름으로 앱을 만들어서 blog를 추가했습니다.



INSTALLED_APPS = [

#...

# Add my apps

'blog',

#...

]


자 이제 모델 정의도 했고 settings 파일을 수정해서 해당 모델을 사용한다고 알려줬습니다.


Migration(링크)


migration은 Django가 데이터베이스 모델 변경을 전파하는 방식입니다.


우리가 모델을 추가했으니, 이 데이터들을 장고가 관리할 수 있도록 장고에게 알려줍시다.


모델 변경에 대한 내용을 적용하기 위해 터미널 창에서 다음과 같은 작업을 수행합니다.



python manage.py makemigrations



모델이 검사되어 새로운 마이그레이션 파일이 생성되었습니다. 그리고 다음을 수행합니다.



python manage.py migrate


그리고 이제 blog 앱의 views.py 파일로가서


데이터베이스에 데이터를 저장해봅시다.



from .models import Article def index(request):     article_list = Article.objects.all()     

Article.objects.create(     title="hello",     contents="this is test",     view_count=0 ) ctx = { "article_list": article_list } return render(request, "index.html", ctx)


그리고 index.html에서 이 데이터를 받아서 출력해봅시다.


{% for article in article_list %} {{ article.title }} {% endfor %}


이렇게 하고 localhost에 접속하면 갱신할 때 마다 Article.objects.create에 의해 데이터가 추가되고, 추가된 데이터가 for문에 의해 print된다.


이 방법 말고 다른방법을 써보자.


바로바로


Admin


localhost:8000/admin에 접속하면 관리자 페이지에 접속할 수 있다.


username과 password를 입력하라니, 난 그런거 모르는데...


로그인 하기 위해서는 모든 권한을 가지는 superuser 계정을 생성해야한다. 


커맨드창에서 다음과 같이 입력하고 username, password 등을 설정해준다.


python manage.py createsuperuser


그리고 로그인을 해보면 무언가가 나오는데 아직 우리가 만든 Article 테이블에 접근하지는 못한다.


Django admin site에 등록을 해보자(링크)


나는 register 데코레이터를 이용했다. blog 폴더에 admin.py에 다음과 같이 추가한다.


from .models import Article, Comment

# Register your models here.
@admin.register(Article)
class BlogAdmin(admin.ModelAdmin, Comment):
    pass


자 이제 로그인하고 보면 Blog라는 항목과 그 밑에 Articles가 있는것을 볼 수있다. 클릭해서 들어가면,


지금 까지 만든 데이터들이 있는것을 확인할 수 있다.


Comments