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最新特性
- 支持Django 4.1
- 适用于Python 3.11
- 以100%的启动测试覆盖率渲染Django项目
- Twitter Bootstrap v5
- 默认情况下是安全的。使用了SSL。
- 优化的开发和生产设置
- 通过django allauth注册
- 自带定制用户模型,随时可用
- Websockets的可选基本ASGI设置
- 使用Gulp或Webpack的可选自定义静态构建
- 通过Anymail发送电子邮件(默认情况下使用Mailgun,如果AWS是云提供商,则使用亚马逊SES,但可切换)
- 使用亚马逊S3、谷歌云存储、Azure存储或nginx的媒体存储
- Docker支持使用Docker compose进行开发和生产(使用Traefik和LetsEncrypt支持)
- 用于部署到Heroku的Procfile
- 部署到PythonAnywhere的说明
- 使用unittest或pytest运行测试
- 可自定义的PostgreSQL版本
- 与预提交的默认集成,用于在提交给代码审查之前识别简单问题
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常用的选项说明:
- project_name:项目名称,这个选项必填。
- project_slug:项目slug,用于生成项目目录和Python包名称,默认值是project_name.lower().replace(' ', '_')。
- author_name:作者名称,默认值是你的用户名。
- email:作者邮箱,默认值是你的邮箱。
- description:项目描述。
- domain_name:域名,用于生成settings文件中的ALLOWED_HOSTS,默认值是example.com。
- timezone:时区,默认值是UTC。
- use_whitenoise:是否使用Whitenoise来管理静态文件,默认值是True。
- use_celery:是否使用Celery来处理异步任务,默认值是False。
- use_mailhog:是否使用MailHog来捕获邮件发送,默认值是False。
- use_sentry:是否使用Sentry来捕获错误,默认值是False。
- use_pycharm:是否使用PyCharm来开发项目,默认值是False。
- use_docker:是否使用Docker来部署项目,默认值是False。
- use_heroku:是否使用Heroku来部署项目,默认值是False。
- 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
参考文档:
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。