# django32_celery **Repository Path**: hejunwang/django32_celery ## Basic Information - **Project Name**: django32_celery - **Description**: django 32 搭配celery 定时任务 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-09-28 - **Last Updated**: 2025-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # git 保存 git branch 分支名称 // 创建分支 git branch -v // 查看分支 git checkout 分支名 // 切换分支 git merge 分支名 // 把指定的分支合并到当前分支上SDF 回滚上一次 使用 git reset --hard HEAD^ 简易的命令行入门教程: Git 全局设置: git config --global user.name "hejunwang" git config --global user.email "hejunwang01@126.com" 创建 git 仓库: mkdir django_pro cd django_pro git init touch README.md git add README.md git commit -m "first commit" git remote add origin https://gitee.com/hejunwang/django32_vue3.git git push -u origin "master" 已有仓库? cd existing_git_repo git remote add origin https://gitee.com/hejunwang/django32_vue3.git git push -u origin "master" 收到 # Django 环境 和安装包 导出 pip freeze > requirements.txt requirements.txt # django项目创建 ,运行 ## 创建项目 django-admin startproject mysite ## 创建app python manage.py startapp celery-apps ## 运 行 python manage.py runserver ## 指定端口 python manage.py runserver 0 :5000 指定端口启动 ## https请求 python manage.py runsslserver 0.0.0.0:5000 ## 创建应用apps下的user 方式一 python manage.py startapp xxx # 在apps下多一个user 应用 ## 目录说明 目录说明: HelloWorld: 项目的容器。 manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。 HelloWorld/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。 HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。 HelloWorld/settings.py: 该 Django 项目的设置/配置。 HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。 HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。 ## django收集静态文件命令 python manage.py collectstatic # 合并前端文件到fronted中,务必要按照里面存放的位置进行摆放,不能改变 ,否则会出现找不到的页面的情况 再次执行收集静态文件指令 python manage.py collectstatic ,django文件使用的是static中的文件 ## 迁移数据库 修改模型后,你需要连续运行 python manage.py makemigrations python manage.py migrate python manage.py showmigrations 这两个命令,前者检查模型有无变化, 后者将变化迁移至数据表。如果一切顺利,Django会在数据库(默认sqlite)中生成或变更由appname_modelname组成的数据表, 本例两张数据表分别为bookstore_publisher和bookstore_book ## 创建超级用户 创建超级用户superuser python manage.py createsuperuser root 12345678hjw123 admin 登陆的账户就使用这个 # vue3融合到django中出现问题 ## django debug=False之后 ,静态文件丢失 ,处理方法 当我们在开发django应用时如果设置了 DEBUG = True,那么django便会自动帮我们对静态文件进行路由;但是当我们设置DEBUG = False后,这一功能便没有了, 此时静态文件就会出现加载失败的情况,想要让静态文件正常显示,我们就需要配置静态文件服务了 https://blog.csdn.net/Jason_WangYing/article/details/121981306 ## 删除 app 1 ./manage.py migrate your_app_name zero 2 删除models.py中的数据模型 再次确认其他App中没有引用此App的文件 删除整个App文件夹 在settings.py的Installed Apps中移除该app。 ## 解决Django报错:SQLITE 3.8.3 OR LATER IS REQUIRED django在linux服务器执行python3 manage.py migrate,会产生了如下的错误输出: django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17). django发现Python使用的sqlite版本过低,不满足要求。因此,我尝试升级自带的sqlite。使用sqlite3 –version查看了CentOS的Sqlite为3.7 网上有很多的教程,但是感觉都好繁琐 最简单的方法: django安装在哪些路径下,在我的系统上,需要找到/…/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py这个脚本,django判断当前使用的sqlite版本的代码就在这里,找到以下代码块,注释掉那一行代码并更改: def check_sqlite_version():     # if Database.sqlite_version_info < (3, 8, 3):     if Database.sqlite_version_info < (3, 6, 3):         raise ImproperlyConfigured('SQLite 3.8.3 or later is required(found %s).' % Database.sqlite_version) check_sqlite_version()123 再次尝试django-admin startproject webApps便会执行成功。test12 ## 关于django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3错误的处理办法 最近,很多朋友都把自己的操作系统、Python、Django都升级到最新版本了,使用默认SQLite数据,运行时会报出类似django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3的错误提示。这主要是操作系统默认SQLite数据库版本太低造成的。这里给大家提供三种解决办法,希望能帮到大家。 第一种: 升级系统里的SQLite版本。方法:https://www.django.cn/forum/forum-487.html 注意,如需要最新版本的话,请从官网下载最新的软件包。 下载址:https://www.sqlite.org/download.html 第二种:找到报错文件,如/usr/local/python3/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py 打开它,找到 def check_sqlite_version(): if Database.sqlite_version_info < (3, 9, 0): 把里面小括号里的 SQLite版本(3,9,0)修改成你当前系统里版本就好。 第三种: 使用第三方包运行SQLite。把sqlite3 更换为pysqlite3 和 pysqlite3-binary方法: 1、安装pysqlite3和pysqlite3-binary pip install pysqlite3 pip install pysqlite3-binary 2、打开文件/usr/local/python3/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py,找到 from sqlite3 import dbapi2 as Database 注释它,添加代码 #from sqlite3 import dbapi2 as Database #注释它 from pysqlite3 import dbapi2 as Database #新加这段代码 三种,总有一种适合你 ## vite vue3 和django 融合过程中出现的问题 在vite.config.js中设置 静态 文件的存储路径 django的setting中设置templates的地址 , 记得index 首页文件必须放在templates中,否则提示找不到index首页文件 参考 : https://blog.csdn.net/qq_42517220/article/details/105725506 步骤1 : 首先编译vue 文件 npm run build 步骤2 : vue项目生成一个dist文件 ,然后按照上面提示的规则 ,存放到 django项目 frontend文件 ,static 静态文件全部复制过来 和 temp文存放编译好的index文件 ,favicon.ico文件也更新 存放到frontend文件下 ### because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled. 1. 修改index文件的中的link 文件的路径 2. python manage.py collectstatic 重新覆盖下static文件 ,否则还是会报错的 # django操作 ## django 日志管理 Sentry为多种语言以及各种框架(包括Django)提供了SDK。只需几行配置,sentry就会监控你的程序运行,自动收集错误和异常以及上下文数据, 发送到sentry的服务器上,开发者可以通过sentry的web端实时查看错误和异常。 ## django rest_framework 实现用户登录认证 https://blog.51cto.com/u_7174760/4033387 https://m.yisu.com/zixun/52089.html 使用的simplejwt的包 ,参考文档 https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html REST_FRAMEWORK 提供的权限 AllowAny 允许所有用户 如果未指明,则采用如下默认配置 IsAuthenticated 仅通过认证的用户 IsAdminUser 仅管理员用户 IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取 # django 前后端分离 存在的问题 ,如何处理 .安装django-cors-headers pip install django-cors-headers 配置settings.py文件 INSTALLED_APPS = [ ... 'corsheaders', ... ] MIDDLEWARE_CLASSES = ( ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', # 注意顺序 ... ) #跨域增加忽略 CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_METHODS = ( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) CORS_ALLOW_HEADERS = ( 'XMLHttpRequest', 'X_FILENAME', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', ) ## 缓存 暂时存在本地 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'unix:/tmp/memcached.sock', } } ## 使用基于类的视图APIView, GenericAPIView和视图集(ViewSet) DRF推荐使用基于类的视图(CBV)来开发API, 并提供了4种开发CBV开发模式。 1、使用基础的APIView类 2、使用Mixins类和GenericAPI类混配 3、使用通用视图generics.*类, 比如generics.ListCreateAPIView , 通用类更好一些 ,需要setting中设置 The DEFAULT_PAGINATION_CLASS setting should be a string not a tuple/list REST_FRAMEWORK = { ... 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', ... } ,否则会会出现 'list' object is not callable 的情况 4、使用视图集ViewSet和ModelViewSet 基础的API类:可读性最高、代码最多、灵活性最高。当你需要对的API行为进行个性化定制时,建议使用这种方式。 通用generics类:可读性好、代码适中、灵活性较高。当你需要对一个模型进行标准的增删查改全部或部分操作时建议使用这种方式。 使用视图集viewset: 可读性较低、代码最少、灵活性最低。当你需要对一个模型进行标准的增删查改的全部操作且不需定制API行为时建议使用这种方式。 ## 给视图添加权限 REST framework 包含许多默认权限类,我们可以用来限制谁可以访问给定的视图。在这种情况下,我们需要的是 IsAuthenticatedOrReadOnly 类, 它将确保经过身份验证的请求获得读写访问权限,未经身份验证的请求将获得只读读的权限 ## 手把手教你使用Django SimpleUI打造美丽后台 1.pip install django-simpleui 2.修改settings.py, 将simpleui加入到INSTALLED_APPS里去,放在第一行,也就是django自带admin的前面。 3. 注意:如果你在生成环境中使用SimpleUI,还需要使用python manage.py collectstatic命令收集静态文件,否则样式无法正常显示。 ## 自定义序列化器(serializers) Django提供了Form类和ModelForm类两种方式自定义表单一样,REST framework提供了Serializer类和ModelSerializer类 两种方式供你自定义序列化器。前者需手动指定需要序列化和反序列化的字段,后者根据模型(model)生成需要序列化和反序列化的字段,可以使代码更简洁 序列化器定义了需要对一个模型实例的哪些字段进行序列化/反序列化, 并可对客户端发送过来的数据进行验证和存储。 ## JSON Web Token(JWT)是一种更新的使用token进行身份认证的标准。 JWT身份验证不需要使用数据库来验证令牌, 而且可以轻松设置token失效期或刷新token, 是API开发中当前最流行的跨域认证解决方案 介绍JWT认证的工作原理以及如何通过djangorestframework-simplejwt 这个第三方包轻松实现JWT认证。 https://zhuanlan.zhihu.com/p/390059725 ### django-redis 中文文档 https://django-redis-chs.readthedocs.io/zh_CN/latest/# ### django-swagger 是一个规范的和完整的框架 ,用于生产,描述,调用和可视化restful风格的web ### django Django同时支持http/https 参考文档 https://zhuanlan.zhihu.com/p/385440741 ### 项目批量启动 在根目录下有 start.sh 执行就可以部署 uwsgi ,worker ,beat定时任务, flower任务执行结果 ### 项目自动 使用 uwsgi 启动 uwsgi --ini uwsgi.ini ### celery 任务执行 运行的位置 (django_py38_vue3_env) [root@VM-1-34-centos django32_celery]# celery -A django32_celery worker -l info 启动 celery -A 项目名(django32_celery) worker -l info 后台启动 : nohup celery -A django32_celery worker -l info & ### celery 定时任务 celery -A 项目名(django32_celery) beat -l debug 但是首先要设置好要执行的定时任务 nohup celery -A django32_celery beat -l info & ### flower 查询定时任务执行的情况 nohup celery -A django32_celery.celery flower --loglevel=info & celery -A django32_celery.celery flower --loglevel=info 地址 :http://0.0.0.0:5555 ### 前端vue https://www.runoob.com/vue3/vue3-install.html ## django 中model修改 解决办法 在已有数据的表中新增字段时,会弹出下面的步骤让你来操作 Tracking file by folder pattern: migrations It is impossible to add a non-nullable field 'Publisher' to book without specifying a default. This is because the database needs something to populate existing rows. Please select a fix: 1) Provide a one-off default now (will be set on all existing rows with a null value for this column) #这是现在就输入一个默认值 2) Quit and manually define a default value in models.py. #这是退出后自己输入 Select an option: 解决方法1: 在输入框中选择 1 会弹出下面的提示 Please enter the default value as valid Python. The datetime and django.utils.timezone modules are available, so it is possible to provide e.g. timezone.now as a value. Type 'exit' to exit this prompt 然后输入默认的值:"1" 这里的值要记得加引号 解决方法2:在models.py文件中 将新增的字段添加默认值 例子:addr =models.CharField(max_length,default="默认值") ### migrate 之后 ,数据库中没有新生成文件 migrations机制有两个指令,第一个是makemigrations,第二个是migrate,生成migrations代码的makemigrations指令是用models里面的model和当前的migrations代码里面的model做对比,如果有新的修改,就生成新的migrations代码。 migrate指令是用migrations目录中代码文件和django数据库djaong_migrations表中的代码文件做对比,如果表中没有,那就对这些没有的文件按顺序及依赖关系做migrate apply,然后再把代码文件名加进migrations表中。 ### 清除迁移历史记录 python3 manage.py migrate --fake 清除迁移历史记录 python3 manage.py migrate --fake-initial 在数据库中生成新的0001_initial记录 ### DRF drf最重要的2个功能:做序列化和反序列化操作。 drf序列化:把查数据库得到是queryset,方便快捷地转化为json等,返回给前端。 drf反序列化:把前端传递过来的数据,方便快捷地转化为queryset,方便存入数据库。 目前市面上主流接口规范2种:restful、RPC。 restful:资源状态转换(表征性状态转移)。基于http协议(说明:http协议也是基于tcp协议), 更适合做外部接口,特别适合前后端分离模式中。 ### 四种常见的 POST 提交数据方式 其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式 ,规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样,协议规定 POST 提交的数据必须放在消息主体(entity-body)中 application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据, 首先,Content-Type 被指定为 application/x-www-form-urlencoded; 其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持 multipart/form-data 这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值 application/json application/json 这个 Content-Type 作为响应头大家肯定不陌生,用来告诉服务端消息主体是序列化后的 JSON 字符串 text/xml 我的博客之前提到过 XML-RPC(XML Remote Procedure Call),它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范 ### pytest 参数 1.pytest.mark.parametrize('参数名',list)可以实现测试用例参数化 -第一个参数是字符串,多个参数中间用逗号隔开 -第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应 2.pytest.mark.skip(设置跳过测试用例的装饰器) 3.pytest.mark.xfail(标记测试用例”预期失败“的装饰器) 4.pytest.mark.自定义名称 -自定义marker:创建pytest的配置文件pytest.ini,然后在里面定义标记 5.pytest.fixture() -此方法可以完成测试之前的初始化 -可以返回数据给测试函数 参数scope="module" function:每个test都运行,默认是function的scope class:每个class的所有test只运行一次 module:每个module的所有test只运行一次 session:每个session只运行一次 ———————————————— 一个。py 下面有多个testcase ,不能有多个不同的参数,对应不同的case ,否则是不能执行的 ### fixture 文档参考 https://blog.csdn.net/qq_43911915/article/details/124717575 https://www.cnblogs.com/a-wyw/p/16199397.html 用于控制Fixture的作用范围 作用类似于Pytest的setup/teardown 默认取值为function(函数级别),控制范围的排序为:session > module > class > function function:函数级 每一个函数或方法都会调用 ;class:函数级 模块级 每一个.py文件调用一次;module:模块级 每一个.py文件调用一次;session:会话级 每次会话只需要运行一次,会话内所有方法及类,模块都共享这个方法 ### 关于接口数据串联的问题 把接口中的请求返回的数据 ,保存到yaml文件中,然后在执行下一个接口测试的过程中,查询Parma ,替换掉 引用的参数,再次传给将要执行的接口 使用autouse 参数 指定fixture的参数 autouse=True 这样每个测试用例函数 会自动调用fixtrue(这里其实不准确,因为还涉及到fixture的范围scope,autouse=True时 在设置的范围内都会被调用) setup_class 比conftest 要先执行 ### celery 配置 ### pytest 三种运行方式 : 1、pytest 全部执行 pytest 2、执行模块 pytest -vs xxx.py 3、指定目录 pytest -vs ./xx目录 4、指定函数 pytest -vs ./x。py::XXXclass:xxxfun #### pytest。ini 配置文件 1、通过读取pytest.ini全局配置文件执行程序 ,在执行的时候,先读取配置文件中的参数,位置:一般放在项目的根目录 如果希望多个测试文件共享fixture,可以在公共目录下新建一个conftest.py文件,将fixture放在其中 pytest.ini是pytest的主配置文件,可以改变pytest的默认行为 ### pytest-html 报告的问题 使用126邮箱发送相关的报告,附件中的测试内容没有正常显示出来, 是要下载下来之后才可以进行正常查看内容