[Django] MTV 패턴과 Model 기본
django-mvc-model-bindingresult, Django MVC, Django MTV, Django Model
정의
Django 는 MTV (Model, Template, View) 패턴 사용. 다른 프레임워크의 MVC 와 이름만 다르고 개념은 유사.
| MVC | Django MTV |
|---|---|
| Model | Model (ORM) |
| View | Template |
| Controller | View (function/class) |
Model 정의
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
author = models.ForeignKey('User', on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
published = models.BooleanField(default=False)
class Meta:
ordering = ['-created']
def __str__(self):
return self.title
마이그레이션
python manage.py makemigrations
python manage.py migrate
CRUD
Post.objects.create(title="Hello", body="...", author=user)
Post.objects.get(pk=1)
Post.objects.filter(published=True).order_by('-created')[:10]
Post.objects.filter(author=user).update(published=True)
post.delete()
View + Form + Template 흐름
# views.py
def post_create(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'post_form.html', {'form': form})
Form 이 검증 (validation) + 정제 (cleaning) 담당. form.is_valid() 는 Django 의 binding + validation 관용구.
💬 댓글