본문 바로가기

Back-end/MySQL

Django 앱을 만들고 MySQL에 연결하는 방법

소개

Python으로 작성된 무료 오픈 소스 웹 프레임 워크 인 Django는 확장 성, 재사용 성 및 신속한 개발을 허용합니다.

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

이렇게하면 블로그 웹 앱에서 작업 할 수있는 개발 환경이 제공되지만 블로그를 인터넷에 게시하기 전에 더 많은 단계를 거쳐야하며 도메인 이름을 설정하고 추가로 추가해야합니다. 보안 계층.

전제 조건

서버에 Python 환경이 설정되어 있어야합니다. 이 자습서에서는 Ubuntu 20.04 서버를 사용하지만이 자습서의 초점은 Django에 있으므로 다른 운영 체제에도 적용 할 수 있습니다.

Python을 설정 하려면 Ubuntu 20.04 서버에 Python 3을 설치하고 프로그래밍 환경을 설정하는 방법 자습서를 따르십시오 .

Python을 사용하면 앱을 만들 수 있습니다.

1 단계 — MySQL 설치

MySQL을 데이터베이스로 사용할 것입니다. 다른 데이터베이스를 사용하거나 이미 데이터베이스가 설치되어있을 수도 있습니다.이 경우이 단계를 건너 뛰어야합니다.

Ubuntu 20.04 서버에 MySQL을 설치하려면 다음을 입력하십시오.

sudo apt install mysql-server

 

다음 출력을 받아야합니다.

Output
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-05-07 20:22:51 UTC; 3min 7s ago
   Main PID: 2052 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1137)
     Memory: 317.4M
     CGroup: /system.slice/mysql.service
             └─2052 /usr/sbin/mysqld

받은 피드백에 MySQL 서버가 active. 이것이 사실이면이 튜토리얼을 계속할 수 있습니다.

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

애플리케이션의 토대를 마련하려면 django-admin명령을 사용하여 프로젝트 스켈레톤을 생성해야합니다 . 이 생성 된 프로젝트는 블로그 앱의 기초가 될 것입니다.

블로그 앱을 빌드하려는 디렉토리로 이동하십시오. 이 디렉터리 내에 앱을 빌드 할 특정 디렉터리를 만듭니다. 빌드중인 앱에 의미있는 디렉토리를 호출하십시오. 예를 들어 우리는 my_blog_app.

mkdir my_blog_app

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

cd my_blog_app

다음으로 Django 작업에 사용하려는 프로그래밍 환경으로 이동합니다. 기존 항목을 사용하거나 새로 만들 수 있습니다. 우리는 우리 env의 이름으로 부르 겠지만 의미있는 이름을 사용해야합니다. 생성되면 활성화 할 수 있습니다.

python3 -m venv env
. env/bin/activate

 

아직 설치하지 않은 경우이 환경에 Django를 설치합니다.

pip install django

에있는 동안 my_blog_app디렉토리, 우리는 다음 명령을 실행하여 프로젝트를 생성합니다 :

django-admin startproject blog

blog/디렉토리 로 이동하여 작동하는지 확인하십시오 .

cd blog

blog/디렉토리가 현재 디렉토리에 생성되어 있어야합니다, ~/my_blog_app/이전 실행 한 후 django-admin명령을.

실행 ls하여 필요한 항목이 생성되었는지 확인합니다. blog디렉토리와 manage.py파일 이 있어야 합니다.

Output

blog manage.py

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

3 단계 — 설정 편집

스켈레톤 프로젝트를 생성 했으므로 이제 settings.py파일 이 생겼습니다 .

블로그가 우리 지역과 관련된 정확한 시간을 갖기 settings.py위해 현재 시간대를 사용하도록 파일 을 편집합니다 .  시간대 목록을 참조로 사용할 수 있습니다 . 예를 들어 America/New_York시간을 사용 합니다.

파일을 편집하려고하므로 선택한 텍스트 편집기를 사용하여 파일 경로를 엽니 다. 여기에서는 나노를 사용합니다.

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

TIME_ZONE필드를 편집하고 있으므로 아래와 유사한 파일의 맨 아래 섹션으로 이동합니다.

settings.py
...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

TIME_ZONE현재 시간대로 설정되도록 라인 을 수정하겠습니다 . 이 예에서는 뉴욕 시간대를 사용합니다.

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

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

settings.py파일 끝으로 이동하여 STATIC_ROOT아래와 같이 추가 합니다.

settings.py
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

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

이제 정적 파일의 시간대와 경로를 추가 했으므로 허용 된 호스트 목록에 IP를 추가해야합니다. settings.py라고 표시된 파일 행으로 이동하면 파일 ALLOWED_HOSTS상단에 settings.py있습니다.

settings.py
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['your server IP address']

# Application definition
...

대괄호와 작은 따옴표 사이에 서버의 IP 주소를 추가합니다.

변경 사항에 만족하면 파일을 저장하십시오. nano를 사용하는 경우 CTRL+ X를 누른 다음 y변경 사항을 확인 하여 수행 할 수 있습니다 .

settings.py적절한 시간대가 구성되도록 파일을 성공적으로 편집했습니다 . 또한 정적 파일의 경로를 추가하고 설정 한 ip address로 ALLOWED_HOST응용 프로그램에 대한합니다.

마지막으로 Djano 관리자 인터페이스를 사용할 수 있도록 관리자를 생성 해 보겠습니다 . 다음 createsuperuser명령 으로이 작업을 수행해 보겠습니다 .

python manage.py createsuperuser

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

이 시점에서 데이터베이스 연결을 설정할 수 있습니다.

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

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

먼저 python3-dev설치 했는지 확인하십시오 . python3-dev다음 명령을 실행하여 설치할 수 있습니다 .

sudo apt install python3-dev

이제 필요한 Python 및 MySQL 개발 헤더와 라이브러리를 설치할 수 있습니다.

sudo apt install python3-dev libmysqlclient-dev default-libmysqlclient-dev

눌러 y및 ENTER설치를 수용 할 수 있습니다.

설치가 완료되면에서 라이브러리 pip3를 설치하는 데 사용합니다 . 우리의 버전 때문에 점하기 위해 , 우리는 그냥 사용할 수 있습니다 .mysqlclient PyPi pip pip3 pip

pip install mysqlclient

다음과 유사한 출력이 표시되어 제대로 설치되고 있는지 확인합니다.

successfully installed mysqlclient

... Successfully installed mysqlclient-1.4.6

successfully installed mysqlclient
...
Successfully installed mysqlclient-1.4.6

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

5 단계 — 데이터베이스 생성

이제 장고 응용 프로그램의 골격가 설정되어있는 것을 mysqlclient하고 mysql-server설치 한, 우리는 필요에 MySQL의 호환성을 위해 장고 백엔드를 구성 할 것입니다.

다음 명령을 사용하여 MySQL 루트를 통해 로그인합니다.

sudo mysql -u root

프롬프트가 변경되면 MySQL 서버에 있음을 알 수 있습니다.

mysql>

다음 명령을 사용하여 현재 데이터베이스를 살펴 보겠습니다.

SHOW DATABASES;

아직 데이터베이스를 생성하지 않았다고 가정하면 다음과 유사한 출력이 표시됩니다.

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

참고 : 연결을 시도하는 동안 오류가 발생하면 암호가 올바른지 그리고 MySQL을 올바르게 설치했는지 확인하십시오. 그렇지 않으면 MySQL 설치 및 구성 방법에 대한 자습서를 다시 참조하십시오 .

기본적으로 4 데이터베이스가됩니다 이미 생성, information_schema, MySQL, performance_schema와 sys. 여기에는 MySQL 서버 자체에 중요한 정보가 포함되어 있으므로 만질 필요가 없습니다.

이제 MySQL 서버에 성공적으로 로그인 했으므로 블로그의 데이터를 보관할 초기 데이터베이스를 생성합니다.

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

CREATE DATABASE blog_data;

데이터베이스가 성공적으로 생성되면 다음 출력이 표시됩니다.

OutputQuery OK, 1 row affected (0.00 sec)

 

다음으로 데이터베이스가 사용 가능한 데이터베이스 목록에 나열되어 있는지 확인합니다.

SHOW DATABASES;

blog_data데이터베이스가 출력에 포함 된 데이터베이스 중 하나임을 확인해야합니다 .

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

다음으로 새 데이터베이스를 운영하기 위해 독점적으로 사용할 별도의 MySQL 사용자 계정을 만들 것입니다. 특정 데이터베이스와 계정을 생성하면 관리 및 보안 관점에서 우리를 지원할 수 있습니다. 이 가이드에서는 djangouser 라는 이름 을 사용하지만, 어떤 이름이든 상관없이 자유롭게 사용하십시오.

이 계정을 만들고, 암호를 설정하고, 우리가 만든 데이터베이스에 대한 액세스 권한을 부여 할 것입니다. 다음 명령을 입력하여이를 수행 할 수 있습니다. 다음과 같은 데이터베이스 사용자를 위해 여기에서 강력한 암호를 선택해야합니다 password.

CREATE USER 'djangouser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

다음으로, djangouser 가 우리가 설정 한 데이터베이스에 대한 완전한 액세스 권한이 있어야한다는 것을 데이터베이스에 알립니다 .

GRANT ALL ON blog_data.* TO 'djangouser'@'%';

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

FLUSH PRIVILEGES;

완료되면 + 를 입력 EXIT;하거나 눌러 MySQL 서버를 종료 할 수 있습니다 .CTRLD

 

6 단계 — 애플리케이션에 MySQL 데이터베이스 연결 추가

마지막으로 Django 애플리케이션에 데이터베이스 연결 자격 증명을 추가합니다.

참고 : 다음과 같은 순서로 사용되는 장고 설명서에 따라, 해당 연결 설정을 기억하는 것이 중요하다 :
- OPTIONS
- NAME, USER, PASSWORD, HOST, PORT
-MySQL option files.

Django 블로그 앱을 MySQL에 연결하는 데 필요한 사항을 변경해 보겠습니다.

settings.py파일로 이동 하여 현재 DATABASES행을 다음으로 바꿉니다. MySQL을 데이터베이스 백엔드로 사용하고 어떤 파일에서 데이터베이스 연결 자격 증명을 읽을 지 알 수 있도록 데이터베이스 사전을 구성합니다.

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

거기에있는 줄을 삭제하고 올바른 수의 중괄호를 유지하면서 다음과 같이 바꿉니다.

...
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

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

파일을 저장하고 닫습니다.

다음으로 MySQL 자격 증명을 갖도록 구성 파일을 편집 해 보겠습니다. nano as sudo를 사용 하여 파일을 편집하고 다음 정보를 추가하십시오.

sudo nano /etc/mysql/my.cnf

다음 행을 추가하고 관련 정보를 포함하십시오.

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

utf8기본 인코딩으로 설정되어 있음을 알 수 있습니다 . 이것은 MySQL에서 유니 코드 데이터를 인코딩하는 일반적인 방법입니다. 세부 정보가 정확하다고 확신하면 파일을 저장하고 닫습니다.

파일이 편집되면 변경 사항을 적용하려면 MySQL을 다시 시작해야합니다.

sudo systemctl daemon-reload
sudo systemctl restart mysql

 

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

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

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

먼저 다음과 같이 변경 사항을 django에 적용 해 보겠습니다.

python manage.py migrate

다음 디렉터리로 이동해야합니다.

cd ~/my_blog_app/blog/

여기에서 다음 명령을 실행할 수 있습니다.

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

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

Output
Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

January 4, 2018 - 15:45:39
Django version 2.0.1, 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명령을 실행할 수 있습니다.

deactivate

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

결론

이 자습서에서는 Django 블로그의 초기 기반을 만들었습니다. MySQL을 설치, 구성 및 Django 백엔드에 연결했습니다. 당신은 또한 응용 프로그램의 몇 가지 중요한 정보를 추가 한 settings.py같은 파일을 TIME_ZONE하고 ALLOWED_HOSTS.

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

 

출처 : www.digitalocean.com/community/tutorials/how-to-create-a-django-app-and-connect-it-to-a-database