언어/PYTHON

[Django] 프로젝트 실행

HmHjj 2022. 12. 1. 16:01
728x90
반응형

Django 프로젝트 웹서버 만들기

Django 환경을 설정한 후 프로젝트 및 서버 운영 방법을 통하여 서비스를 해보겠습니다.  

환경 구성 정보

ubuntu 20.04 LTS

 

Django 프로젝트 만들기

프로젝트 생성 명령어 :  django-admin startproject mysite

(test) test@ubuntu2004:~/test$ django-admin startproject mysite
(test) test@ubuntu2004:~/test$ cd mysite/
(test) test@ubuntu2004:~/test/mysite$ ls -laR
.:
total 16
drwxrwxr-x 3 test test 4096 Dec  1 13:42 .
drwxrwxr-x 3 test test 4096 Dec  1 13:42 ..
-rwxrwxr-x 1 test test  662 Dec  1 13:42 manage.py
drwxrwxr-x 2 test test 4096 Dec  1 13:42 mysite

./mysite:
total 24
drwxrwxr-x 2 test test 4096 Dec  1 13:42 .
drwxrwxr-x 3 test test 4096 Dec  1 13:42 ..
-rw-rw-r-- 1 test test  389 Dec  1 13:42 asgi.py
-rw-rw-r-- 1 test test    0 Dec  1 13:42 __init__.py
-rw-rw-r-- 1 test test 3221 Dec  1 13:42 settings.py
-rw-rw-r-- 1 test test  748 Dec  1 13:42 urls.py
-rw-rw-r-- 1 test test  389 Dec  1 13:42 wsgi.py

프로젝트를 생성하면 위와 같이 여러 파일들이 자동생성된다. 

  • manage.py : django 프로젝트에 파일 이름처럼 관리해주는 역할 , DB 를 만들거나 서버를 시작할 때 사용된다. 
  • mysite 프로젝트명으로 생성된 폴더로 서버 실행에 필요한 환경들을 설정할때 사용된다. 
    • asgi.py 비동기 웹 서버를 사용해서 사용할때 설정하여 쓰는것으로 send , recive 정도로 보면 된다. 
    • __init__.py Django가 인지 할수 있게 폴더 안에 확인용이라고 보면 된다. 
    • settings.py 웹서버의 관련된 모든 설정들이 다 들어간다.
    • urls.py 접속하는 사이트의 URL 설정으로 view 와의 연결에 사용한다. 
    • wsgi.py asgi와 달리하는 Web Server Gateway Interface 로 request , response 형식의 호출 방식 설정이다. 

 

django-admin 간략 설명

프로젝트를 만들 때 사용하는것으로 알려져 있으나 기능이 좀 더 있긴하다.  보통 프로젝트 생성하고나서는 manage.py 에서 대부분 지원이 되기에 사용 안한다. 

 

django-admin 기능을 사용하려면 아래와 같이 경로 설정이 필요하며, 옵션들도 manage.py 사용하는것도 동일하다.  

export DJANGO_SETTINGS_MODULE=mysite.settings
(test) test@ubuntu2004:~$ django-admin

Type 'django-admin help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    optimizemigration
    runserver
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

 

Django Setting.py

setting.py 파일을 열어 내용 수정을 해보자. 

  • DEBUG = True  주석으로 달려있지만 디버그 false 로 해야 오류나 문제 생길시 관련 로그들을 페이지에 전송하지 않는다. 
  • ALLOWED_HOSTS = []  접근 가능한 주소를 넣어야 서버에 접근이 가능하다. 보통은 localhost 나 127.0.0.1을 넣어준다.
  • INSTALLED_APPS  서비스에 필요한 APP을 명시해 준다. rest_framwork 나 추가로 넣을 APP이름을 넣으면 된다. 
  • MIDDLEWARE 전송과 관련된 패키지 추가시 넣으면 된다. CsrfViewMiddleware 같은 권한 관련 내용들을 추가한다. 
  • ROOT_URLCONF urls 파일이 어디있는지 작성하는 항목이다. 
  • TEMPLATES Django 에서 사용하는 template engine 설정 부분인데 기본 설정 되어 있다. 
  • WSGI_APPLICATION 기본 wsgi 경로로 설정되어있다. 
  • DATABASES database 설정 부분으로 mysql이나 기타 DB 설정이 가능하며 기본이 sqlite로 되어있다. 
  • AUTH_PASSWORD_VALIDATORS 패스워드 유호성 설정 더 안전한 설정을 위해 추가 할수 있다. 
  • LANGUAGE_CODE 영어로 되어있는데 ko-kr 로 바꿔주자. 
  • TIME_ZONE 타임존 설정으로 UTC가 기본인데  'Asia/Seoul' 변경하자. 
  • USE_I18N = True Django 번역 관련 기능 활성화 
  • USE_TZ = True 시간대 인식하여 설정 부분 
  • STATIC_URL 웹 페이지에서 사용하는 static 파일 경로
  • DEFAULT_AUTO_FIELD 오토필드 설정 model에서 자동으로 사용하는 기능이다. 

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-n_6u4%anfff3#+yubs71l&w3pxv%9h*4soiw@6mn=x0g7=^$h&'

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

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
...
...

 

Django app 만들기  

startapp  명령어 : python manage.py startapp testapp

app 이름으로 폴더 하나 생성되고 그 아래에 py 파일들이 자동 생성된다. 

(test) test@ubuntu2004:~/test/mysite$ python manage.py startapp testapp
(test) test@ubuntu2004:~/test/mysite$ ls -al
total 20
drwxrwxr-x 4 test test 4096 Dec  1 14:49 .
drwxrwxr-x 3 test test 4096 Dec  1 13:42 ..
-rwxrwxr-x 1 test test  662 Dec  1 13:42 manage.py
drwxrwxr-x 2 test test 4096 Dec  1 14:49 mysite
drwxrwxr-x 3 test test 4096 Dec  1 14:49 testapp
(test) test@ubuntu2004:~/test/mysite$ ls -al testapp
total 32
drwxrwxr-x 3 test test 4096 Dec  1 14:49 .
drwxrwxr-x 4 test test 4096 Dec  1 14:49 ..
-rw-rw-r-- 1 test test   63 Dec  1 14:49 admin.py
-rw-rw-r-- 1 test test  146 Dec  1 14:49 apps.py
-rw-rw-r-- 1 test test    0 Dec  1 14:49 __init__.py
drwxrwxr-x 2 test test 4096 Dec  1 14:49 migrations
-rw-rw-r-- 1 test test   57 Dec  1 14:49 models.py
-rw-rw-r-- 1 test test   60 Dec  1 14:49 tests.py
-rw-rw-r-- 1 test test   63 Dec  1 14:49 views.py
  • admin.py admin page를 자동 생성하는데 model들 즉 DB에 저장 될 내용들을 넣으면 DB도 생성해준다.  
  • apps.py app 관련 설정 부분으로 기본설정 DEFAULT_AUTO_FIELD 설정을 적용한다. 
  • __init__.py python 기본 파일
  • migrations 기동하기 전에 python 내용들의 DB 내용을 정리해 둔 폴더로 업데이트 마다 파일이 생성된다. 
  • models.py DB 관련 생성에 필요한 파일 model 별 테이블이 생성된다. 
  • tests.py 테스트 용 py 파일 
  • views.py url 과 연결하기 위한 메인 파일. 

 

Django makemigrations

python manage.py makemigrations

이제 app 도 만들었으니 서버 migrations 작업을 진행한다. py 파일들을 확인해서 변경내용들로 migrations 폴더에 작성한다. 

python manage.py migrate 

실제 migrations 된 내용들을 반영한다 sqlite 파일에 DB 생성 작업을 진행한다. 

(test) test@ubuntu2004:~/test/mysite$ python manage.py makemigrations
No changes detected
(test) test@ubuntu2004:~/test/mysite$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
(test) test@ubuntu2004:~/test/mysite$

 

Django runserver 

python manage.py runserver

Django 웹서버를 기동한다. 별다른 설정 없이 바로 실행이 된다.  웹페이지에서 접속하려면 http://127.0.0.1:8000이라고 뜬다 Linux에서 접속해야하는데 보통 원격에서 client 로 붙어서 작업할테니 서비스 띄울때 변경해서 띄우는것이 좋다. 

 

python manage.py runserver 0.0.0.0:8000 명령어로 기동하면 다른 서버에서도 접속이 가능하며, setting.py 에 ALLOWED_HOSTS 항목에 IP 를 적어 주던가 아니면 '*' 를 넣어서 모두 접속가능하게 설정해야 접근이 가능하다. 

(test) test@ubuntu2004:~/test/mysite$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
December 01, 2022 - 15:54:17
Django version 4.1.3, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
(test) test@ubuntu2004:~/test/mysite$ python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
December 01, 2022 - 15:54:17
Django version 4.1.3, using settings 'mysite.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

 

웹사이트 주소로 접속하면 아래와 같이 성공이라는 화면을 볼수 있다. 

 

 

 

728x90
반응형