(一)集成django、swagger、docker desktop之创建项目

📅 2026/7/4 3:28:06
(一)集成django、swagger、docker desktop之创建项目
​初始模板的相关文件都在 https://gitee.com/yaaakaaang/django_swagger_docker 的一个项目模板里可以拿来用。 下面我们来详细看看是怎么构建的。一、创建项目首先我们在pycharm中新建一个项目test然后打开终端输入django-admin startproject backendbackend就是我们的项目名。打开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 APIrest_framework.authtoken,# 生成和管理API令牌Tokenrest_framework_simplejwt,# 生成、验证和刷新JWT的功能rest_framework_simplejwt.token_blacklist,# 管理已签发的JWT令牌的黑名单corsheaders,# 添加cors应用]​在MIDDLEWARE中django.middleware.common.CommonMiddleware的上面添加一行MIDDLEWARE[...corsheaders.middleware.CorsMiddleware,# 设置跨域中间件django.middleware.common.CommonMiddleware,...]接着在下面添加# 配置允许的域CORS_ALLOW_ALL_ORIGINSTrue# 配置允许的头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.0NAME:test-mysql,HOST:test-mysql,PORT:3306,USER:root,PASSWORD:root,}}顺便把时区也修改了# 设置时区LANGUAGE_CODEzh-HansTIME_ZONEAsia/Shanghai三、安装需要的包打开pycharm终端输入pipinstalldrf-yasg pipinstallrest_framework_simplejwt pipinstalldjangorestframework-simplejwt pipinstalldjango-cors-headers pipinstallmysqlclient pipinstallcelery四、创建并注册应用好了接下来我们可以创建应用了。打开pycharm终端依次输入cdbackendmkdirapps\FirstApp python manage.py startapp FirstApp apps\FirstAppFirstApp就是我们的第一个应用名。修改backend\apps\FirstApp\apps.pynameapps.FirstApp然后把新创建的应用注册到settings.pyINSTALLED_APPS[apps.FirstApp,]五、写路由首先写主路由。在application\urls.py中把这段代码替换上去fromdjango.conf.urls.staticimportstaticfromdjango.urlsimportpath,include,re_pathfromdrf_yasgimportopenapifromdrf_yasg.viewsimportget_schema_viewfromrest_frameworkimportpermissionsfromapplicationimportsettings schema_viewget_schema_view(openapi.Info(titleSnippets API,default_versionv1,descriptionTest description,terms_of_servicehttps://www.google.com/policies/terms/,contactopenapi.Contact(emailcontactsnippets.local),licenseopenapi.License(nameBSD License),),publicTrue,permission_classes(permissions.AllowAny,),)urlpatterns([re_path(r^swagger(?Pformat\.json|\.yaml)$,schema_view.without_ui(cache_timeout0),nameschema-json,),path(,schema_view.with_ui(swagger,cache_timeout0),nameschema-swagger-ui,),path(rredoc/,schema_view.with_ui(redoc,cache_timeout0),nameschema-redoc,),re_path(r^api-auth/,include(rest_framework.urls,namespacerest_framework)),path(api/home/,include(apps.FirstApp.urls)),# 第一个应用]static(settings.MEDIA_URL,document_rootsettings.MEDIA_ROOT)# 配置media和static文件static(settings.STATIC_URL,document_rootsettings.STATIC_URL))如果像这样有红色下波浪线就右键backend鼠标移到最下面将目录标记为然后点击源代码根目录就行了。还不行就重启一下pycharm。接下来写分布式路由先在backend\apps\FirstApp中 新建文件urls.py把这段代码复制上去fromdjango.urlsimportpathfrom.viewsimportFirstAppView urlpatterns[path(firstAppView,FirstAppView.as_view(),namefirstAppView),# 第一个应用方法]然后在backend\apps\FirstApp\ views.py中fromrest_framework.viewsimportAPIViewclassFirstAppView(APIView): 第一个应用方法 defget(self,request):pass这样我们就写好了一个简单的视图。六、异步在settings.py同级目录下新建文件celery.pyimportloggingimportosfromceleryimportCeleryfromcelery.utils.logimportget_task_loggerfromapplicationimportsettings os.environ.setdefault(DJANGO_SETTINGS_MODULE,application.settings)appCelery(app_group,brokerredis://test-redis:6379/0,backendredis://test-redis:6379/1)# 获取 Celery 自带的日志记录器loggerget_task_logger(my_celery_logger)redis_passwordos.getenv(REDIS_PASSWORD,000000)app.config_from_object({broker_url:fredis://:{redis_password}test-redis:6379/0,result_backend:fredis://:{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_ROOTmediaMEDIA_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.txtasgiref3.5.2certifi2021.5.30chardet4.0.0coreapi2.3.3coreschema0.0.4Django3.2.19django-comment-migrate0.1.7django-cors-headers3.10.1django-filter22.1django-ranged-response0.2.0django-redis5.2.0django-restql0.15.3django-simple-captcha0.5.17django-tenants3.5.0django-timezone-field5.0djangorestframework3.14.0djangorestframework-simplejwt5.2.2packaging23.0drf-yasg1.21.5idna2.10inflection0.5.1itypes1.2.0Jinja23.1.2MarkupSafe2.0.1mysqlclient2.1.1Pillow9.4.0PyJWT2.6.0pyparsing2.4.7pyPEG22.15.2pypinyin0.48.0pytz2021.1requests2.28.0ruamel.yaml0.17.10ruamel.yaml.clib0.2.4six1.16.0smmap4.0.0sqlparse0.4.1typing-extensions3.10.0.0tzlocal2.1ua-parser0.10.0uritemplate3.0.1urllib31.26.15user-agents2.2.0whitenoise5.3.0openpyxl3.1.2channels3.0.5channels-redis3.4.1uvicorn0.21.1gunicorn20.1.0gevent22.10.2websockets10.4修改 nginx 配置在最外层backend同级目录下放入文件docker-compose.yml和文件夹web、docker_env。这些文件在 https://gitee.com/yaaakaaang/django_swagger_docker 中有。最终目录结构是这样打开命令提示符输入ipconfig找到 IPv4 地址 比如 10.1.13.92然后修改文件docker_env\nginx\my.confserver_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 地址​