14. MySQL 데이터 생성 - eungyukm/DjangoBase Wiki

MySQL 데이터 생성

  1. 쿼리 작성
create database board_db;
  1. 마이그레이션 작업을 합니다.
pyton3 manage.py makemigrations
python3 manage.py migrate
  1. 아래와 같이 테이블이 생성된 것을 볼 수 있습니다.

  2. 상단 메뉴를 게시판 정보테이블에서 불러와 저장합니다.

  • 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())  
  1. Mysql Select 쿼리
SELECT * FROM board_db.board_app_boardinfotable;
  1. 미들웨어
  • 모든 요청에 대해 중간에 거쳐가는 역할을 하는 요소입니다.
  • 미들웨어는 다음과 같이 구성해 줍니다.
  1. 상단 메유의 게시판 링크는 데이터베이스에서 게시판 정보를 읽어와 구성하도록 할 것입니다.
    상단 메뉴눈 모든 요청에 대해 처리해줘야 하기 때문에 views.py에 있는 모든 함수에
    똑같은 코드를 넣어주거나 함수를 호출하는 코드를 넣어줘야 합니다.
    모든 요청에 대해 공통으로 처리하고 싶은 것이 있다면 미들웨어를 사용합니다.

mini_project에 middleware라는 폴더를 만들어 줍니다.

  1. 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
  1. 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'
]
  1. 데이터베이스에서 상단 메뉴를 구성하기 위해 필요한 데이터를 가져옵니다.
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
  1. 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>
⚠️ **GitHub.com Fallback** ⚠️