수색…


비고

Django는 "마감 시간을 가진 완벽 주의자를위한 웹 프레임 워크"로 광고하고 Django를 사용하면보다 신속하고 적은 코드로 더 나은 웹 응용 프로그램을보다 쉽게 ​​만들 수 있습니다. 이것은 MVC 아키텍처로 볼 수 있습니다. 핵심은 다음과 같습니다.

  • 개발 및 테스트 용 경량의 독립형 웹 서버
  • HTML 양식과 데이터베이스의 저장에 적합한 값 사이에서 변환 할 수있는 양식 직렬화 및 유효성 검사 시스템
  • 객체 지향 프로그래밍에서 차용 한 상속 개념을 이용하는 템플릿 시스템
  • 요청 처리의 여러 단계에서 개입하고 사용자 정의 함수를 수행 할 수있는 미들웨어 클래스에 대한 여러 캐시 메소드 지원 중 하나를 사용할 수있는 캐싱 프레임 워크
  • 응용 프로그램의 구성 요소가 미리 정의 된 신호를 통해 서로 이벤트를 통신 할 수있게 해주는 내부 디스패처 시스템
  • Django 자신의 구성 요소를 다양한 언어로 번역하는 등의 국제화 시스템
  • Django 모델 인스턴스의 XML 및 / 또는 JSON 표현을 생성하고 읽을 수있는 직렬화 시스템
  • 템플릿 엔진의 기능을 확장하는 시스템
  • 파이썬의 유닛 테스트 프레임 워크에 내장 된 인터페이스

버전

번역 출시일
1.11 2017-04-04
1.10 2016-08-01
1.9 2015-12-01
1.8 2015-04-01
1.7 2014-09-02
1.6 2013-11-06
1.5 2013-02-26
1.4 2012-03-23
1.3 2011 년 3 월 23 일
1.2 2010-05-17
1.1 2009-07-29
1.0 2008-09-03

프로젝트 시작

Django는 Python을 기반으로하는 웹 개발 프레임 워크입니다. Django 1.11 (최신 안정 릴리스)에서는 Python 2.7 , 3.4 , 3.5 또는 3.6 이 설치되어 있어야합니다. pip 를 사용할 수 있다고 가정하면 설치는 다음 명령을 실행하는 것처럼 간단합니다. 아래에 표시된 버전을 생략하면 최신 버전의 django가 설치됩니다.

$ pip install django

django의 특정 버전을 설치하려면, 버전이 django 1.10.5 라고 가정 해 봅시다. 다음 명령을 실행하십시오 :

$ pip install django==1.10.5

Django를 사용하여 빌드 된 웹 응용 프로그램은 Django 프로젝트 내에 있어야합니다. django-admin 명령을 사용하여 현재 디렉토리에서 새 프로젝트를 시작할 수 있습니다 :

$ django-admin startproject myproject

여기서 myproject 는 프로젝트를 고유하게 식별하는 이름이며 숫자 , 문자밑줄 로 구성 될 수 있습니다.

그러면 다음과 같은 프로젝트 구조가 생성됩니다.

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        wsgi.py

응용 프로그램을 실행하려면 개발 서버를 시작하십시오.

$ cd myproject
$ python manage.py runserver

이제 서버가 실행 http://127.0.0.1:8000/ 웹 브라우저에서 http://127.0.0.1:8000/ 을 방문하십시오. 다음 페이지가 표시됩니다.

여기에 이미지 설명을 입력하십시오.

기본적으로 runserver 명령은 8000 포트의 내부 IP에서 개발 서버를 시작합니다. 이 서버는 코드를 변경하면 자동으로 다시 시작됩니다. 그러나 새 파일을 추가하는 경우 서버를 수동으로 다시 시작해야합니다.

서버의 포트를 변경하려면 명령 행 인수로 전달하십시오.

$ python manage.py runserver 8080

서버의 IP를 변경하려면 포트와 함께 전달하십시오.

$ python manage.py runserver 0.0.0.0:8000

runserver 는 디버그 빌드 및 로컬 테스트에만 사용됩니다. 프로덕션 환경에서는 항상 Apache와 같은 특수 서버 프로그램을 사용해야합니다.

장고 앱 추가하기

Django 프로젝트에는 대개 여러 개의 apps 있습니다. 이는 간단하고 유지 보수가 쉬운 모듈로 프로젝트를 구성하는 간단한 방법입니다. 응용 프로그램을 만들려면 projectfolder ( manage.py 위치)로 이동하여 startapp 명령을 실행하십시오 ( myapp 를 원하는대로 변경하십시오).

python manage.py startapp myapp

이렇게하면 models.pyviews.py 와 같이 myapp 폴더와 필요한 일부 파일이 생성됩니다.

장고에 myapp알리 려면 settings.py 추가하십시오 :

# myproject/settings.py

# Application definition
INSTALLED_APPS = [
    ...
    'myapp',
]

Django 프로젝트의 폴더 구조는 환경 설정에 맞게 변경할 수 있습니다. 반복되는 폴더 이름을 피하기 위해 프로젝트 폴더의 이름이 /src 로 바뀌는 경우가 있습니다. 일반적인 폴더 구조는 다음과 같습니다.

디렉토리 구조

장고 개념

django-admin 은 Django와 함께 제공되는 명령 행 도구입니다. Django 프로젝트를 시작하고 관리하는 데 유용한 몇 가지 명령 이 있습니다. 이 명령은 ./manage.py 와 동일하지만 프로젝트 디렉토리에있을 필요가 없다는 차이점이 있습니다. DJANGO_SETTINGS_MODULE 환경 변수를 설정해야합니다.

Django 프로젝트 는 Django 설정 파일을 포함하는 Python 코드베이스입니다. Django 관리자는 django-admin startproject NAME 명령을 통해 프로젝트를 생성 할 수 있습니다. 프로젝트는 일반적으로 최상위 수준에서 manage.py 라는 파일과 urls.py 라는 루트 URL 파일을 가지고 있습니다. manage.pydjango-admin 의 프로젝트 특정 버전이며, 해당 프로젝트에서 관리 명령을 실행할 수있게합니다. 예를 들어 프로젝트를 로컬에서 실행하려면 python manage.py runserver . 프로젝트는 Django 앱으로 구성됩니다.

장고 앱 은 모델 파일 (기본적으로 models.py )과 앱 별 URL 및보기와 같은 다른 파일을 포함하는 Python 패키지입니다. 응용 프로그램은 django-admin startapp NAME 명령을 통해 만들 수 있습니다 (이 명령은 프로젝트 디렉토리에서 실행해야합니다). 앱이 프로젝트의 일부인 경우 settings.pyINSTALLED_APPS 목록에 앱이 포함되어야합니다. 장고에 표준 설정을 사용했다면, Django는 여러분에게 인증 과 같은 일을 처리 할 자체 앱이 미리 설치되어있는 여러 개의 애플리케이션을 제공합니다. 앱은 여러 장고 프로젝트에서 사용할 수 있습니다.

Django ORMmodels.py 정의 된 모든 데이터베이스 모델을 수집하고 해당 모델 클래스를 기반으로 데이터베이스 테이블을 생성합니다. 이렇게하려면 먼저 settings.pyDATABASES 설정을 수정하여 DATABASESsettings.py . 그런 다음 데이터베이스 모델 을 정의한 후에 python manage.py makemigrations 실행 한 다음 python manage.py migrate 를 실행하여 모델을 기반으로 데이터베이스 스키마를 만들거나 업데이트하십시오.

완전한 안녕하세요 세상의 예.

1 단계 Django를 이미 설치했다면이 단계를 건너 뛸 수 있습니다.

pip install Django

2 단계 새 프로젝트 만들기

django-admin startproject hello

그러면 다음 파일이 포함될 hello 라는 폴더가 생성됩니다.

hello/
├── hello/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

3 단계 hello 모듈 ( __init.py__ 포함하는 폴더) views.py 라는 파일을 만듭니다.

hello/
├── hello/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py  <- here
│   └── wsgi.py
└── manage.py

다음 내용을 기재하십시오.

from django.http import HttpResponse

def hello(request):
    return HttpResponse('Hello, World')

이를 뷰 기능이라고합니다.

4 단계 hello/urls.py 를 다음과 같이 편집하십시오.

from django.conf.urls import url
from django.contrib import admin
from hello import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.hello)
]

뷰 함수 hello() 를 URL에 연결합니다.

5 단계 서버를 시작합니다.

python manage.py runserver

6 단계

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

안녕하세요, 세계

가상 환경

엄격하게 요구되는 것은 아니지만 "가상 환경"에서 프로젝트를 시작하는 것이 좋습니다. 가상 환경은 특정 버전의 Python과 모듈 세트 (종속성)를 보유하고 운영 체제의 원시 Python 또는 다른 컴퓨터를 동일한 컴퓨터에 방해하지 않는 컨테이너 (디렉토리)입니다.

작업하는 각 프로젝트마다 다른 가상 환경을 설정함으로써 다양한 Django 프로젝트가 서로 다른 버전의 Python에서 실행될 수 있으며 충돌 위험없이 자체 종속성 세트를 유지 관리 할 수 ​​있습니다.

Python 3.3 이상

Python 3.3+에는 이미 표준 venv 모듈이 포함되어 있습니다.이 모듈은 대개 pyvenv 호출 할 수 있습니다. pyvenv 명령을 사용할 수없는 환경에서는 모듈을 python3 -m venv 로 직접 호출하여 동일한 기능에 액세스 할 수 있습니다.

가상 환경을 만들려면

$ pyvenv <env-folder>
# Or, if pyvenv is not available
$ python3 -m venv <env-folder>

파이썬 2

Python 2를 사용하는 경우, 먼저 pip에서 별도의 모듈로 설치할 수 있습니다.

$ pip install virtualenv

대신 virtualenv 명령을 사용하여 환경을 만듭니다.

$ virtualenv <env-folder>

활성화 (모든 버전)

이제 가상 환경이 설정되었습니다. 이를 사용하려면 사용하려는 터미널에서 활성화 해야합니다.

가상 환경 (모든 Python 버전)을 '활성화'하려면

리눅스 좋아해 :

$ source <env-folder>/bin/activate

Windows 좋아해 :

<env-folder>\Scripts\activate.bat

이렇게하면 가상 환경이 활성 상태임을 나타내는 프롬프트가 변경됩니다. (<env-folder>) $

이제부터는 pip 를 사용하여 설치 한 모든 것이 시스템 전체가 아닌 virtual env 폴더에 설치됩니다.

가상 환경을 사용하지 않으려면 deactivate .

(<env-folder>) $ deactivate

또는 virtualenvwrapper를 사용하십시오.

또한 virtualenvwrapper 를 사용하여 virtualenv 생성 및 활성화를 매우 편리하게 만들고 코드에서 분리 할 수 ​​있습니다.

# Create a virtualenv
mkvirtualenv my_virtualenv

# Activate a virtualenv
workon my_virtualenv

# Deactivate the current virtualenv
deactivate

또는 pyenv + pyenv-viritualenv를 사용합니다.

여러 Python 버전을 처리해야하는 환경에서는 pyenv-virtualenv와 함께 virtualenv의 이점을 누릴 수 있습니다.

# Create a virtualenv for specific Python version
pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

# Create a vritualenv for active python verion
pyenv virtualenv venv34

# Activate, deactivate virtualenv
pyenv activate <name>
pyenv deactivate

virtualenvs를 사용할 때 postactivate 스크립트 에서 PYTHONPATHDJANGO_SETTINGS_MODULE 을 설정하는 것이 유용합니다.

#!/bin/sh
# This hook is sourced after this virtualenv is activated

# Set PYTHONPATH to isolate the virtualenv so that only modules installed
# in the virtualenv are available
export PYTHONPATH="/home/me/path/to/your/project_root:$VIRTUAL_ENV/lib/python3.4"

# Set DJANGO_SETTINGS_MODULE if you don't use the default `myproject.settings`
# or if you use `django-admin` rather than `manage.py`
export DJANGO_SETTINGS_MODULE="myproject.settings.dev"

프로젝트 경로 설정

또한 프로젝트 경로를 기본 <env-folder> 에있는 특수한 .project 파일 내에 설정하는 것이 좋습니다. 이렇게하면 가상 환경을 활성화 할 때마다 활성 디렉토리가 지정된 경로로 변경됩니다.

<env-folder>/.project 라는 새 파일을 만듭니다. 파일의 내용은 프로젝트 디렉토리의 경로 여야합니다.

/path/to/project/directory

이제 가상 환경 ( source <env-folder>/bin/activate 또는 workon my_virtualenv )을 시작하면 터미널은 /path/to/project/directory 합니다.

단일 파일 Hello World의 예

이 예제는 Django에서 Hello World 페이지를 만드는 최소한의 방법을 보여줍니다. 이것은 django-admin startproject example 명령이 기본적으로 많은 폴더와 파일을 생성하고 프로젝트를 실행하기 위해 그 구조가 반드시 필요한 것은 아니라는 것을 깨닫도록 도와줍니다.

  1. file.py 라는 파일을 만듭니다.

  2. 해당 파일에 다음 코드를 복사하여 붙여 넣으십시오.

     import sys
     
     from django.conf import settings
     
     settings.configure(
         DEBUG=True,
         SECRET_KEY='thisisthesecretkey',
         ROOT_URLCONF=__name__,
         MIDDLEWARE_CLASSES=(
             'django.middleware.common.CommonMiddleware',
             'django.middleware.csrf.CsrfViewMiddleware',
             'django.middleware.clickjacking.XFrameOptionsMiddleware',
         ),
     )
     
     from django.conf.urls import url
     from django.http import HttpResponse
     
     # Your code goes below this line.
    
     def index(request):
         return HttpResponse('Hello, World!')
    
     urlpatterns = [
         url(r'^$', index),
     ]
    
     # Your code goes above this line
     
     if __name__ == "__main__":
         from django.core.management import execute_from_command_line
     
         execute_from_command_line(sys.argv)
    
  3. 터미널로 가서 python file.py runserver 명령을 사용하여 파일을 실행하십시오.

  4. 브라우저를 열고 127.0.0.1:8000으로 이동하십시오.

Docker 지원과 함께 배포 친화적 인 프로젝트.

기본 Django 프로젝트 템플릿은 괜찮지 만 일단 코드를 배포하게되면 예를 들어 devop이 프로젝트에 손을 대는 등 일이 더러워집니다. 리포지토리에 있어야하는 나머지 소스 코드와 소스 코드를 분리하면됩니다.

사용 가능한 Django 프로젝트 템플릿은 GitHub 에서 찾을 수 있습니다.

프로젝트 구조

PROJECT_ROOT
├── devel.dockerfile
├── docker-compose.yml
├── nginx
│   └── project_name.conf
├── README.md
├── setup.py
└── src
    ├── manage.py
    └── project_name
        ├── __init__.py
        └── service
            ├── __init__.py
            ├── settings
            │   ├── common.py
            │   ├── development.py
            │   ├── __init__.py
            │   └── staging.py
            ├── urls.py
            └── wsgi.py

모든 프로젝트에서 동일한 Dockerfile 을 사용할 수 있기 때문에 모든 프로젝트에 service 라는 service 디렉토리를 유지하고 싶습니다. 요구 사항과 설정의 분리는 이미 여기에 잘 설명되어 있습니다.
여러 요구 사항 파일 사용
여러 설정 사용

도커 파일

개발자 만 Docker를 사용한다는 가정하에 (모든 dev 운영자가 요즘을 신뢰하지는 않습니다). 이것은 dev 환경 일 수 있습니다. devel.dockerfile :

FROM python:2.7
ENV PYTHONUNBUFFERED 1

RUN mkdir /run/service
ADD . /run/service
WORKDIR /run/service

RUN pip install -U pip
RUN pip install -I -e .[develop] --process-dependency-links

WORKDIR /run/service/src
ENTRYPOINT ["python", "manage.py"]
CMD ["runserver", "0.0.0.0:8000"]

요구 사항 만 추가하면 Docker 캐시를 활용하면서 구축 할 수 있습니다. 요구 사항 변경시 다시 작성하면됩니다.

짓다

Docker 작성은 특히 로컬에서 실행할 여러 서비스가있는 경우 편리합니다. docker-compose.yml :

version: '2'
services:
  web:
    build:
      context: .
      dockerfile: devel.dockerfile
    volumes:
      - "./src/{{ project_name }}:/run/service/src/{{ project_name }}"
      - "./media:/run/service/media"
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: mysql:5.6
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE={{ project_name }}
  nginx:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - "./nginx:/etc/nginx/conf.d"
      - "./media:/var/media"
    depends_on:
      - web

Nginx

Nginx를 처음부터 사용하는 것이 좋기 때문에 가능한 개발 환경을 가능한 환경에 가깝게해야합니다. 다음은 nginx 구성 파일의 예입니다.

server {
    listen   80;
    client_max_body_size 4G;
    keepalive_timeout 5;

    location /media/ {
        autoindex on;
        alias /var/media/;
    }

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Ssl on;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_pass http://web:8000/;
    }
}

용법

$ cd PROJECT_ROOT
$ docker-compose build web  # build the image - first-time and after requirements change
$ docker-compose up  # to run the project
$ docker-compose run --rm --service-ports --no-deps  # to run the project - and be able to use PDB
$ docker-compose run --rm --no-deps <management_command>  # to use other than runserver commands, like makemigrations
$ docker exec -ti web bash  # For accessing django container shell, using it you will be inside /run/service directory, where you can run ./manage shell, or other stuff
$ docker-compose start  # Starting docker containers
$ docker-compose stop  # Stopping docker containers


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow