Django第三方库:使用Cookiecutter-django生成项目,及结构和优点详解

Github地址:https://github.com/cookiecutter/cookiecutter-django.git

截止文章当前Cookiecutter-django在github上的stars有10.4k之多,Cookiecutter-django是一个用于快速创建Django项目的工具。它提供了一个模板,可以帮助开发者快速创建一个Django项目的基础结构,并且可以根据自己的需求进行定制。

使用Cookiecutter-django可以大大减少Django项目的开发时间,同时也可以提高项目的可维护性和可扩展性。下面我们就来详细介绍一下Cookiecutter-django工具的使用方法和优点。

总的来说,Cookiecutter-django是一个非常实用的工具,可以帮助开发者快速创建Django项目的基础结构,提高开发效率和代码质量。如果你还没有使用过Cookiecutter-django,不妨试一试,相信你会爱上它的。

Cookiecutter-django的优点

1.提高开发效率

使用Cookiecutter-django可以快速创建Django项目的基础结构,避免了繁琐的手动创建过程,从而提高了开发效率。

2.规范化项目结构

Cookiecutter-django提供的模板包含了Django项目的基础结构,包括项目目录结构、配置文件、模板文件等,可以帮助开发者规范化项目结构,使得项目更易于维护和扩展。

3.提高代码质量

Cookiecutter-django提供了一些最佳实践,例如使用Docker部署、使用Celery进行异步任务处理等,可以帮助开发者提高代码质量。

4.方便定制

Cookiecutter-django提供了许多选项,可以根据项目需求进行定制,例如选择数据库类型、使用哪些第三方库等,从而方便地创建符合项目需求的Django项目。

Cookiecutter-django最新特性

  1. 支持Django 4.1
  2. 适用于Python 3.11
  3. 以100%的启动测试覆盖率渲染Django项目
  4. Twitter Bootstrap v5
  5. 默认情况下是安全的。使用了SSL。
  6. 优化的开发和生产设置
  7. 通过django allauth注册
  8. 自带定制用户模型,随时可用
  9. Websockets的可选基本ASGI设置
  10. 使用Gulp或Webpack的可选自定义静态构建
  11. 通过Anymail发送电子邮件(默认情况下使用Mailgun,如果AWS是云提供商,则使用亚马逊SES,但可切换)
  12. 使用亚马逊S3、谷歌云存储、Azure存储或nginx的媒体存储
  13. Docker支持使用Docker compose进行开发和生产(使用Traefik和LetsEncrypt支持)
  14. 用于部署到Heroku的Procfile
  15. 部署到PythonAnywhere的说明
  16. 使用unittest或pytest运行测试
  17. 可自定义的PostgreSQL版本
  18. 与预提交的默认集成,用于在提交给代码审查之前识别简单问题

Cookiecutter-django的使用方法

1.安装Cookiecutter

Cookiecutter-django是基于Cookiecutter的,所以首先需要安装Cookiecutter。在命令行中输入以下命令即可安装:

pip install cookiecutter

安装完后检查版本

2.使用Cookiecutter-django创建项目

安装完Cookiecutter之后,在命令行中输入以下命令即可使用Cookiecutter-django创建Django项目:

cookiecutter https://github.com/cookiecutter/cookiecutter-django.git

然后按照提示输入项目的各项信息,例如项目名称、描述、作者、邮箱、版本、开源license、时区、数据库、邮件服务、构建工具等。完成输入后,Cookiecutter-django会根据这些信息自动生成一个Django项目的基础结构。

Cookiecutter-django常用的选项说明:

  1. project_name:项目名称,这个选项必填。
  2. project_slug:项目slug,用于生成项目目录和Python包名称,默认值是project_name.lower().replace(' ', '_')
  3. author_name:作者名称,默认值是你的用户名。
  4. email:作者邮箱,默认值是你的邮箱。
  5. description:项目描述。
  6. domain_name:域名,用于生成settings文件中的ALLOWED_HOSTS,默认值是example.com
  7. timezone:时区,默认值是UTC
  8. use_whitenoise:是否使用Whitenoise来管理静态文件,默认值是True
  9. use_celery:是否使用Celery来处理异步任务,默认值是False
  10. use_mailhog:是否使用MailHog来捕获邮件发送,默认值是False
  11. use_sentry:是否使用Sentry来捕获错误,默认值是False
  12. use_pycharm:是否使用PyCharm来开发项目,默认值是False
  13. use_docker:是否使用Docker来部署项目,默认值是False
  14. use_heroku:是否使用Heroku来部署项目,默认值是False
  15. ci_tool:选择一个集成工具,默认值是None

Cookiecutter-django与django-admin生成的目录结构对比

使用django-admin创建一个django项目,看下Django默认项目目录:

django-admin startproject steverocket_pro

django-admin创建的目录结构

利用cookiecutter-django生成的项目目录结构如下所示。把原pro2目录下的项目设置文件比如settings.py, urls.py和wsgi.py都移到了一个专门的管理设置的config文件夹,这样原pro2目录变成用于存放各个app所属代码,逻辑变得更清晰。

其中,config目录包含了Django的配置文件,分为base、local、test和production四个文件;requirements目录包含了不同环境下的依赖包;static目录包含了静态文件;templates目录包含了Django模板文件;manage.py是Django的命令行工具;README.md包含了项目的说明文档;

requirements.txt包含了所有依赖包的列表;runtime.txt指定了项目在Heroku上运行的Python版本;Dockerfile和docker-compose.yml是用于Docker部署的文件;Procfile指定了Heroku上运行项目的命令;.dockerignore和.gitignore是用于忽略不需要的文件;.env.template和.env是用于管理环境变量的文件。

cookiecutter-django借助于django-environ这个第三方库区分不同环境,并把设置文件里的敏感信息放在环境变量里集中管理,而不是代码中,这是非常聪明的做法。一来更安全,二来后续如果需要修改项目配置,只需要修改环境变量即可,不需要修改一行代码。如下所示:

from .base import env

# GENERAL
# ------------------------------------------------------------------------------
# https://docs.djangoproject.com/en/dev/ref/settings/#secret-key
SECRET_KEY = env("DJANGO_SECRET_KEY")
# https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS", default=["127.0.0.1"])

# DATABASES
# ------------------------------------------------------------------------------
DATABASES["default"]["CONN_MAX_AGE"] = env.int("CONN_MAX_AGE", default=60)  # noqa: F405

除此以外,cookiecutter-django将设置文件里的INSTALLED APP分成了3类, Django自带APP, 第三方APP和用户自己开发的APP,便于维护。

# APPS
# ------------------------------------------------------------------------------
DJANGO_APPS = [
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.sites",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    # "django.contrib.humanize", # Handy template tags
    "django.contrib.admin",
    "django.forms",
]
THIRD_PARTY_APPS = [
    "crispy_forms",
    "crispy_bootstrap5",
    "allauth",
    "allauth.account",
    "allauth.socialaccount",
    "django_celery_beat",
    "rest_framework",
    "rest_framework.authtoken",
    "corsheaders",
    "drf_spectacular",
]

LOCAL_APPS = [
    "pro02.users",
    # Your stuff: custom apps go here
]
# https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS

另外依赖文件也由一个requirements.txt也变成了一个文件夹,分别存放基础依赖文件base.txt,以及开发和生产环境下分别使用的local.txt和production.txt。

每个requirements.txt也分成了python, django和DRF三类。

pytz==2023.3  # https://github.com/stub42/pytz
python-slugify==8.0.1  # https://github.com/un33k/python-slugify
Pillow==9.5.0  # https://github.com/python-pillow/Pillow
rcssmin==1.1.1  # https://github.com/ndparker/rcssmin
argon2-cffi==21.3.0  # https://github.com/hynek/argon2_cffi
whitenoise==6.4.0  # https://github.com/evansd/whitenoise
redis==4.5.4  # https://github.com/redis/redis-py
hiredis==2.2.2  # https://github.com/redis/hiredis-py
celery==5.2.7  # pyup: < 6.0  # https://github.com/celery/celery
django-celery-beat==2.5.0  # https://github.com/celery/django-celery-beat
flower==1.2.0  # https://github.com/mher/flower
uvicorn[standard]==0.21.1  # https://github.com/encode/uvicorn

# Django
# ------------------------------------------------------------------------------
django==4.1.8  # pyup: < 4.2  # https://www.djangoproject.com/
django-environ==0.10.0  # https://github.com/joke2k/django-environ
django-model-utils==4.3.1  # https://github.com/jazzband/django-model-utils
django-allauth==0.54.0  # https://github.com/pennersr/django-allauth
django-crispy-forms==2.0  # https://github.com/django-crispy-forms/django-crispy-forms
crispy-bootstrap5==0.7  # https://github.com/django-crispy-forms/crispy-bootstrap5
django-compressor==4.3.1  # https://github.com/django-compressor/django-compressor
django-redis==5.2.0  # https://github.com/jazzband/django-redis
# Django REST Framework
djangorestframework==3.14.0  # https://github.com/encode/django-rest-framework
django-cors-headers==3.14.0  # https://github.com/adamchainz/django-cors-headers
# DRF-spectacular for api documentation
drf-spectacular==0.26.2  # https://github.com/tfranzel/drf-spectacular

  # GitHub - tfranzel/drf-spectacular: Sane and flexible OpenAPI 3 schema generation for Django REST framework.

参考文档:

Welcome to Cookiecutter Django’s documentation! — Cookiecutter Django 2023.17.4 documentation (cookiecutter-django.readthedocs.io)


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值