(一)集成django、swagger、docker desktop之创建项目
2026/7/5 6:30:27 网站建设 项目流程


初始模板的相关文件都在 https://gitee.com/yaaakaaang/django_swagger_docker 的一个项目模板里,可以拿来用。 下面我们来详细看看是怎么构建的。

一、创建项目

首先我们在pycharm中新建一个项目test

然后打开终端输入

django-admin startproject backend

backend就是我们的项目名。

打开manage.py点击右下角配置 python 解释器,然后选择一个解释器就好了。

为防止混淆 把backend\backend的文件名改为backend\application


然后在重构预览里 直接点重构。如果弹出一个框,就再点击继续,没有就不管。

二、配置settings.py


打开backend\application\settings.py
ALLOWED_HOSTS = []改为ALLOWED_HOSTS = locals().get("ALLOWED_HOSTS", ["*"])

INSTALLED_APPS = [...]的下面添加

INSTALLED_APPS+=['drf_yasg',# 基于Swagger规范,生成API文档'rest_framework',# 构建Web API'rest_framework.authtoken',# 生成和管理API令牌(Token)'rest_framework_simplejwt',# 生成、验证和刷新JWT的功能'rest_framework_simplejwt.token_blacklist',# 管理已签发的JWT令牌的黑名单'corsheaders',# 添加cors应用]

​在MIDDLEWAREdjango.middleware.common.CommonMiddleware的上面添加一行

MIDDLEWARE=[...'corsheaders.middleware.CorsMiddleware',# 设置跨域中间件'django.middleware.common.CommonMiddleware',...]

接着在下面添加

# 配置允许的域CORS_ALLOW_ALL_ORIGINS=True# 配置允许的头CORS_ALLOW_HEADERS=('accept-encoding','authorization','content-type','dnt','origin','user-agent','x-csrftoken','x-requested-with',)# 配置允许的方法CORS_ALLOW_METHODS=('DELETE','GET','OPTIONS','PATCH','POST','PUT',)

然后我们来修改数据库配置,把

DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':BASE_DIR/'db.sqlite3',}}

修改为

# 配置MySQL数据库DATABASES={"default":{'ENGINE':'django.db.backends.mysql',# mysql数据库版本建议:8.0'NAME':'test-mysql','HOST':'test-mysql','PORT':'3306','USER':'root','PASSWORD':'root',}}

顺便把时区也修改了

# 设置时区LANGUAGE_CODE='zh-Hans'TIME_ZONE='Asia/Shanghai'

三、安装需要的包

打开pycharm终端,输入

pipinstalldrf-yasg pipinstallrest_framework_simplejwt pipinstalldjangorestframework-simplejwt pipinstalldjango-cors-headers pipinstallmysqlclient pipinstallcelery

四、创建并注册应用

好了,接下来我们可以创建应用了。

打开pycharm终端,依次输入

cdbackendmkdirapps\FirstApp python manage.py startapp FirstApp apps\FirstApp

FirstApp就是我们的第一个应用名。

修改backend\apps\FirstApp\apps.py

name='apps.FirstApp'

然后把新创建的应用注册到settings.py

INSTALLED_APPS+=['apps.FirstApp',]

五、写路由

首先写主路由。
application\urls.py中把这段代码替换上去

fromdjango.conf.urls.staticimportstaticfromdjango.urlsimportpath,include,re_pathfromdrf_yasgimportopenapifromdrf_yasg.viewsimportget_schema_viewfromrest_frameworkimportpermissionsfromapplicationimportsettings schema_view=get_schema_view(openapi.Info(title="Snippets API",default_version="v1",description="Test description",terms_of_service="https://www.google.com/policies/terms/",contact=openapi.Contact(email="contact@snippets.local"),license=openapi.License(name="BSD License"),),public=True,permission_classes=(permissions.AllowAny,),)urlpatterns=([re_path(r"^swagger(?P<format>\.json|\.yaml)$",schema_view.without_ui(cache_timeout=0),name="schema-json",),path("",schema_view.with_ui("swagger",cache_timeout=0),name="schema-swagger-ui",),path(r"redoc/",schema_view.with_ui("redoc",cache_timeout=0),name="schema-redoc",),re_path(r"^api-auth/",include("rest_framework.urls",namespace="rest_framework")),path('api/home/',include("apps.FirstApp.urls")),# 第一个应用]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)# 配置media和static文件+static(settings.STATIC_URL,document_root=settings.STATIC_URL))

如果像这样有红色下波浪线

就右键backend,鼠标移到最下面将目录标记为,然后点击源代码根目录就行了。还不行就重启一下pycharm。

接下来写分布式路由

先在backend\apps\FirstApp中 新建文件urls.py,把这段代码复制上去

fromdjango.urlsimportpathfrom.viewsimportFirstAppView urlpatterns=[path('firstAppView',FirstAppView.as_view(),name='firstAppView'),# 第一个应用方法]

然后在backend\apps\FirstApp\ views.py

fromrest_framework.viewsimportAPIViewclassFirstAppView(APIView):""" 第一个应用方法 """defget(self,request):pass

这样我们就写好了一个简单的视图。

六、异步

settings.py同级目录下新建文件celery.py

importloggingimportosfromceleryimportCeleryfromcelery.utils.logimportget_task_loggerfromapplicationimportsettings os.environ.setdefault('DJANGO_SETTINGS_MODULE','application.settings')app=Celery('app_group',broker='redis://test-redis:6379/0',backend='redis://test-redis:6379/1')# 获取 Celery 自带的日志记录器logger=get_task_logger('my_celery_logger')redis_password=os.getenv('REDIS_PASSWORD','000000')app.config_from_object({'broker_url':f'redis://:{redis_password}@test-redis:6379/0','result_backend':f'redis://:{redis_password}@test-redis:6379/1','timezone':'Asia/Shanghai',})# 自动发现所有注册了任务的 Django appapp.autodiscover_tasks(settings.INSTALLED_APPS)

七、静态文件

settings.py最下面 添加

importos# 设置django的静态文件目录STATICFILES_DIRS=[os.path.join(BASE_DIR,"static"),os.path.join(BASE_DIR,"media"),]MEDIA_ROOT="media"MEDIA_URL="/media/"

然后把 文件夹static放在 和manage.py的同目录下,
文件夹static在 https://gitee.com/yaaakaaang/django_swagger_docker 中有。

八、运行脚本

manage.py同级目录下新建空文件__init__.py
在 https://gitee.com/yaaakaaang/django_swagger_docker 中中有 找到文件docker_start.sh
把文件docker_start.sh复制到相同位置。打开它看右下角,如果是CRLF,则点击CRLF改为LF,不是就不用改。
在相同位置新建requirements.txt

asgiref==3.5.2certifi==2021.5.30chardet==4.0.0coreapi==2.3.3coreschema==0.0.4Django==3.2.19django-comment-migrate==0.1.7django-cors-headers==3.10.1django-filter==22.1django-ranged-response==0.2.0django-redis==5.2.0django-restql==0.15.3django-simple-captcha==0.5.17django-tenants==3.5.0django-timezone-field==5.0djangorestframework==3.14.0djangorestframework-simplejwt==5.2.2packaging==23.0drf-yasg==1.21.5idna==2.10inflection==0.5.1itypes==1.2.0Jinja2==3.1.2MarkupSafe==2.0.1mysqlclient==2.1.1Pillow==9.4.0PyJWT==2.6.0pyparsing==2.4.7pyPEG2==2.15.2pypinyin==0.48.0pytz==2021.1requests==2.28.0ruamel.yaml==0.17.10ruamel.yaml.clib==0.2.4six==1.16.0smmap==4.0.0sqlparse==0.4.1typing-extensions==3.10.0.0tzlocal==2.1ua-parser==0.10.0uritemplate==3.0.1urllib3==1.26.15user-agents==2.2.0whitenoise==5.3.0openpyxl==3.1.2channels==3.0.5channels-redis==3.4.1uvicorn==0.21.1gunicorn==20.1.0gevent==22.10.2websockets==10.4

修改 nginx 配置

在最外层backend同级目录下放入文件docker-compose.yml和文件夹webdocker_env

这些文件在 https://gitee.com/yaaakaaang/django_swagger_docker 中有。

最终目录结构是这样


打开命令提示符,输入ipconfig,找到 IPv4 地址 ,比如 10.1.13.92
然后修改文件docker_env\nginx\my.conf

server_name10.1.13.92;...location/static{alias/backend/static/;proxy_pass http://10.1.13.92:8080/swagger/static/;}

10.1.13.92换成你的IPv4 地址。

最后在pycharm 终端运行

docker-composeup

就可以访问http://10.1.13.92:8080/swagger/(这里同样把10.1.13.92 换成你的IPv4 地址)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询