웹 프로그래밍/[ Django ]

[ Django ] 03. Django Model-Form 알아보기

kim.svadoz 2020. 8. 11. 09:45
728x90
반응형

Django Model-Form

# urls.py

from django.urls import path
from . import views

app_name = "articles"

urlpatterns = [
    path('index/', views.index, name="index"),
    path('create/', views.create, name="create"),
    path('<int:article_pk>/update/', views.update, name="update"),
    path('<int:article_pk>/', views.detail, name="detail"),
]
# views.py

from django.shortcuts import render, redirect, get_object_or_404
from .forms import ArticleForm
from .models import Article

# Create your views here.
def index(request):
    articles = Article.objects.all()
    context = {
        'articles' : articles
    }
    return render(request, 'articles/index.html', context)

def create(request):
    if request.method =="POST":
        form = ArticleForm(request.POST)
        # 사용자로부터 받은 form이 유효하다면 TRUE를 리턴, 아니면 FALSE를 리턴한다.
        if form.is_valid():
            # article = Article.objects.get(pk=pk)
            # form에 담긴 정보가 ArticleForm이고
            # ArticleForm은 Article의 정보를 가지고 있다.
            article = form.save()
            return redirect('articles:index')
    else:
        form = ArticleForm()
    context={
        'form' : form        
    }
    return render(request, 'articles/form.html', context)

def update(request, article_pk):
    article = Article.objects.get(pk=article_pk)
    if request.method=="POST":
        form = ArticleForm(request.POST, instance=article)
        if form.is_valid():
            article = form.save()
            return redirect('articles:index')
    else:
        form = ArticleForm(instance=article)
    context={
        'form' : form
    }
    return render(request, 'articles/form.html', context)

def detail(request, article_pk):
    article = get_object_or_404(Article, pk=article_pk)    
    # article = Article.objects.get(pk=article_pk)
    context={
        'article' : article
    }
    return render(request, 'articles/detail.html', context)
### index.html
{% extends 'base.html' %}

{% load bootstrap4 %}

{% block body %}
<h1>메인 페이지 입니다.</h1>

<a href="{% url 'articles:create' %}">글 생성</a>

<hr>
{% for article in articles %}
  <a href="{% url 'articles:detail' article.pk %}">{{article.title}}</a>
{% endfor %}
{% endblock %}


### form.html
{% extends 'base.html' %}

{% load bootstrap4 %}

{% block body %}
{% if request.resolver_match.url_name == 'create' %}
  <h1> 글 생성 </h1>
{% else %}
  <h1> 글 수정 </h1>
{% endif %}

<hr>
<form action="" method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="제출">
</form>

<a href="{% url 'articles:index' %}">index 페이지 슝</a>

{% endblock %}

### detail.html
{% extends 'base.html' %}

{% load bootstrap4 %}

{% block body %}
  <h2>{{ article.pk }}번 째 글^^</h2>
  <h3>{{ article.title }}</h3>
  <h4>{{ article.content }}</h4>
  <hr>
  <a href="{% url 'articles:update' article.pk %}">글 수정</a>
  <a href="{% url 'articles:index' %}">[back]</a>
{% endblock %}

Django-Bootstrap-4

$ pip install django-bootstrap4

# 각 html에서 불러오기!
$ {% load bootstrap4 %}
  • settings.py 에서 부트스트랩사용한다고 설정해주기

image-20200617170926574

  • form.html 도 부트스트랩4에 맞게 수정

image-20200617171216549

  • base.html 모두 바꿔주기

image-20200617171259506image-20200617171422329

짜잔!!!

PRACTICE(Movie)

django_review

image-20200620140155502image-20200620140916416

원래는 html의 form태그에서 경로를 넣어줬는데 경로를 안넣어주면 내 현재 위치로 다시 보내주는 것.

차이점은 method를 POST로 지정해줬기 때문에 action을 비워놔도 된다.

728x90
반응형