장고로 간단한 게시 양식 만들기

개요



Django TemplateView에서 "사용자가 게시 할 수있는 양식 화면"을 구현하고 싶습니다.

이번에는 제목과 메모를 게시하는 양식입니다. (게시판 같은)

환경은 python 3.7.3django 2.2입니다.

1. 프로젝트 생성



1-1. 우선 프로젝트 파일을 만들고 싶으므로 아래 명령으로 디렉토리를 만듭니다.

terminal
$ mkdir simpleform

1-2. 그런 다음 simpleform라는 프로젝트를 만듭니다. 마지막 .은 정확하므로 그대로 실행하십시오. (디렉토리가 simpleform인지 확인하십시오)

terminal
~simpleform$ django-admin startproject formproject .

1-3. 명령을 실행하면 simpleform 디렉토리에 다음과 같이 파일이 생성됩니다.

simpleform/
simpleform
├── formproject
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

2. 애플리케이션 만들기



2-1. 새롭게 어플리케이션을 작성하고 싶으므로, 다음의 커멘드를 실행합니다. 이번에는 formapp라는 응용 프로그램입니다.

terminal
$ python manage.py startapp formapp

실행하면 디렉토리는 아래와 같이 된다고 생각합니다.

3개로 나누면 simpleform 라는 프로젝트 파일 내에 ① formapp 라는 애플리케이션, ② formproject 라는 프로젝트, ③ manage.py 파일이 됩니다.

simpleform/
simpleform
├── formapp
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── formproject
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   └── settings.cpython-37.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

2-2. formprojectsettings.pyINSTALLED_APPSformapp를 추가합니다.

formproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #追加
    'formapp',
]

2-3. form 및 게시물 목록 list을 볼 수 있도록 TEMPLATES도 설정합니다. DIRS[BASE_DIR, 'templates'를 추가합니다.

formproject/settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        #追加
        'DIRS': [BASE_DIR, 'templates'],
        #ここまで
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

3. Form을 표시하자



3-1. 먼저 formproject/urls.py에 다음과 같이 추가하십시오.

formproject/urls.py
from django.contrib import admin
#includeを追加
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    #追加
    path('', include('formapp.urls')),
]

3-2. formappurls.py 파일을 새로 만들고 아래 코드를 추가합니다. 이제 https://サイト名.com/form로 이동하면 form가 표시되고 https://サイト名.com/list로 이동하면 게시 목록 list가 표시됩니다.

formapp/urls.py
from django.urls import path
from .views import FormClass, ListClass

urlpatterns = [
    path('form/', FormClass.as_view(), name='form'),
    path('list/', ListClass.as_view(), name='list'),
]

3-3. 나중에 form.htmllist.html 파일에 액세스 할 수 있도록 코드를 views.py에 추가하십시오.

formapp/views.py
from django.views.generic import ListView, CreateView
from django.urls import reverse_lazy
from .models import PostModel

class ListClass(ListView):
    template_name = 'list.html'
    model = PostModel

class FormClass(CreateView):
    template_name = 'form.html'
    model = PostModel
    fields = ('title','memo')
    success_url = reverse_lazy('list')

3-4. views.py 에 상속하는 모델의 models.py 는, 아래와 같이 작성해 주세요.

formapp/models.py
from django.db import models

class PostModel(models.Model):
    title = models.CharField(max_length=50)
    memo = models.TextField()

3-5. templates 폴더를 simpleform에 새로 만듭니다. 그 안에 form.htmllist.html를 신규 작성해, 아래와 같이 해 주세요.

simpleform/templates/form.html
<form method="POST">
{% csrf_token %}
  <p>タイトル:<input type="text" name="title"></p>
  <p>メモ:<input type="text" name="memo"></p>
  <input type="submit" value="投稿する">
</form>

simpleform/templates/list.html
<div class="container">
  {% for post in object_list %}
  <div class="post">
    <p>タイトル:{{ post.title }}</p>
    <p>メモ:{{ post.memo }}</p>
    <p>--------------------</p>
  </div>
  {% endfor %}
  <div class="form">
    <a href="{% url 'form' %}">新規投稿</a>
  </div>
</div>

디렉토리는 다음과 같아야합니다.

simpleform/
simpleform
├── formapp
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── formproject
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   └── settings.cpython-37.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── templates
    ├── form.html
    └── list.html

3-6. 마지막으로 다음 명령을 실행하십시오.

terminal
$ python manage.py migrate

4. localhost 시작



4-1. localhost를 시작하고 formlist가 표시되는지 확인하려면 runserver를 실행하십시오.

terminal
$ python manage.py runserver

4-2.http://localhost:8000/form를 브라우저에서 열면 이러한 양식이 표시됩니다.


① 시험에 쓰기를 하고 「투고한다」를 눌러 보세요.


② 그렇게 하면, 투고 일람이 표시됩니다.


③마지막으로 「신규 투고」를 누르고, 똑같이 투고해 보면...


... 제대로 게시할 수 있습니다!

이와 같이 투고 화면과 일람 표시가 동작하고 있으면, 올바르게 실행할 수 있습니다.

이상

좋은 웹페이지 즐겨찾기