Django-Celery
- pip install django-celery(应该会自动安装celery等依赖项)
- 在setting文件中的INSTALLED_APPS里面添加‘djcelery’项以及添加如下代码:
import djcelery
from celery.schedules import crontab
djcelery.setup_loader() # 能自动识别用户app下tasks.py里面的被@task装饰的函数
BROKER_URL = 'redis://127.0.0.1:6379/1' # 需要确保redis启动。
CELERY_RESULT_BACKEND = 'redis://localhost:6379/1'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
- 执行python manage.py syncdb创建celery相关数据表。
- 在自己的app目录下创建tasks.py文件,并加入如下代码:
from celery import task
@task
def my_task_func():
# here, write my code
- 执行python manage.py celery worker启动worker,一个负责执行task的进程
- 若是执行定时任务,还需要执行python manage.py celery beat开启心跳进程
(用于监听什么时候应该执行task,并在应当执行时刻,发送信号给worker,然后worker执行task任务 ) - 运行django项目,进入admin后台的djcelery模块,添加定时任务。
Django-admin
** Django-admin中自定义后台的显示方式 **
from django.utils.html import format_html
class TestModel(models.Model):
GENDER_CHOICES = ((-1, u'女'),(0, u'不详'),(1, u'男'))
name = models.CharField(max_length=12)
gender = models.SmallIntegerField(u'性别', choices=GENDER_CHOICES)
class TestModelAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'gender', 'colored_gender')
# 自定义gender显示field
def colored_gender(self, obj): # 自定义函数,包含两个参数,obj代表数据对象
color = ''
if obj.gender == -1: # 女
color = '#12d012'
elif obj.gender == 0: # 未知
color = 'red'
elif obj.gender == 1: # 男
color = 'yellow'
# 这行中的get_gender_display()函数为django model自带的特殊方法,具体名称为get_FIELD_display()
# 功能是获取FIELD列的显示字符。特别地,对于有choices选项的field有效(其会返回choices中的对应字符)。
# format_html函数使得后台显示时不会按照字符串显示,而是以html的形式。
return format_html('%s' % (color, obj.get_gender_display()))
colored_gender.short_description = "性别" # 此行使得自定义的field可以按照模型的gender排序。并使得后台显示的列名与原生的列有相同样式
colored_gender.admin_order_field = "gender"
** Django-admin中的添加数据表单时,选择外键的数据需要过滤时 **
class TestModel(models.Model):
user = models.ForeignKey(User, limit_choices_to={'is_admin': True},)
这样之后,在后台选择user时,就只会将User表中是admin的用户显示出来。