14. MySQL %EB%8D%B0%EC%9D%B4%ED%84%B0 %EC%83%9D%EC%84%B1 - eungyukm/DjangoBase GitHub Wiki
- 쿼리 작성
create database board_db;
- 마이그레이션 작업을 합니다.
pyton3 manage.py makemigrations
python3 manage.py migrate
-
아래와 같이 테이블이 생성된 것을 볼 수 있습니다.
-
상단 메뉴를 게시판 정보테이블에서 불러와 저장합니다.
- main_app/views/index 함수에 board_info_table에 기본 데이터를 저장하는 코드를 동작시키고 주석처리 합니다.
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
import board_app.models
# Create your views here.
def index(request):
# board_info_table에 기본 데이터 저장
# 한번 수행 후 주석처리 해주세요~
model1 = board_app.models.BoardInfoTable()
model1.board_info_name = "자유게시판"
model1.save()
model2 = board_app.models.BoardInfoTable()
model2.board_info_name = "유머게시판"
model2.save()
model3 = board_app.models.BoardInfoTable()
model3.board_info_name = "정치게시판"
model3.save()
model4 = board_app.models.BoardInfoTable()
model4.board_info_name = "스포츠게시판"
model4.save()
template = loader.get_template('index.html')
return HttpResponse(template.render())
- Mysql Select 쿼리
SELECT * FROM board_db.board_app_boardinfotable;
- 미들웨어
- 모든 요청에 대해 중간에 거쳐가는 역할을 하는 요소입니다.
- 미들웨어는 다음과 같이 구성해 줍니다.
- 상단 메유의 게시판 링크는 데이터베이스에서 게시판 정보를 읽어와 구성하도록 할 것입니다.
상단 메뉴눈 모든 요청에 대해 처리해줘야 하기 때문에 views.py에 있는 모든 함수에
똑같은 코드를 넣어주거나 함수를 호출하는 코드를 넣어줘야 합니다.
모든 요청에 대해 공통으로 처리하고 싶은 것이 있다면 미들웨어를 사용합니다.
mini_project에 middleware라는 폴더를 만들어 줍니다.
- middleware 폴더에 TopMenuMiddleware.py를 생성하고 코드를 작성해 줍니다.
class TopMenuMiddleware :
# 초기화 함수
# django에서 미들웨어 객체를 생성할 때 다음 미들에어 정보를
# 두번 째 매개변수로 전달해줍니다.
def __init__(self, next_layer=None) :
self.get_response = next_layer
# 요청정보 처리를 하기위해 호출하는 함수
def process_request(self, request) :
print('top menu middleware')
# 응답정보를 처리하기 위해 호출하는 함수
# 응답결과를 생성하는 작업을 수행. 요청 흐름을 통제하는 역할을 수행합니다.
def precess_response(self, request, response) :
return response
# 장고에서 미들웨어르 동작시킬 때 호출하는 함수
def __call__(self, request) :
response = self.process_request(request)
if response is None :
response = self.get_response(request)
response = self.precess_response(request, response)
return response
- middleware를 등록합니다.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'mini_project.middleware.TopMenuMiddleWare.TopMenuMiddleware'
]
- 데이터베이스에서 상단 메뉴를 구성하기 위해 필요한 데이터를 가져옵니다.
import board_app.models
class TopMenuMiddleware :
# 초기화 함수
# django에서 미들웨어 객체를 생성할 때 다음 미들에어 정보를
# 두번 째 매개변수로 전달해줍니다.
def __init__(self, next_layer=None) :
self.get_response = next_layer
# 요청정보 처리를 하기위해 호출하는 함수
def process_request(self, request) :
# print('top menu middleware')
# 데이터베이스에서 상단 메뉴를 구성하기 위해 필요한 데이터를 가져옵니다.
menu_list = board_app.models.BoardInfoTable.objects.all()
# request 영역에 저장합니다.
request.menu_list = menu_list
# 응답정보를 처리하기 위해 호출하는 함수
# 응답결과를 생성하는 작업을 수행. 요청 흐름을 통제하는 역할을 수행합니다.
def precess_response(self, request, response) :
return response
# 장고에서 미들웨어르 동작시킬 때 호출하는 함수
def __call__(self, request) :
response = self.process_request(request)
if response is None :
response = self.get_response(request)
response = self.precess_response(request, response)
return response
- mini_project/templates/top_menu.html에 메뉴를 구성하는 코드를 작성합니다.(Error)
<!-- 상단 메뉴 부분 -->
<nav class="navbar navbar-expand-md bg-dark navbar-dark fixed-top shadow-lg">
<a class="navbar-brand" href="/">SoftCampus</a>
<button class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navMenu">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navMenu">
<ul class="navbar-nav">
{% for menu in request.menu_list %}
<li class="nav-item">
<a href="/board/board_main?board_info_idx={{menu.board_info_idx}}" class="nav-link">자유게시판</a>
{{menu.board_info_name}}
</li>
{% endfor %}
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a href="/user/login" class="nav-link">로그인</a>
</li>
<li class="nav-item">
<a href="/user/join" class="nav-link">회원가입</a>
</li>
<li class="nav-item">
<a href="/user/modify_user" class="nav-link">정보수정</a>
</li>
<li class="nav-item">
<a href="/" class="nav-link">로그아웃</a>
</li>
</ul>
</div>
</nav>