웹사이트 검색

Django 앱을 만들고 데이터베이스에 연결하는 방법


소개

Django는 Python으로 작성된 무료 오픈 소스 웹 프레임워크입니다. 이 도구를 사용하면 확장성, 재사용성 및 신속한 개발이 가능합니다.

이 자습서에서는 MySQL 데이터베이스에 연결된 블로그 웹 사이트의 초기 기반을 설정하는 방법을 배웁니다. 여기에는 django-admin을 사용하여 블로그 웹 애플리케이션의 골격 구조를 생성하고, MySQL 데이터베이스를 생성하고, 웹 애플리케이션을 데이터베이스에 연결하는 작업이 포함됩니다.

Django는 블로그 웹 애플리케이션에서 작업할 수 있는 개발 환경을 제공하지만 블로그를 인터넷에 게시하려면 더 많은 단계를 거쳐야 합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용 사용자와 방화벽이 있는 Ubuntu 22.04 서버. 이를 설정하려면 Ubuntu 22.04 초기 서버 설정 가이드를 따르세요.
  • 데이터베이스 역할을 하기 위해 설치된 MySQL. Ubuntu 22.04에 MySQL을 설치하는 방법에 대한 튜토리얼을 따라 이를 설정할 수 있습니다.
  • Python 환경 설정. 이를 위해 Ubuntu 22.04에서 Python 3을 설치하고 프로그래밍 환경을 설정하는 방법에 대한 자습서를 따르십시오.\n.

모든 것이 설치되고 설정되면 첫 번째 단계로 넘어갈 수 있습니다.

1단계 - 데이터베이스 생성

Django는 널리 사용되는 여러 데이터베이스 관리 시스템을 지원하지만 이 가이드는 Django를 MySQL 데이터베이스에 연결하는 데 중점을 둡니다. 이렇게 하려면 MySQL 인스턴스에 데이터베이스를 생성하고 Django가 데이터베이스에 연결하는 데 사용할 수 있는 MySQL 사용자 프로필을 만들어야 합니다.

이를 설정하려면 다음 명령을 사용하여 루트 MySQL 사용자로 MySQL 데이터베이스에 연결합니다.

  1. sudo mysql

프롬프트가 변경되면 MySQL 서버에 있는 것입니다.

다음 명령을 사용하여 현재 데이터베이스를 검사합니다.

  1. SHOW DATABASES;

아직 데이터베이스를 만들지 않았다고 가정하면 출력은 다음과 유사합니다.

Output
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)

기본적으로 information_schema, MySQL, performance_schemasys의 4개 데이터베이스가 이미 생성되어 있습니다. 여기에는 MySQL 서버 자체에 중요한 정보가 포함되어 있으므로 건드릴 필요가 없습니다.

대신 블로그 데이터를 저장할 초기 데이터베이스를 만드십시오.

MySQL에서 데이터베이스를 만들려면 데이터베이스에 의미 있는 이름을 사용하여 다음 명령을 실행합니다.

  1. CREATE DATABASE blog_data;

데이터베이스가 성공적으로 생성되면 출력은 다음과 같습니다.

Output
Query OK, 1 row affected (0.00 sec)

이제 데이터베이스가 사용 가능한 데이터베이스 중 하나로 나열되는지 확인합니다.

  1. SHOW DATABASES;

이제 blog_data 데이터베이스가 출력에 포함된 데이터베이스에 나열되어야 합니다.

Output
+--------------------+ | Database | +--------------------+ | information_schema | | blog_data | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

다음으로 Django가 새 데이터베이스를 운영하는 데 사용할 별도의 MySQL 사용자 계정을 만듭니다. 특정 데이터베이스 및 계정을 생성하면 관리 및 보안 관점에서 지원할 수 있습니다. 이 가이드에서는 djangouser라는 이름을 사용합니다. 원하는 이름을 사용할 수 있지만 설명이 포함된 이름을 선택하는 것이 도움이 될 수 있습니다.

이 계정을 만들고 암호를 설정하고 만든 데이터베이스에 대한 액세스 권한을 부여합니다. 먼저 다음 명령을 입력하여 사용자를 생성하고 암호를 설정합니다. 이 예에서 password를 대체하여 데이터베이스에 대한 강력한 암호를 선택해야 합니다.

  1. CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

djangouser가 설정한 데이터베이스에 대한 완전한 액세스 권한을 가져야 함을 데이터베이스에 알립니다.

  1. GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';

이제 각각 Django용으로 특별히 만들어진 데이터베이스와 사용자 계정이 생겼습니다. MySQL의 현재 인스턴스가 최근 변경 사항을 알 수 있도록 권한을 플러시합니다.

  1. FLUSH PRIVILEGES;

완료되면 EXIT;를 작성하거나 CTRL + D를 눌러 MySQL 서버를 종료할 수 있습니다.

2단계 - MySQL 옵션 파일 생성

Django 구성 파일에 MySQL 연결 세부 정보를 지정하는 대신 옵션 파일에 저장할 수 있습니다. 많은 MySQL 프로그램은 시작 옵션 또는 연결 세부 정보와 같은 정보를 위해 구성 파일이라고도 하는 옵션 파일을 읽을 수 있습니다. 데이터베이스 로그인 자격 증명을 한 곳에만 저장하면 되므로 편리할 수 있습니다.

원하는 텍스트 편집기로 my.cnf 구성 파일을 열어 MySQL 자격 증명을 업데이트합니다. 여기서는 nano를 사용합니다.

  1. sudo nano /etc/mysql/my.cnf

다음 줄을 추가하고 관련 정보를 포함합니다.

…

[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8

utf8이 기본 인코딩으로 설정되어 있습니다. 이것은 MySQL에서 유니코드 데이터를 인코딩하는 일반적인 방법입니다. 세부 정보가 정확하다고 확신하면 파일을 저장하고 닫습니다. nano를 사용하여 파일을 편집한 경우 CTRL + O를 눌러 파일을 저장한 다음 CTRL + X를 눌러 닫습니다. 편집자.

파일을 편집한 후 변경 사항을 적용하려면 MySQL을 다시 시작하십시오.

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart mysql

MySQL을 다시 시작하는 데 몇 초가 걸리므로 기다려 주십시오.

3단계 — 초기 Django 프로젝트 스켈레톤 생성

이 단계에서는 django-admin 명령을 사용하여 프로젝트 스켈레톤을 생성하여 애플리케이션의 토대를 마련합니다.

블로그 앱을 빌드할 디렉터리로 이동합니다. 해당 디렉터리 내에서 앱을 빌드할 특정 디렉터리를 만듭니다. 빌드 중인 앱에 대해 의미 있는 디렉토리를 호출하십시오. 예를 들어 my_blog_app로 이름을 지정하겠습니다.

  1. mkdir my_blog_app

이제 새로 생성된 디렉터리로 이동합니다.

  1. cd my_blog_app

다음으로 Django에서 작업하는 데 사용할 프로그래밍 환경으로 이동합니다. 기존 항목을 사용하거나 새 항목을 만들 수 있습니다. 다음 명령은 env라는 새 환경을 생성하지만 의미 있는 이름을 사용해야 합니다.

  1. python3 -m venv env

생성되면 다음과 같이 활성화할 수 있습니다.

  1. . env/bin/activate

아직 설치하지 않았다면 이제 Django를 이 환경에 설치하십시오.

  1. pip install django

my_blog_app 디렉터리에서 다음 명령을 실행하여 프로젝트를 생성합니다.

  1. django-admin startproject blog

blog/ 디렉터리로 이동하여 작동하는지 확인합니다.

  1. cd blog

그런 다음 ls를 실행하여 필요한 파일과 디렉터리가 프로젝트 폴더 내에 생성되었는지 확인합니다.

  1. ls

출력에는 blog 디렉토리와 manage.py 파일이 나열됩니다.

Output
blog manage.py

이제 블로그 애플리케이션의 초기 시작을 포함하는 프로젝트 디렉토리를 만들었으므로 다음 단계를 계속할 수 있습니다.

4단계 - MySQL 데이터베이스 커넥터 설치

프로젝트에서 MySQL을 사용하려면 Django와 호환되는 Python 3 데이터베이스 커넥터 라이브러리가 필요합니다. 이 단계에서는 MySQLdb의 분기 버전인 mysqlclient와 같은 데이터베이스 커넥터를 설치하는 방법을 설명합니다.

먼저 필요한 MySQL 개발 헤더 및 라이브러리를 설치합니다.

  1. sudo apt install libmysqlclient-dev default-libmysqlclient-dev

다음으로 pip를 사용하여 wheel 패키지를 설치합니다. WheelPython Package Index에서 모듈을 설치하기 위해 Python에서 사용되는 패키징 형식입니다. 일반적으로 휠 패키지에서 Python 프로그램을 설치하는 것이 소스 코드에서 패키지를 빌드하는 것보다 빠르고 리소스 효율적입니다. Wheel로 패키지된 프로그램을 설치하고 작업하려면 먼저 wheel 패키지가 설치되어 있는지 확인해야 합니다.

  1. pip install wheel

그런 다음 mysqlclient 설치를 진행합니다.

  1. pip install mysqlclient

출력은 다음과 유사하며 클라이언트가 제대로 설치되었는지 확인합니다.

Output
... Successfully installed mysqlclient-2.1.1

이제 PyPi mysqlclient 커넥터 라이브러리를 사용하여 MySQL 클라이언트를 성공적으로 설치했습니다.

5단계 - 설정 편집

이전에 django-admin을 실행하면 settings.py라는 Django용 구성 파일이 생성되었습니다. 모든 것이 올바르게 작동하려면 이 파일의 기본 설정 중 일부를 변경해야 합니다.

파일을 편집하려면 선택한 텍스트 편집기로 파일 경로를 엽니다.

  1. nano ~/my_blog_app/blog/blog/settings.py

블로그가 해당 지역과 관련된 정확한 시간을 갖도록 하려면 현재 시간대를 사용하도록 settings.py 파일을 편집할 수 있습니다. 이 표준 시간대 목록을 참조로 사용할 수 있습니다. 이 예에서는 America/New_York 시간을 사용합니다.

파일 내에서 파일 하단 섹션 근처에 있는 TIME_ZONE 필드로 이동합니다.

...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

TIME_ZONE 줄을 수정하여 현재 시간대로 설정합니다. 이 예에서는 뉴욕의 시간대를 사용합니다.

...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

다음에 정적 파일의 경로를 추가해야 하므로 파일을 열어 두십시오. Django 웹 애플리케이션에서 제공되는 파일을 정적 파일이라고 합니다. 여기에는 JavaScript, CSS 및 이미지를 포함하여 전체 웹 페이지를 렌더링하는 데 필요한 모든 파일이 포함될 수 있습니다.

settings.py 파일의 끝으로 이동하여 STATIC_ROOT를 추가합니다.

…

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...

정적 파일의 시간대와 경로를 추가했으므로 허용된 호스트 목록에 IP를 추가합니다. settings.py 파일에서 ALLOWED_HOSTS라고 표시된 줄로 이동하면 settings.py 파일의 맨 위에 있을 것입니다. 대괄호 사이에 작은따옴표로 묶인 서버의 IP 주소를 추가합니다.

...
ALLOWED_HOSTS = ['your_server_IP_address']
...

다음으로 디렉터리에 대한 다양한 기능을 제공하는 Python OS 모듈을 추가합니다. 이 모듈이 없으면 Django 인터페이스 사용을 시작하도록 관리 사용자를 설정할 때 오류가 발생합니다. 이렇게 하려면 각 운영 체제에서 작동할 os 모듈을 가져와야 합니다. from pathlib import Path 줄 위에 import os 줄을 추가합니다.

...
import os
from pathlib import Path
...

지금까지 적절한 시간대가 구성되도록 settings.py 파일을 편집했습니다. 또한 정적 파일의 경로를 추가하고 ip 주소를 애플리케이션의 ALLOWED_HOST로 설정하고 Python OS 모듈을 가져와 관리 사용자를 얻는 데 도움을 주었습니다. 나중에 설정합니다.

파일에 추가할 마지막 스니펫은 Django 블로그 애플리케이션을 MySQL에 연결하기 위한 데이터베이스 연결 자격 증명입니다. 이를 위해 파일 내에서 DATABASES 사전을 찾으십시오. 기본적으로 다음과 같이 표시됩니다.

…

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.sqlite3',
    	'NAME': BASE_DIR / 'db.sqlite3',
	}
}
...

DATABASES 사전의 ENGINENAME 옵션을 다음 줄로 바꿉니다.

...

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.mysql',
    	'OPTIONS': {
        	'read_default_file': '/etc/mysql/my.cnf',
    	},
	}
}
...

ENGINE: django.db.backends.mysql 줄은 Django가 내장 MySQL 데이터베이스 백엔드를 사용하도록 지시합니다. read_default_file 옵션은 이전에 편집한 MySQL 옵션 파일인 /etc/mysql/my.cnf를 가리킵니다. 이것은 1단계에서 생성한 MySQL 데이터베이스에 연결하기 위한 관련 연결 세부 정보를 찾을 수 있는 위치를 Django에 알려줍니다.

Django는 다음 순서로 데이터베이스 연결 설정을 읽습니다.

  • 옵션
  • NAME, USER, PASSWORD, HOST, PORT
  • MySQL 옵션 파일

이 예제에서와 같이 OPTIONS 설정 내에서 Django를 MySQL 옵션 파일로 지정하면 모든 NAME 설정보다 우선합니다. OPTIONS 설정 외부를 가리킬 수 있습니다.

이 시점에서 파일을 저장하고 닫을 수 있습니다.

다음으로 다음을 실행하여 마이그레이션 변경 사항을 확인합니다.

  1. python manage.py makemigrations

그런 다음 migrate를 실행하여 변경 사항이 적용되는지 확인합니다.

  1. python manage.py migrate

변경 사항이 마이그레이션되었으므로 이제 Django 관리 인터페이스에 사용할 관리 사용자를 생성할 수 있습니다. createsuperuser 명령으로 이 작업을 수행하십시오.

  1. python manage.py createsuperuser

사용자의 사용자 이름, 이메일 주소 및 비밀번호를 입력하라는 메시지가 표시됩니다.

이 정보를 완료한 후 테스트를 허용하도록 방화벽 설정 조정으로 이동할 수 있습니다.

6단계 - 방화벽 설정 조정

Django 웹 애플리케이션을 테스트하기 전에 방화벽 설정이 조정되었는지 확인해야 합니다. 포트 8000에 대한 액세스를 허용하도록 ufw 설정을 변경하여 시작하십시오.

  1. sudo ufw allow 8000

이러한 권한 설정이 성공적으로 업데이트되었는지 상태를 확인하십시오.

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8000 (v6) ALLOW Anywhere (v6)

이제 다음 단계에서 연결을 테스트할 수 있도록 방화벽 설정이 적절하게 조정되었습니다.

7단계 - 애플리케이션에 대한 MySQL 연결 테스트

이제 Django의 구성이 MySQL 서버를 올바르게 감지하는지 확인할 수 있습니다. 서버를 실행하여 이를 수행할 수 있습니다. 실패하면 연결이 제대로 작동하지 않는다는 의미입니다. 그렇지 않으면 연결이 유효합니다.

먼저 다음 디렉토리로 이동합니다.

  1. cd ~/my_blog_app/blog/

여기에서 다음 명령을 실행합니다.

  1. python manage.py runserver your-server-ip:8000

다음과 유사한 출력이 표시됩니다.

Output
Performing system checks... System check identified no issues (0 silenced). July 19, 2022 - 13:26:08 Django version 4.0.6, using settings 'blog.settings' Starting development server at http://your-server-ip:8000/ Quit the server with CONTROL-C.

참고: 출력에 적용되지 않은 마이그레이션이 있음을 알 수 있습니다. 걱정하지 마세요. 이는 애플리케이션의 초기 설정에 영향을 미치지 않으며 계속할 수 있습니다.

출력의 지침에 따라 제안된 링크 http://your-server-ip:8000/를 따라 웹 응용 프로그램을 보고 작동하는지 확인합니다. 제대로.

페이지가 위의 스크린샷과 유사하게 나타나면 Django 애플리케이션이 예상대로 작동하는 것입니다.

앱 테스트를 마치면 CTRL + C를 눌러 runserver 명령을 중지합니다. 이렇게 하면 프로그래밍 환경으로 돌아갑니다.

Python 환경을 떠날 준비가 되면 deactivate 명령을 실행할 수 있습니다.

  1. deactivate

프로그래밍 환경을 비활성화하면 터미널 명령 프롬프트로 돌아갑니다.

결론

이 자습서에서는 Django 블로그의 초기 기반을 만들었습니다. MySQL을 Django 백엔드에 설치, 구성 및 연결했습니다. 또한 애플리케이션의 settings.py 파일에 TIME_ZONE, ALLOWED_HOSTS, import os 와 같은 몇 가지 중요한 정보를 추가했습니다. 및 Django 애플리케이션을 MySQL에 연결하기 위한 데이터베이스 자격 증명. 테스트가 원활하게 진행될 수 있도록 방화벽 설정도 조정했습니다.

이제 이러한 기본 설정 및 구성이 완료되었으므로 Django 애플리케이션에서 모델 개발 및 마이그레이션 적용을 시작할 수 있습니다.