바로 가져다 쓰기 위한 스타팅 코드
파이썬과 장고+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/
'프로그래밍 > Python' 카테고리의 다른 글
[Django] Form에서 입력받은 ','로 구분된 문자열 파싱 하기 (0) | 2021.01.04 |
---|---|
[Django] 게시판 페이지 네비게이션(page navigation) (0) | 2021.01.04 |
[Django] Template HTML 상속 (block - extends) (0) | 2021.01.03 |
[Django] Form 필드의 기본 유효성 오류 메시지 변경하기 (0) | 2021.01.03 |
[Django] 장고에서 패스워드 체크 함수 check_password 사용하기 (0) | 2021.01.03 |