Django MVC 패턴


Django 도 MVC (Model View Controller) 의 패턴을 따른다.


Model : models.py
View : template (index.html)

Controller : views.py

 

동작 순서는 다음과 같다.

 

mysite/urls.py로 가서 해당 urlpattern 본다. 

우리는 여기서 http://localhost:8000/polls를 호출 했으니, 

 

mysite/urls.py

from django.contrib import admin
from django.urls import path , include

urlpatterns = [
    path('polls/' , include('polls.urls')),
    path('admin/', admin.site.urls),
]

 

해당 url을 따라서 polls/urls.py를 따라간다.

 

polls/urls.py

from django.urls import path

from . import views
app_name = 'polls'
urlpatterns =[
  path('', views.IndexView.as_view(), name='index'),
  path('/', views.DetailView.as_view(), name='detail'),
  path('/results/', views.ResultsView.as_view(), name='results'),
  path('/vote/', views.vote, name='vote'),
 ]

 

여기에서 http://locahost:8000/polls 를 호출했으니 indexView를 따라간다.

 

polls/views.py

class IndexView(generic.ListView):
  template_name = 'polls/index.html'
  context_object_name = 'latest_question_list'

  def get_queryset(self):
    """Return the last five published questions."""
    return Question.objects.order_by('-pub_date')[:5]


class DetailView(generic.DetailView):
  model = Question
  template_name = 'polls/detail.html'


class ResultsView(generic.DetailView):
  model = Question
  template_name = 'polls/results.html'


def vote(request, question_id):
  question = get_object_or_404(Question, pk=question_id)
  try:
    selected_choice = question.choice_set.get(pk=request.POST['choice'])
  except (KeyError, Choice.DoesNotExist):

    return render(request, 'polls/detail.html', {
      'question': question,
      'error_message': "You didn't select a choice.",
    })
  else:
    selected_choice.votes += 1
    selected_choice.save()
    return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

 

여기서 index.html을 호출 해서 화면을 보여준다.

 

polls/templates/polls/index.html

 

{% if latest_question_list %}
<ul>
          {% for question in latest_question_list %}
<li><a href ={% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
          {% endfor %}

</ul>

{% else %}

No polls are available.


{% endif %}

 

이런식으로 구동되고,

위에 붙인 소스가 주요 코드이다.

 

 

 

ㅎㅎ mvc 패턴은 생각보다 익숙하지만

python 문법이나 django 모두 생소해서

어려운 부분이 많은것 같다..

그리고 python은 주로 backend로 난 이용할것 같은데.. front보다는

그부분에 대해서 어떻게 구현할지를 더 고민해보아야겠다..

 

그리고 깊이를 익히기 위해선 책을 한권 빌려서 보는게 빠를것 같다 

튜토리얼은 그래도 한번 가볍게 따라하기 좋은것 같다 역시

 

 


참고

https://docs.djangoproject.com/ko/3.0/intro/tutorial03/

 

첫 번째 장고 앱 작성하기, part 3 | Django 문서 | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

+ Recent posts