Django를 사용하여 처음부터 블로그 구축 I

2024. 2. 8. 19:41python/intermediate

즉시 사용할 수 있는 블로그 플랫폼이 많이 있습니다. 그러나 Django를 사용하여 처음부터 자신만의 블로그를 구축하는 것은 콘텐츠를 계속 제어할 수 있는 좋은 방법입니다. Django를 막 시작하는 경우에도 Django의 사용자 친화적인 기능을 통해 콘텐츠 디자인 및 게시에 집중할 수 있습니다.
그 과정에서 Django 관리 사이트를 활용하고 Django에서 양식을 사용하여 작업하는 방법을 탐색하게 됩니다. 이것은 Django의 세계에 발을 담그기 위한 이상적인 프로젝트이지만 Python 기본 에 대한 탄탄한 기초가 있어야 합니다 .

개발 환경 설정

새로운 웹 개발 프로젝트를 시작할 때마다 먼저 개발 환경을 설정하는 것이 좋습니다.

In [1]:
!mkdir django-blog
%cd django-blog
/home/pulisul/django-blog

django-blog/ 디렉터리 내부로 들어가면 종속성을 관리하기 위한 가상 환경을 만드는 것이 좋습니다.

In [2]:
!python -m venv venv

이 명령은 작업 디렉터리에 venv/ 폴더를 생성합니다. 이 디렉터리에는 Python 표준 라이브러리의 복사본을 포함하여 여러 파일이 있습니다. 나중에 새 종속성을 설치할 때 이 디렉터리에도 해당 종속성이 저장됩니다. 다음으로, 다음 명령을 실행하여 가상 환경을 활성화해야 합니다.

In [3]:
!source venv/bin/activate

위 명령을 사용하면 Python의 내장 venv모듈을 사용하여 venv라는 이름이 지정된 가상 환경을 만들고 활성화합니다. (venv)프롬프트 앞의 괄호는 가상 환경이 성공적으로 활성화되었음을 나타냅니다.
이제 가상 환경을 생성하고 활성화했으므로 Django를 설치할 차례입니다. pip을 사용하여 이 작업을 수행할 수 있습니다.

In [4]:
!python -m pip install Django
DEPRECATION: Loading egg at /home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/llama-0.0.1-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330
Requirement already satisfied: Django in /home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages (4.2.7)
Requirement already satisfied: asgiref<4,>=3.6.0 in /home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages (from Django) (3.7.2)
Requirement already satisfied: sqlparse>=0.3.1 in /home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages (from Django) (0.4.4)

가상 환경을 설정하고 Django를 설치한 후에는 이제 Django 프로젝트 생성을 시작할 수 있습니다.

Django 프로젝트 시작

Django 웹 애플리케이션은 프로젝트 와 앱 으로 구성됩니다 . Django 프로젝트에는 프로젝트 설정, URL, 공유 템플릿, 정적 파일 등 웹 애플리케이션에 전체적으로 적용되는 일부 구성이 포함되어 있습니다. 각 Django 앱에는 자체 URL은 물론 자체 HTML 템플릿과 JavaScript 및 CSS 와 같은 정적 파일이 있을 수 있습니다 .

Django 프로젝트를 생성하려면 django-blog/가상 환경이 활성화된 디렉터리에 있는지 확인하세요. 그런 다음, 다음 명령을 실행하여 personal_blog프로젝트를 생성합니다.

In [5]:
!django-admin startproject personal_blog .
 

위 명령 끝에 점(.)을 추가하는 것을 잊지 마세요. 점은 Django가 포트폴리오 프로젝트에 대해 중첩된 프로젝트 디렉터리를 생성하는 것을 방지합니다. 그렇지 않으면 personal_blog/ 하위 디렉터리가 포함된 personal_blog/ 폴더가 생성됩니다.

위와 같이 startproject 명령을 실행하면 Django에게 django-blog/디렉터리에 personal_blog/라는 하나의 폴더를 생성하도록 지시한 것입니다. 디렉터리 구조는 다음과 같아야 합니다.

파일 구조가 설정되면 이제 Django 개발 서버를 시작 하고 설정이 성공적으로 완료되었는지 확인할 수 있습니다. 콘솔에서 다음 명령을 실행합니다.

In [ ]:
!python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 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.
February 08, 2024 - 10:26:29
Django version 4.2.7, using settings 'personal_blog.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

/home/pulisul/django-blog/personal_blog/settings.py changed, reloading.
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/django/core/management/commands/runserver.py", line 125, in inner_run
    autoreload.raise_last_exception()
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/django/utils/autoreload.py", line 87, in raise_last_exception
    raise _exception[1]
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/django/core/management/__init__.py", line 394, in execute
    autoreload.check_errors(django.setup)()
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/django/apps/registry.py", line 91, in populate
    app_config = AppConfig.create(entry)
                 ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/site-packages/django/apps/config.py", line 178, in create
    mod = import_module(mod_path)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/pulisul/.pyenv/versions/3.11.0/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1128, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1142, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'blog'

그런 다음 브라우저에서 http://localhost:8000로 이동하면 다음이 표시됩니다.

처음부터 구축할 블로그 앱 추가

사이트의 이 부분의 기능을 구축하기 전에 blog라는 이름의 새 Django 앱을 만듭니다.

In [ ]:
!python manage.py startapp blog

앱을 만든 후에는 프로젝트를 설치해야 합니다. django-blog/personal_blog/settings.py에서, 편한 편집기로 다음 코드 줄을 INSTALLED_APPS 아래에 추가합니다.

In [ ]:
# personal_blog/settings.py

# ...

INSTALLED_APPS = [
    "blog.apps.BlogConfig",
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

# ...

Django 프로젝트에 앱을 포함하려면 settings.py의 INSTALLED_APPS 목록 시작 부분에 해당 구성 클래스에 대한 참조를 추가해야 합니다.

blog.apps.BlogConfig를 추가하면 방금 만든 앱이 존재한다는 것을 Django에게 알릴 수 있습니다. blog블로그를 처음부터 성공적으로 구축하는 데 한 걸음 더 가까워졌습니다! 다음 단계는 블로그 콘텐츠를 데이터베이스에 저장하는 방법에 대한 논리를 정의하는 모델을 만드는 것입니다.

 

출처 : https://realpython.com/build-a-blog-from-scratch-django/