背景:咨询师需要根据时间和点击(oncal onclick)事件修改状态
实现思路:
一 celery 定时队列 拿到设置的7*24小时参数 设置定时器 因为celery不熟悉 下次再说
二 threading里面的Timer可以异步执行,7*24小时状态设计一个模型类,取值的时候用user的状态和freetime表里的fstate做判断实现。
不多说了,直接上代码回家 django版本1.11.11 ,app的名字叫 celerytapp:
models.py:
from django.db import models
#from django.contrib.auth.models import AbstractUser
# Create your models here.
class BaseModel(models.Model):
"""为模型类补充字段"""
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
# 逻辑删除 默认为False 字段修改为True的时候不显示
is_delete = models.BooleanField(default=False,verbose_name='逻辑删除')
class Meta:
# 说明是抽象模型类, 用于继承使用,数据库迁移时不会创建BaseModel的表
abstract = True
class User(BaseModel):
# 比较判断取值 这个chose没有写 1 2 3 为其主要取值
status = models.SmallIntegerField(blank=True)
username = models.CharField(max_length=20)
passwd = models.CharField(max_length=20)
def __str__(self):
return self.username
class Meta:
db_table = 'users_user'
class FreeTime(BaseModel):
FWEEK_C = (
(1, '周一'),
(2, '周二'),
(3, '周三'),
(4, '周四'),
(5, '周五'),
(6, '周六'),
(7, '周日')
)
FSTATE_C = (
(1, '正常通话'),
#(2, '放电中'),
#(3, '咨询中'),
(4, '免打扰')
)
fweek = models.SmallIntegerField(choices=FWEEK_C, default=1)
fhour = models.SmallIntegerField(default=0)
fstate = models.SmallIntegerField(choices=FSTATE_C, default=0)
who = models.ForeignKey(User,verbose_name='free_u')
url.py:
from django.conf.urls import include, url
from celerytapp import views
from celerytapp.views import *
urlpatterns = [
url(r"^celery/", views.celery),
url(r"^red/(?P<id>\d+)$", views.red),
]
view.py:
from django.shortcuts import render,redirect
from django.core.urlresolvers import reverse
from .models import User,FreeTime
import datetime
from threading import Timer
def celery(request):
user = User.objects.all()
alltime = FreeTime.objects.filter(fhour=datetime.datetime.now().hour)
for u in user:
try:
# get拿不到数据会报错 所以使用try
t = alltime.get(who_id=u.id).fstate
#做判断 默认7×24里面除了1就是4
if t > u.status:
u.status = t
u.save()
except:
print('meiyou fstate')
context = {
'users':user,
'alltime':alltime
}
return render(request,'celery.html',context)
def green(id):
mans = User.objects.filter(id=id)
for m1 in mans:
m1.status = 1
print(m1.status)
m1.save()
def red(request,id):
mans = User.objects.filter(id=id)
for m1 in mans:
m1.status = 2
print(m1.status)
m1.save()
print('------------------')
print(id)
# 8是时间 green是 异步线程函数 id传参
t = Timer(8, green,(id))
t.daemon = True
t.start()
print('-----end-----')
# index的url 配置了name=‘index’属性 重定向依稀啊到首页
return redirect(reverse('index'))
celery.html
<h1>celery页面</h1>
<ul style="font-size: x-large">
{% for user in users %}
<li>
{{ user.id }}
---
{{ user.username }}
-----
{% if user.status == 1 %}
<span style="color: #0FB25F">绿色状态</span>
{% elif user.status == 2 %}
<span style="color: red">红色状态</span>
{% elif user.status == 3 %}
<span style="color: orange">黄色状态</span>
{% elif user.status == 4 %}
<span style="color: black">免打扰状态</span>
{% endif %}
<a href="/red/{{ user.id }}">点击变红色</a>
</li>
{% endfor %}
</ul>


被折叠的 条评论
为什么被折叠?



