본문 바로가기

프로그래밍/Python

[Django] -Start-Code : 게시판 만들기

바로 가져다 쓰기 위한 스타팅 코드

파이썬과 장고+bootstarap을 이용한 게시판 만들기 샘플 코드

샘플 게시판 결과

 1. board/templates/base.html      

<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> -->
    <link rel="stylesheet" href="/static/bootstrap.min.css" />
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW"
        crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js"
        integrity="sha384-q2kxQ16AaE6UbzuKqyBE9/u/KzioAlnx2maXQHiDX9d4/zp8Ok3f+M7DPm+Ib6IU"
        crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.min.js"
        integrity="sha384-pQQkAEnwaBkjpqZ8RU1fF1AKtTcHJwFl3pblpTlHXybJjHpMYo79HY3hIi4NKxyj"
        crossorigin="anonymous"></script>
</head>

<body>
    <div class="container">
        {% block contents %}
        {% endblock %}
    </div>
</body>

</html>

 2. board/templates/board_list.html     

{% extends "base.html" %}

{% block contents %}
<div class="row mt-5">
    <div class="col-12">
        <table class="table table-light">
            <thead class="thead-light">
                <tr>
                    <th>#</th>
                    <th>제목</th>
                    <th>아이디</th>
                    <th>일시</th>
                </tr>
            </thead>
            <tbody class="text-dark">
                {% for board in boards %}
                <tr>
                    <td>{{ board.id }}</td>
                    <td>{{ board.title }}</td>
                    <td>{{ board.writer }}</td>
                    <td>{{ board.registered_dttm }}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </div>
</div>
<div class="row">
    <div class="col-12">
        <button class="btn btn-primary">글쓰기</button>
    </div>
</div>
{% endblock %}

 

 3. board/models.py

from django.db import models

# Create your models here.


class Board(models.Model):
    title = models.CharField(max_length=128, verbose_name='제목')
    contents = models.TextField(verbose_name="내용")
    writer = models.ForeignKey(
        'fcuser.Fcuser', verbose_name="작성자", on_delete=models.CASCADE)
    registered_dttm = models.DateTimeField(
        auto_now_add=True, verbose_name="등록시간")

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'board'
        verbose_name = '게시판'
        verbose_name_plural = '게시판'

 

 4. board/views.py

from django.shortcuts import render
from .models import Board

# Create your views here.


def board_list(request):
    boards = Board.objects.all().order_by('-id')
    return render(request, 'board_list.html', {'boards': boards})

 

 5. board/admin.py

from django.contrib import admin
from .models import Board
# Register your models here.


class BoardAdmin(admin.ModelAdmin):
    list_display = ('title', 'registered_dttm')


admin.site.register(Board, BoardAdmin)

 

 6. project/settings.py

...
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'board'  # 새로 추가한 board 앱
]
...

 

 

 7. DB 마이그레이션(migration)

 prompt project> python manage.py makemigrations
 prompt project> python manage.py migrate 

 

 

 8. project/urls.py


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

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

 

 

 9. board/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('list/', views.board_list),
]

 

 10. Screen shot (http://127.0.0.1:8000/board/list)

 

 11. admin 페이지를 이용한 migration된 테이블에 임시 데이터 삽입하기

   > http://127.0.0.1:8000/admin/board/board/

  > http://127.0.0.1:8000/admin/board/board/add/