python manage.py makemigrations
创建migrations/文件夹,检查数据库,记录更改信息,但并没有对数据库执行操作
python manage.py migrate
将migration的任务执行,将model迁移到数据库中
python manage.py runserver
启动服务器,进入127.0.0.1:8000/即可看到登录页面,此时没有用户,执行
python manage.py createsuperuser
得到账户和密码,进入页面
安装simpleui
pip install django-simpleui
在settings.py注册simpleui
INSTALLED_APPS = [
'simpleui', # 放在最前面
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
前后对比
python manage.py startapp app01
刷新项目即可得到应用
settings.py添加django_celery_beat
INSTALLED_APPS = [
...
# 注册celery_beat
'django_celery_beat',
...
]
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery, platforms
# 设置celery相关环境变量,此处放在了settings文件中。
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TestDjango.settings')
app = Celery('TestDjango')
#定义celery相关配置,settings文件中相关的变量名要以'CELERY_'开头
app.config_from_object('django.conf:settings', namespace='CELERY')
platforms.C_FORCE_ROOT = True
# 自动加载每个app下的tasks.py
app.autodiscover_tasks()
运行迁移命令,生成celery相关数据库
python manage.py makemigrations
python manage.py migrate
这时进入页面,已经添加了celery定时任务相关标签页,可以添加定时任务,但是还不能正式运行起来,需要设置broker消息中间件
在settings.py中配置celery关于redis的属性,否则会告警(celery默认使用rabbitmq)
Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refuse
此处使用redis作为中间件,也可以使用rabbitmq
# Celery相关配置
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERYD_MAX_TASKS_PER_CHILD = 20
CELERYD_LOG_FILE = os.path.join(BASE_DIR, 'logs/celery_work.log')
CELERYBEAT_LOG_FILE = os.path.join(BASE_DIR, 'logs/celery_beat.log')
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
CELERY_ENABLE_UTC = False
DJANGO_CELERY_BEAT_TZ_AWARE = False
注:今后每次runserver之前都要先启动redis
在注册的app中添加tasks.py,编写定时任务相关代码
from celery import shared_task
@shared_task
def add(x, y):
print('------------')
return x+y
在设定定时任务之前,可以先在shell模式下查看任务编写是否正确
>>> python manage.py shell # 在terminal下,进入shell模式
在interval设置执行时间,periodic tasks中添加定时任务
注意:在arguments中添加参数,否则告警
保存任务后,在terminal中运行worker和beat,运行task
>>> celery -A TestDjango worker -l info -P eventlet
>>> celery beat -A TestDjango -l info
启动之后,worker会每分钟执行add,terminal可查看运行结果
至此,celery定时任务可以正常运行,可以在tasks.py中添加业务相关代码。