Python/Django Framework
[Python Django ] 1. CRUD 개발 환경 세팅
Jake the Dog
2022. 3. 26. 09:17
반응형
작성된 파일은 Github에 공유되어있습니다.
https://github.com/mk4236/python_crud
GitHub - mk4236/python_crud: Python CRUD Blog Source
Python CRUD Blog Source. Contribute to mk4236/python_crud development by creating an account on GitHub.
github.com
기본 환경 생성
- CRUD 개발에 앞서 빠르게 개발환경을 세팅해봅니다.
- 아래 내용을 전부 처리하면 admin세팅까지 완료됩니다.
# 맥 OS 기준
# conda를 통한 가상환경 생성 및 activate
$ conda create -n env39 python=3.9
$ conda activate env39
# django framework 설치
$ conda install django
# 프로젝트 생성
$ django-admin startproject testcrud
$ cd testcrud
# 앱 생성
$ django-admin startapp user
$ django-admin startapp board
# 마이그래이션 실행
$ python3 manage.py migrate
# 관리자 생성
$ python3 manage.py createsuperuser
# superuser 생성
# 서버 실행
$ python3 manage.py runserver
기본 소스 수정
앱 등록
# crudtest/settings.py
INSTALLED_APPS = [
.....
'user', # user app 추가
'board' # board app 추가
]
앱 모델 입력
user 모델
# user/models.py
from django.db import models
class User(models.Model):
user_name = models.CharField(max_length=64, verbose_name="사용자 명")
user_email = models.EmailField(max_length=256, verbose_name="이메일")
password = models.CharField(max_length=256, verbose_name="비밀 번호")
insert_date = models.DateTimeField(auto_now=True, verbose_name="등록일")
def __str__(self):
return self.user_name
class Meta:
db_table = "t_user"
verbose_name = "사이트 이용자"
verbose_name_plural = "사이트 이용자 목록"
board 모델
# board/models.py
from django.db import models
class Board(models.Model):
title = models.CharField(max_length=256, verbose_name="제목")
contents = models.TextField(verbose_name="내용")
insert_date = models.DateTimeField(auto_now=True, verbose_name="작성일")
update_date = models.DateTimeField(verbose_name="수정일", null=True)
def __str__(self):
return self.title
class Meta:
db_table = 't_board'
verbose_name = "게시판"
verbose_name_plural = "게시판 목록"
앱 모델 마이그레이션
$ python3 manage.py makemigrations
$ python3 manage.py migrate
어드민에 모델 등록
user 모델을 어드민에 등록
# user/admin.py
from django.contrib import admin
from user.models import User
class UserAdmin(admin.ModelAdmin):
list_display = ("id", "user_name", "user_email", "insert_date")
admin.site.register(User, UserAdmin)
board 모델을 admin에 등록
# board/admin.py
from django.contrib import admin
from board.models import Board
class BoardAdmin(admin.ModelAdmin):
list_display = ("id", "title", "insert_date")
admin.site.register(Board, BoardAdmin)
템플릿 생성
- 공통 템플릿 생성을 위해 루트 디렉터리에 templates 디렉터리 생성
- board에서 사용할 summernote template도 생성해줄 예정입니다.
- 부트스트랩 4를 사용하였으며, static은 부트스트랩 스킨을 위해 사용됩니다.
# templates/base.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>안녕하세요</title>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<script src="https://code.jquery.com/jquery-3.5.1.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}"/>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
{% block header %}
{% endblock %}
</head>
<body>
<div class="container">
{% block contents %}
{% endblock %}
</div>
</body>
</html>
- summernote html
# templates/summernote.html
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.js"></script>
dir 추가
DIRS 옵션은 Django가 템플릿들을 찾는 디렉토리 경로를 지정하는 것으로, 원래는 비어 있었는데, 위의 같이 Base 디렉토리(BASE_DIR) 밑의 templates 폴더 경로를 추가하였다. 즉, BASE_DIR\templates 가 경로에 추가되어야만 base.html 템플릿을 찾을 수 있게 된다. 만약 DIRS에 여러 경로가 추가되면, Django는 경로 순서대로 검색하면서 템플릿을 찾게 된다.
APP_DIRS 옵션은 Django가 Django App 안의 templates 폴더에서 템플릿들을 찾을 것인지의 여부를 설정하는 것이다. 디폴트로 True가 설정되어 있어서 기본적으로 App안의 templates 폴더를 검색하여 템플릿을 찾게 된다.
# crudtest/settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # DIRS 수정
'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',
],
},
},
]
static 생성
- https://bootswatch.com/ 에서 다운로드한 css 적용을 위해 static 디렉터리 생성
- 추후 다운로드한 외부 js파일이나 css를 저장하여 사용합니다.
- 부트스트랩 스킨을 사용하지 않고 기본 css파일을 사용한다면 base.html을 수정하고 static 디렉터리를 제외시킵니다.
# 디렉토리 구조
static-css-bootstrap.min.css
- setting.py 수정
# crudtest/settings.py
# STATIC_URL아래 다음 추가
# STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
urls.py 수정
crudtest/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('user.urls')), # user urls.py 추가
path('board/', include('board.urls')), # board urls.py 추가
]
board와 user에 각각 urls.py생성
- crudtest/urls.py를 복사하여 각각 디렉터리에 저장 후 urlpatterns를 수정해줍니다.
반응형