내 Cookiecutter Django 설정

내 Cookiecutter Django 설정

2022-10-18 last update

5 minutes reading django sqlite
직장에서 만드는 Django 프로젝트에 대한 몇 가지 특정 요구 사항이 있으므로 다음은 일을 진행하는 데 도움이 되는 cookiecutter-django을 사용하는 방법입니다.

쿠키커터 장고란?



docs에서 : "Cookiecutter Django는 프로덕션 준비 Django 프로젝트를 시작하기 위한 프로젝트 템플릿입니다."

내 요구 사항


  • 로컬 개발의 SQLite
  • 프로덕션용 도커
  • 사이트 미리보기용 Heroku
  • 프로덕션의 정적 파일에 대한 사용자 지정 클라우드 공급자

  • 설정


    cookiecutter를 설치하고 Cookiecutter Django repository에 대해 실행하십시오.

    pip install "cookiecutter>=1.7.0"
    cookiecutter https://github.com/cookiecutter/cookiecutter-django
    


    자신의 이름, 이메일 등을 추가하십시오. 개인적으로 저는 이메일에 SendGrid을 사용하는 것을 좋아합니다. 그 이유는 훌륭한 무료 계층과 사용 용이성 때문입니다. 또한 더 큰 클라이언트를 위해 더 큰 워크로드로 쉽게 확장할 수 있습니다. Whitenoise은 정적 파일 제공에 사용하는 도구입니다.

    project_name [My Awesome Project]: Project Name
    project_slug [project_name]: 
    description [Behold My Awesome Project!]:
    author_name [Daniel Roy Greenfeld]: David Buckley
    domain_name [example.com]: example.com
    email [[email protected]]: [email protected]
    version [0.1.0]: 
    Select open_source_license:
    1 - MIT
    2 - BSD
    3 - GPLv3
    4 - Apache Software License 2.0
    5 - Not open source
    Choose from 1, 2, 3, 4, 5 [1]: 5
    timezone [UTC]: 
    windows [n]: 
    use_pycharm [n]: 
    use_docker [n]: y
    Select postgresql_version:
    1 - 14
    2 - 13
    3 - 12
    4 - 11
    5 - 10
    Choose from 1, 2, 3, 4, 5 [1]: 1
    Select cloud_provider:
    1 - AWS
    2 - GCP
    3 - None
    Choose from 1, 2, 3 [1]: 3
    Select mail_service:
    1 - Mailgun
    2 - Amazon SES
    3 - Mailjet
    4 - Mandrill
    5 - Postmark
    6 - Sendgrid
    7 - SendinBlue
    8 - SparkPost
    9 - Other SMTP
    Choose from 1, 2, 3, 4, 5, 6, 7, 8, 9 [1]: 6
    use_async [n]: y
    use_drf [n]: y
    Select frontend_pipeline:
    1 - None
    2 - Django Compressor
    3 - Gulp
    Choose from 1, 2, 3 [1]: 2
    use_celery [n]: 
    use_mailhog [n]: 
    use_sentry [n]: 
    use_whitenoise [n]: y
    use_heroku [n]: y
    Select ci_tool:
    1 - None
    2 - Travis
    3 - Gitlab
    4 - Github
    Choose from 1, 2, 3, 4 [1]: 
    keep_local_envs_in_vcs [y]: n
    debug [n]: y
    


    SQLite 설정



    내 로컬 환경에서는 PostgreSQL을 사용하지 않으므로 요구 사항을 설치하기 전에 몇 가지 사항을 변경해야 합니다.
    requirements/local.txt 에서 psycopg2를 종속성(PostgreSQL 패키지)으로 제거합니다.

    ...
    # psycopg2==2.9.3  # https://github.com/psycopg/psycopg2
    ...
    


    그런 다음 config/settings/local.py 에서 DATABASES = {"default": env.db("DATABASE_URL")} 줄을 다음으로 바꿉니다.

    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.sqlite3",
            "NAME": ROOT_DIR / "db.sqlite3",
        }
    }
    


    이 동일한 로컬 설정 파일에 있는 동안(현재 로컬 환경에서 Docker를 사용하지 않기 때문에) 행if env("USE_DOCKER") == "yes":을 다음으로 바꾸십시오.

    if env("USE_DOCKER", default="no") == "yes":
    


    마지막으로 SQLite 데이터베이스에서 작동하지 않는 일부 논리가 있는 마이그레이션이 있으므로 이를 추가했습니다. 문제의 파일은 project_name/contrib/sites/migrations/0003_set_site_domain_and_name.py 입니다.

    def _update_or_create_site_with_sequence(site_model, connection, domain, name):
        ...
        if (
            created
            and not "ENGINE" in settings.DATABASES["default"]
            or settings.DATABASES["default"]["ENGINE"] != "django.db.backends.sqlite3"
        ): 
            # We provided the ID explicitly when creating the Site entry, therefore the DB
            ...
    


    이 마이그레이션에서 생성된 사이트는 일반적으로 로컬에 있는 유일한 사이트 레코드이므로 이 마이그레이션은 어쨌든 내가 하고 있는 작업에 실제로 영향을 미치지 않습니다. 나중에 필요한 경우 SQL을 사용하여 데이터베이스를 수동으로 업데이트할 수 있습니다. 이 작업을 수행하는 더 좋은 방법이 있으면 의견에 알려주십시오. 그러나 이것은 저에게 효과적이었습니다.

    요구 사항 설치 및 데이터베이스 마이그레이션



    이제 가상 환경을 만들고, 로컬 요구 사항을 설치하고, 데이터베이스를 마이그레이션할 준비가 되었습니다.

    python -m venv venv
    source venv/bin/activate # venv/Scripts/activate for Windows
    pip install -r requirements/local.txt
    python manage.py migrate
    

    *.sqlite3.gitignore 파일에 추가해야 합니다(아직 파일에 없고 로컬로 이동할 준비가 된 경우!