django开发功能笔记- 记录一次zixunshi状态修改功能

 

背景:咨询师需要根据时间和点击(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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值