crm项目整理概要
发布日期:2021-05-13 04:45:38 浏览次数:15 分类:博客文章

本文共 62977 字,大约阅读时间需要 209 分钟。

������������������

���������������������������,������������excel���������������������������������������������������������������������������������������������������������������������������crm���������������������������������������������������������������������������������������������������������������������������������������������

������������������

������2���������2���������������������������������bug������������������������

���������������������������������������������������������������������������������������������������������������������������������������stark������������������������rbac(������������)

���������������

from django.db import modelsfrom rbac import models as rbac_modelclass Department(models.Model):    """    ���������    ���������     1000    ������      1001    """    title = models.CharField(verbose_name='������������', max_length=16)    code = models.IntegerField(verbose_name='������������',unique=True,null=False)    def __str__(self):        return self.titleclass UserInfo(models.Model):    """    ���������    """    auth = models.OneToOneField(verbose_name='������������', to=rbac_model.User,blank=True,null=True)    name = models.CharField(verbose_name='������������', max_length=16)    username = models.CharField(verbose_name='���������', max_length=32)    password = models.CharField(verbose_name='������', max_length=64)    email = models.EmailField(verbose_name='������', max_length=64)    depart = models.ForeignKey(verbose_name='������', to="Department",to_field="code")    def __str__(self):        return self.nameclass Course(models.Model):    """    ���������    ������        Linux������        Linux���������        Python������������������������        Python���������������������������    """    name = models.CharField(verbose_name='������������', max_length=32)    def __str__(self):        return self.nameclass School(models.Model):    """    ���������    ������        ������������������        ������������������        ������������������        ���������������������    """    title = models.CharField(verbose_name='������������', max_length=32)    def __str__(self):        return self.titleclass ClassList(models.Model):    """    ���������    ������        Python������  ���������  5���  10000  2017-11-11  2018-5-11    """    school = models.ForeignKey(verbose_name='������', to='School')    course = models.ForeignKey(verbose_name='������������', to='Course')    semester = models.IntegerField(verbose_name="������(���)")    price = models.IntegerField(verbose_name="������")    start_date = models.DateField(verbose_name="������������")    graduate_date = models.DateField(verbose_name="������������", null=True, blank=True)    memo = models.CharField(verbose_name='������', max_length=256, blank=True, null=True, )    teachers = models.ManyToManyField(verbose_name='������������', to='UserInfo', related_name='teach_classes',limit_choices_to={'depart_id__in':[1003,1004,]})    tutor = models.ForeignKey(verbose_name='���������', to='UserInfo', related_name='classes',limit_choices_to={"depart_id":1002})    def __str__(self):        return "{0}({1}���)".format(self.course.name, self.semester)class Customer(models.Model):    """    ���������    """    qq = models.CharField(verbose_name='qq', max_length=64, unique=True, help_text='QQ���������������')    name = models.CharField(verbose_name='������������', max_length=16)    gender_choices = ((1, '���'), (2, '���'))    gender = models.SmallIntegerField(verbose_name='������', choices=gender_choices)    education_choices = (        (1, '������������'),        (2, '������������'),        (3, '������������'),        (4, '������������'),        (5, '������'),        (6, '������������'),        (7, '������'),        (8, '������')    )    education = models.IntegerField(verbose_name='������', choices=education_choices, blank=True, null=True, )    graduation_school = models.CharField(verbose_name='������������', max_length=64, blank=True, null=True)    major = models.CharField(verbose_name='������������', max_length=64, blank=True, null=True)    experience_choices = [        (1, '���������'),        (2, '������������'),        (3, '������������'),        (4, '���������������'),        (5, '���������������'),        (6, '���������������'),        (7, '������������'),    ]    experience = models.IntegerField(verbose_name='������������', blank=True, null=True, choices=experience_choices)    work_status_choices = [        (1, '������'),        (2, '������')    ]    work_status = models.IntegerField(verbose_name="������������", choices=work_status_choices, default=1, blank=True,                                      null=True)    company = models.CharField(verbose_name="������������������", max_length=64, blank=True, null=True)    salary = models.CharField(verbose_name="������������", max_length=64, blank=True, null=True)    source_choices = [        (1, "qq���"),        (2, "���������������"),        (3, "������������"),        (4, "������������"),        (5, "360������"),        (6, "������������"),        (7, "������������"),        (8, "���������"),        (9, "������������"),        (10, "������������"),        (11, "51cto"),        (12, "���������"),        (13, "������"),        (14, "DSP"),        (15, "SEO"),        (16, "������"),    ]    source = models.SmallIntegerField('������������', choices=source_choices, default=1)    referral_from = models.ForeignKey(        'self',        blank=True,        null=True,        verbose_name="������������������",        help_text="���������������������������������������,������������������������������������",        related_name="internal_referral"    )    course = models.ManyToManyField(verbose_name="������������", to="Course")    status_choices = [        (1, "���������"),        (2, "���������")    ]    status = models.IntegerField(        verbose_name="������",        choices=status_choices,        default=2,        help_text=u"���������������������������"    )    consultant = models.ForeignKey(verbose_name="������������", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':1001})    date = models.DateField(verbose_name="������������", auto_now_add=True)    last_consult_date = models.DateField(verbose_name="������������������", auto_now_add=True)    recv_date = models.DateField(verbose_name='������������', null=True, blank=True)    def __str__(self):        return "������:{0},QQ:{1}".format(self.name, self.qq, )class CustomerDistribution(models.Model):    """    ���������������    """    user = models.ForeignKey(verbose_name='������������',to='UserInfo',related_name='cds',limit_choices_to={'depart_id':1000})    customer = models.ForeignKey(verbose_name='������',to='Customer',related_name='dealers')    ctime = models.DateField()    status_choices = (        (1,'������������'),        (2,'���������'),        (3,'3������������'),        (4,'15������������'),    )    status = models.IntegerField(verbose_name='������',choices=status_choices,default=1)    memo = models.CharField(verbose_name='������������',max_length=255)class SaleRank(models.Model):    """    ���������������������    """    user = models.ForeignKey(to="UserInfo",limit_choices_to={'depart_id':1000})    num = models.IntegerField(verbose_name='������')    weight = models.IntegerField(verbose_name='������')class ConsultRecord(models.Model):    """    ������������������    """    customer = models.ForeignKey(verbose_name="���������������", to='Customer')    consultant = models.ForeignKey(verbose_name="���������", to='UserInfo')    date = models.DateField(verbose_name="������������", auto_now_add=True)    note = models.TextField(verbose_name="������������...")class PaymentRecord(models.Model):    """    ������������    """    customer = models.ForeignKey(Customer, verbose_name="������")    class_list = models.ForeignKey(verbose_name="������", to="ClassList", blank=True, null=True)    pay_type_choices = [        (1, "������/���������"),        (2, "������"),        (3, "������"),        (4, "������"),        (5, "������"),    ]    pay_type = models.IntegerField(verbose_name="������������", choices=pay_type_choices, default=1)    paid_fee = models.IntegerField(verbose_name="������������", default=0)    turnover = models.IntegerField(verbose_name="������������", blank=True, null=True)    quote = models.IntegerField(verbose_name="������������", blank=True, null=True)    note = models.TextField(verbose_name="������", blank=True, null=True)    date = models.DateTimeField(verbose_name="������������", auto_now_add=True)    consultant = models.ForeignKey(verbose_name="������������", to='UserInfo', help_text="���������������������")class Student(models.Model):    """    ������������������������    """    customer = models.OneToOneField(verbose_name='������������', to='Customer')    username = models.CharField(verbose_name='���������', max_length=32)    password = models.CharField(verbose_name='������', max_length=64)    emergency_contract = models.CharField(max_length=32, blank=True, null=True, verbose_name='���������������')    class_list = models.ManyToManyField(verbose_name="������������", to='ClassList', blank=True)    company = models.CharField(verbose_name='������', max_length=128, blank=True, null=True)    location = models.CharField(max_length=64, verbose_name='������������', blank=True, null=True)    position = models.CharField(verbose_name='������', max_length=64, blank=True, null=True)    salary = models.IntegerField(verbose_name='������', blank=True, null=True)    welfare = models.CharField(verbose_name='������', max_length=256, blank=True, null=True)    date = models.DateField(verbose_name='������������', help_text='������yyyy-mm-dd', blank=True, null=True)    memo = models.CharField(verbose_name='������', max_length=256, blank=True, null=True)    def __str__(self):        return self.usernameclass CourseRecord(models.Model):    """    ���������������    """    class_obj = models.ForeignKey(verbose_name="������", to="ClassList")    day_num = models.IntegerField(verbose_name="������", help_text=u"������������������������������������������...,���������������")    teacher = models.ForeignKey(verbose_name="������", to='UserInfo')    date = models.DateField(verbose_name="������������", auto_now_add=True)    course_title = models.CharField(verbose_name='������������������', max_length=64, blank=True, null=True)    course_memo = models.TextField(verbose_name='������������������������', blank=True, null=True)    has_homework = models.BooleanField(default=True, verbose_name="���������������")    homework_title = models.CharField(verbose_name='������������������', max_length=64, blank=True, null=True)    homework_memo = models.TextField(verbose_name='������������', max_length=500, blank=True, null=True)    exam = models.TextField(verbose_name='���������', max_length=300, blank=True, null=True)    def __str__(self):        return "{0} day{1}".format(self.class_obj, self.day_num)class StudyRecord(models.Model):    course_record = models.ForeignKey(verbose_name="���������������", to="CourseRecord")    student = models.ForeignKey(verbose_name="������", to='Student')    record_choices = (('checked', "���������"),                      ('vacate', "������"),                      ('late', "������"),                      ('noshow', "������"),                      ('leave_early', "������"),                      )    record = models.CharField("������������", choices=record_choices, default="checked", max_length=64)    score_choices = ((100, 'A+'),                     (90, 'A'),                     (85, 'B+'),                     (80, 'B'),                     (70, 'B-'),                     (60, 'C+'),                     (50, 'C'),                     (40, 'C-'),                     (0, ' D'),                     (-1, 'N/A'),                     (-100, 'COPY'),                     (-1000, 'FAIL'),                     )    score = models.IntegerField("������������", choices=score_choices, default=-1)    homework_note = models.CharField(verbose_name='������������', max_length=255, blank=True, null=True)    note = models.CharField(verbose_name="������", max_length=255, blank=True, null=True)    homework = models.FileField(verbose_name='������������', blank=True, null=True, default=None)    stu_memo = models.TextField(verbose_name='������������', blank=True, null=True)    date = models.DateTimeField(verbose_name='������������������', auto_now_add=True)    def __str__(self):        return "{0}-{1}".format(self.course_record, self.student)
crm
from django.db import modelsclass Menu(models.Model):    '''    ���������    '''    title=models.CharField(max_length=32,verbose_name="������������")    def __str__(self):        return self.titleclass Group(models.Model):    '''    ���������    '''    caption=models.CharField(max_length=32,verbose_name="���������")    menu=models.ForeignKey(verbose_name="������������",to="Menu",default=1)    def __str__(self):        return self.captionclass Permission(models.Model):    """    ���������    """    title = models.CharField(verbose_name='������',max_length=32)    url = models.CharField(verbose_name="���������URL",max_length=64)    # is_menu = models.BooleanField(verbose_name="���������������")    menu_gp=models.ForeignKey(verbose_name="������������",to="Permission",null=True,blank=True)    code=models.CharField(max_length=32,verbose_name="������",default="list")    group=models.ForeignKey(verbose_name="s���������������",to="Group",default=1)    class Meta:        verbose_name_plural = "���������"    def __str__(self):        return self.titleclass User(models.Model):    """    ���������    """    username = models.CharField(verbose_name='���������',max_length=32)    password = models.CharField(verbose_name='������',max_length=64)    email = models.CharField(verbose_name='������',max_length=32)    roles = models.ManyToManyField(verbose_name='���������������������',to="Role",blank=True)    class Meta:        verbose_name_plural = "���������"    def __str__(self):        return self.usernameclass Role(models.Model):    """    ���������    """    title = models.CharField(max_length=32)    permissions = models.ManyToManyField(verbose_name='���������������������',to='Permission',blank=True)    class Meta:        verbose_name_plural = "���������"    def __str__(self):        return self.title
rbac
from django.db import models# Create your models here.class UserInfo(models.Model):    '''    ���������    '''    username=models.CharField(max_length=32,verbose_name="���������")    pwd=models.CharField(max_length=32,verbose_name="������")    def __str__(self):        return self.username    class Meta:        verbose_name_plural="���������"class ClassList(models.Model):    '''    ���������    '''    title=models.CharField(max_length=64,verbose_name="������������")    def __str__(self):        return self.title    class Meta:        verbose_name_plural="���������"class Student(models.Model):    '''    ���������    '''    username = models.CharField(max_length=32,verbose_name="������")    pwd=models.CharField(max_length=32,verbose_name="������")    cls = models.ForeignKey(to=ClassList,verbose_name="������������")    def __str__(self):        return self.username    class Meta:        verbose_name_plural="���������"class QuestionSuv(models.Model):    '''    ���������    '''    title=models.CharField(max_length=32,verbose_name="������������")    create_time = models.DateTimeField(verbose_name='������������', auto_now_add=True)    end_time = models.DateTimeField(verbose_name="������������",null=True)    classobj=models.ForeignKey(to=ClassList,verbose_name="������")    userInfoobj=models.ForeignKey(to=UserInfo,verbose_name="���������")    def __str__(self):        return self.title    class Meta:        verbose_name_plural="���������"class Question(models.Model):    '''    ���������    '''    title=models.CharField(max_length=32,verbose_name="������������")    question_type=(        (1,"������"),        (2,"������"),        (3,"������")    )    type=models.IntegerField(choices=question_type,verbose_name="������������")    questionSuv=models.ManyToManyField(to=QuestionSuv,verbose_name="������������")    def __str__(self):        return self.title    class Meta:        verbose_name_plural="���������"class Option(models.Model):    '''    ���������    '''    title=models.CharField(max_length=32,verbose_name="������������")    value=models.IntegerField(verbose_name="������������������������")    question = models.ForeignKey(to=Question,verbose_name="������������")    def __str__(self):        return self.title    class Meta:        verbose_name_plural="���������"class Answer(models.Model):    '''    ���������    '''    stu=models.ForeignKey(to=Student,verbose_name="������������")    question=models.ForeignKey(to=Question,verbose_name="������������")    option=models.ForeignKey(to=Option,null=True,blank=True,verbose_name="���������������")    value=models.IntegerField(null=True,blank=True,verbose_name="������������������")    content=models.CharField(max_length=255,null=True,blank=True,verbose_name="������������������")    questionSuv=models.ForeignKey(to=QuestionSuv,null=True)    class Meta:        verbose_name_plural="���������"
������������
from django.db import models# Create your models here.class Room(models.Model):    name=models.CharField(max_length=32,verbose_name='���������������')    def __str__(self):        return self.name    class Meta:        verbose_name_plural='���������'class UserInfo(models.Model):    name=models.CharField(max_length=32,verbose_name='���������')    pwd=models.CharField(max_length=32,verbose_name='������')    def __str__(self):        return self.name    class Meta:        verbose_name_plural='���������'class Book(models.Model):    date=models.DateField(max_length=32,verbose_name='������')    time_choice=((1,"8:00"),(2,'9:00'),(3,'10:00'),(4,'11:00'),(5,'12:00'),(6,'13:00'),                 (7,'14:00'),(8,'15:00'),(9,'16:00'),(10,'17:00'),(11,'18:00'),(12,'19:00'),                 (13,'20:00'),                 )    time=models.IntegerField(choices=time_choice,verbose_name='���������')    room=models.ForeignKey('Room',verbose_name='���������')    user=models.ForeignKey('UserInfo',verbose_name='������',null=True)    class Meta:        verbose_name_plural='���������'        unique_together=(            ('date','time','room'),        )
���������������

������ ������������

������������

������������������(customer,SaleRank��������� CustomerDistribution���������������)

������������ ���������������������������������������������������,������������������������������������������������������������������������������������������ ������������������ 1.������������������(������������������) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������: ���������������,������������:user,������,������������,��������������������������������������������������������������������������������������������������������������������������� ������������id���������������������������,��������������������������������������������������������������������������������������������������������������������� reset()���������������������������Redis���������(������:������������������,������������������������������������������������������������������Redis���������������������������������Redis������������������������������������)
import osimport sysimport djangosys.path.append(r'D:\test\DjangoTest\crm')os.chdir(r'D:\test\DjangoTest\crm')os.environ.setdefault("DJANGO_SETTINGS_MODULE", "crm.settings")django.setup()import redisPOOL = redis.ConnectionPool(host='192.168.20.150', port=6379, password='')CONN = redis.Redis(connection_pool=POOL)class Tiga(object):    users = None  # [1,2,1,2,3,1,...]    iter_users = None  # iter([1,2,1,2,3,1,...])    reset_status = False    rollback_list = []    @classmethod    def fetch_users(cls):        from app01 import models        sales = models.SaleRank.objects.all().order_by('-weight')        item = []        # ���������        # d={}        # for sale in sales:        #     #print(sale.user.name, sale.user_id,sale.num,sale.weight)        #     d[sale.user.id]=sale.num        # print(d)        # sum=0        # for k,v in d.items():        #     sum+=int(v)        # print(sum)        # for i in range(sum):        #     for k,v in d.items():        #         if item.count(k)>=v:        #             continue        #         else:        #             item.append(k)        #         if len(item)>sum:        #             break        # ���������:        count = 0        while True:            flag = False            for sale in sales:                if count < sale.num:                    item.append(sale.user_id)                    flag = True            count += 1            if not flag:                break        if item:            CONN.rpush('ctz_sale_id_list', *item)            CONN.rpush('ctz_sale_id_list_origin', *item)            return True        else:            return False    @classmethod    def get_sale_id(cls):        origin_count = CONN.llen('ctz_sale_id_list_origin')        if not origin_count:            status = cls.fetch_users()            if not status:                return None        sale_id = CONN.lpop('ctz_sale_id_list')        if sale_id:            return sale_id        reset = CONN.rpop('ctz_reset_id')        if reset:            CONN.delete('ctz_sale_id_list_origin')            status = cls.fetch_users()            if not status:                return None            CONN.delete('ctz_reset_id')            return CONN.lpop('ctz_sale_id_list')        else:            count = CONN.llen('ctz_sale_id_list_origin')            for i in range(count):                v = CONN.lindex('ctz_sale_id_list_origin', i)                CONN.rpush('ctz_sale_id_list', v)            return CONN.lpop('ctz_sale_id_list')            # if cls.rollback_list:            #     return cls.rollback_list.pop()            # if not cls.users:            #     cls.fetch_users()            # if not cls.iter_users:            #     cls.iter_users = iter(cls.users)            # try:            #     user_id = next(cls.iter_users)            # except StopIteration as e:            #     if cls.reset_status:            #         cls.fetch_users()            #         cls.reset_status = False            #     cls.iter_users = iter(cls.users)            #     user_id = cls.get_sale_id()            # return user_id    @classmethod    def reset(cls):        CONN.rpush('ctz_reset_id', 1)    @classmethod    def rollback(cls, nid):        CONN.lpush('ctz_sale_id_list', nid)Tiga.fetch_users()
���������������������������������������������
def singleInput_view(self, request):        if request.method == 'GET':            form = SingleModelForm()            return render(request, 'singleInput.html', {'form': form})        else:            """������������������������                             - ������������������������������id                             - ������������                          ������������������������������                             - ������������������������ID                             - ������ID                          """            form = SingleModelForm(data=request.POST)            if form.is_valid():                from tiga1 import Tiga                user_id = Tiga.get_sale_id()                if not user_id:                    return HttpResponse('���������������,������������������')                try:                    with transaction.atomic():                        now_date = datetime.datetime.now().date()                        # form.cleaned_data['consultant_id'] = user_id                        # form.cleaned_data['status'] = 2                        # form.cleaned_data['last_consult_date'] = now_date                        # form.cleaned_data['recv_date'] = now_date                        # course = form.cleaned_data.pop('course')                        # customer = models.Customer.objects.create(**form.cleaned_data)                        # print(form)                        # customer.course.add(*course)                        form.instance.consultant_id = user_id                        form.instance.last_consult_date = now_date                        form.instance.recv_date = now_date                        customer = form.save()                        print(customer)                        print('.....')                        models.CustomerDistribution.objects.create(customer=customer, user_id=user_id, ctime=now_date)                        body = '������������������������'                        print(564123)                        message.send_message('���������������', body, '1789920207@qq.com', 'zjm')                except Exception as e:                    # Tiga.rollback(user_id)                    return HttpResponse('������������')                return redirect('/stark/app01/customer/')            return render(request, 'singleInput.html', {'form': form})    def multiInput_view(self, request):        if request.method == 'GET':            return render(request, 'multiInput.html')        else:            from tiga1 import Tiga            user_id = Tiga.get_sale_id()            now_date = datetime.datetime.now().date()            fileObj = request.FILES.get('file')            # with open('multiInput.xlsx', 'wb')as f:            #     for chuck in fileObj:            #         f.write(chuck)            import xlrd            #workbook = xlrd.open_workbook('multiInput.xlsx')            workbook = xlrd.open_workbook(file_contents=fileObj.read())            sheet = workbook.sheet_by_index(0)            maps = {                0: 'qq',                1: 'name',                2: 'gender',                3: 'course',            }            for index in range(1, sheet.nrows):                row = sheet.row(index)                dic = {}                for i in maps:                    key = maps[i]                    cell = row[i]                    if i in (0, 2):                        dic[key] = int(cell.value)                    elif i == 1:                        dic[key] = cell.value                    else:                        course_id = cell.value                        course_list_str = course_id.split('_')                        course_list_int = []                        for i in course_list_str:                            course_list_int.append(int(i))                        dic[key] = course_list_int                print(dic)                try:                    with transaction.atomic():                        dic['consultant_id'] = user_id                        dic['recv_date'] = now_date                        print(dic)                        print(type(dic['qq']))                        course_list = dic.pop('course')                        print(dic)                        print(course_list)                        customer = models.Customer.objects.create(**dic)                        customer.course.add(*course_list)                        print(customer)                        models.CustomerDistribution.objects.create(customer=customer, user_id=user_id, ctime=now_date)                except Exception as e:                    Tiga.rollback(user_id)                    return HttpResponse('������������������������')            return HttpResponse('ok')
���������������������������
2.������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ��������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������: a.������������:   1.���������:���������������������,������������������(���������������������������)   2.���������:������,������������������������������������:���������������������������������������de���������������������������������������������������15���   ���������3������������������,���������������������������������������������������������������(���������������������������������������������),������status������   ���������������,���������������������������������������������������������������,���������������������������������������������������������   3.���������:��������������� b.���������������(������������):���������������15������������������������������������������������������������������������������������������ c.������������:��������������� ���������������������(���������������������������������������������),������status������   ������������
def public_view(self, request):        """        ������������������        :param request:        :return:        """        # ������������������ status=2 ������ ���15������������(������������-15 > ������������) or  3������������(������������-3���>������������������) ��� Q������        # ���������        # con = Q()        # con1 = Q()        # con1.children.append(('status', 2))        #        # con2 = Q()        # con2.connector = 'OR'        # import datetime        # now_date = datetime.datetime.now().date()        # order_deadtime = now_date - datetime.timedelta(days=15)        # talk_deadtime = now_date - datetime.timedelta(days=3)        #        # con2.children.append(('recv_date__lt', order_deadtime))        # con2.children.append(('last_consult_date__lt', talk_deadtime))        #        # con.add(con1, 'AND')        # con.add(con2, 'AND')        # print(con, '------')        # if con:        #     customers = models.Customer.objects.filter(con).all()        #     print(customers, '*****')        # ���������:        current_user_id = 5        now_date = datetime.datetime.now().date()        order_deadtime = now_date - datetime.timedelta(days=15)        talk_deadtime = now_date - datetime.timedelta(days=3)        customers = models.Customer.objects.filter(            Q(recv_date__lt=order_deadtime) | Q(last_consult_date__lt=talk_deadtime), status=2).all()        return render(request, 'public_customer_view.html',                      {"customers": customers, 'current_user_id': current_user_id})
������������
def competition_view(self, request, cid):        '''        ������        ������:��������������������������� ������������������������ ������ ���15������������(������������-15 > ������������) or  3������������(������������-3���>������������������) ���        :param request:        :param cid: ������id        :return:        '''        current_usr_id = request.session['user'].get('id')        now_date = datetime.datetime.now().date()        order_deadtime = now_date - datetime.timedelta(days=15)        talk_deadtime = now_date - datetime.timedelta(days=3)        update_count = models.Customer.objects.filter(            Q(recv_date__lt=order_deadtime) | Q(last_consult_date__lt=talk_deadtime), status=2, id=cid).exclude(            consultant_id=current_usr_id).update(consultant_id=current_usr_id, last_consult_date=now_date,                                                 recv_date=now_date)        if not update_count:            return HttpResponse("������������")        models.CustomerDistribution.objects.create(user_id=current_usr_id, customer_id=cid, ctime=now_date)        return HttpResponse('������������')
������
3.������������ ������������������������������������������,������������������,������������������������������������������������������������������������������������������ ������������: ������������������������������������������������������������������������������������������
def myuser_view(self, request):        '''        ������������        :param request:        :return:        '''        current_user_id = request.session['user'].get("id")        customers_list = models.CustomerDistribution.objects.filter(user_id=current_user_id).order_by('status')        return render(request, 'myuser.html', {'customers': customers_list})
������������
4.������������ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

������������������������ (courserecord,studyrecord)

������������������ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������ 1.������������ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������2���3��������������� 2.������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������ ���������������������������������������������������������������������������������������������������������������������,������,������,������,������.
���������������������:    ���������������������������������������������������������������action������������������������������������������ ���������������������
def multu_init(self,request):        id_list=request.POST.getlist('pk')        CourseRecord_list=models.CourseRecord.objects.filter(id__in=id_list).all()        for courseRecord in CourseRecord_list:            exists=models.StudyRecord.objects.filter(course_record=courseRecord).exists()            if exists:                continue            class_obj=courseRecord.class_obj            student_list=models.Student.objects.filter(class_list=class_obj)            studyrecord_list=[]            for student in student_list:                studyrecord= models.StudyRecord(course_record=courseRecord,student=student)                studyrecord_list.append(studyrecord)            models.StudyRecord.objects.bulk_create(studyrecord_list)    multu_init.short_desc='���������������'    action_func_list = [multu_init,multi_del]
���������������
���������������������������������������������studyrecord���������������������������  ������������:     ���������������������������������������������������������,���������������������������������������,������������������������������,������action������������������������     ������������
#������    def CheckWa(self,obj=None,is_head=False):        if is_head:            return '������'        url='/stark/app01/studyrecord/?course_record=%s'%obj.id        return mark_safe("������������"%url)   def checked(self,request):        id_list=request.POST.getlist('pk')        models.StudyRecord.objects.filter(id__in=id_list).update(record='checked')    checked.short_desc='���������'    def vacate(self, request):        id_list = request.POST.getlist('pk')        models.StudyRecord.objects.filter(id__in=id_list).update(record='vacate')    vacate.short_desc = '������'    def late(self,request):        id_list = request.POST.getlist('pk')        models.StudyRecord.objects.filter(id__in=id_list).update(record='late')    late.short_desc='������'    def noshow(self, request):        id_list = request.POST.getlist('pk')        models.StudyRecord.objects.filter(id__in=id_list).update(record='noshow')    noshow.short_desc = '������'    def leave_early(self,request):        id_list = request.POST.getlist('pk')        models.StudyRecord.objects.filter(id__in=id_list).update(record='leave_early')    leave_early.short_desc='������'    show_action = True    action_func_list = [checked,vacate,late,noshow,leave_early]
������������
3.������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������:       ������������������������������������������������������������������������������������������������������id���������������������������������������������������dao���������       ������������������������������������������������������������������type������������ModelForm������������������,fields���������������score_������������id       ,homework_note_������������������id,post������������ ������������courseRecordConfig������������������������

 

#������������    def inputScore(self,request,cr_id):        if request.method=='GET':            studyRecord_list=models.StudyRecord.objects.filter(course_record_id=cr_id)            data=[]            for studyRecord in studyRecord_list:                #������������form                SRForm=type('SRForm',(Form,),{                    'score_%s'%studyRecord.id : fields.ChoiceField(models.StudyRecord.score_choices),                    'homework_note_%s'%studyRecord.id :fields.ChoiceField(widget=widgets.Textarea(attrs={"style":'width:395px;height:45px'}))                })                data.append({"studyRecord":studyRecord,"form":SRForm(initial={'score_%s'%studyRecord.id:studyRecord.score,'homework_note_%s'%studyRecord.id:studyRecord.homework_note})})            return render(request,'inputScore.html',{'data':data})        else:            data=request.POST            print(data)            for k,v in data.items():                if k=='csrfmiddlewaretoken':                    continue                name,studyRecord_id=k.rsplit('_',1)                data_dic={}                if studyRecord_id in data_dic:                    data_dic[studyRecord_id][name]=v                else:                    data_dic[studyRecord_id]={name:v}                for id,dic in data_dic.items():                    models.StudyRecord.objects.filter(id=id).update(**dic)            return redirect(self.get_list_url())
������������
{% extends 'stark/base.html' %}{% block body %} 

������������������

{% csrf_token %}
{% for foo in data %}
{% for field in foo.form %}
{% endfor %}
{% endfor %}
������ ������������ ������ ������ ������
{{ foo.studyRecord.course_record }} {{ foo.studyRecord.student }} {{ foo.studyRecord.get_record_display }} {{ field }}
{% endblock %}
������������html

 

��������������� ������

���������������������������������������������������������������������������������������������������������-���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

������������������������������������������

 

������������ ������

���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,������������������������������������������������������������������������������������(������),������,���������������������������������������������������������������������������������������������������������������������

���������:

1. ������ChangeList������������������

  ������:

change_listview��������������������������� ������������������������,���������������������������������������������������������������������������������������������������������������������������������������������������changelist_view������������������changelist���������������

2. ������������������������Q���������3��� 15���

������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������.

def public_view(self, request):        """        ������������������        :param request:        :return:        """        # ������������������ status=2 ������ ���15������������(������������-15 > ������������) or  3������������(������������-3���>������������������) ��� Q������        # ���������        # con = Q()        # con1 = Q()        # con1.children.append(('status', 2))        #        # con2 = Q()        # con2.connector = 'OR'        # import datetime        # now_date = datetime.datetime.now().date()        # order_deadtime = now_date - datetime.timedelta(days=15)        # talk_deadtime = now_date - datetime.timedelta(days=3)        #        # con2.children.append(('recv_date__lt', order_deadtime))        # con2.children.append(('last_consult_date__lt', talk_deadtime))        #        # con.add(con1, 'AND')        # con.add(con2, 'AND')        # print(con, '------')        # if con:        #     customers = models.Customer.objects.filter(con).all()        #     print(customers, '*****')        # ���������:        current_user_id = 5        now_date = datetime.datetime.now().date()        order_deadtime = now_date - datetime.timedelta(days=15)        talk_deadtime = now_date - datetime.timedelta(days=3)        customers = models.Customer.objects.filter(            Q(recv_date__lt=order_deadtime) | Q(last_consult_date__lt=talk_deadtime), status=2).all()        return render(request, 'public_customer_view.html',                      {"customers": customers, 'current_user_id': current_user_id})
View Code

3. ������yield������(���������������������������������)

- ���������������������������������������������

- __iter__���yield������

���������������������������ChangList������get_combine_seach_filter()���������row������������������FilterRow������������__iter__������ yied������������������������������������url

def get_combine_seach_filter(self):        for option in self.combine_seach:            _field = self.model_class._meta.get_field(option.field_name)            print()            if isinstance(_field, ForeignKey):                row = FilterRow(option, option.get_queryset(_field), self.request)            elif isinstance(_field, ManyToManyField):                row = FilterRow(option, option.get_queryset(_field), self.request)            else:                row = FilterRow(option, option.get_choice(_field), self.request)            yield row
View Code
class FilterRow(object):    def __init__(self, option, data, request):        self.option = option        self.data = data        self.request = request    def __iter__(self):        current_id = self.request.GET.get(self.option.field_name)        current_id_list = self.request.GET.getlist(self.option.field_name)        params = copy.deepcopy(self.request.GET)        params._mutable = True        if self.option.field_name in params:            # ������������������url���������������������������            origin_list = params.pop(self.option.field_name)            url = '{0}?{1}'.format(self.request.path_info, params.urlencode())            yield mark_safe('������'.format(url))            params.setlist(self.option.field_name, origin_list)        else:            url = '{0}?{1}'.format(self.request.path_info, params.urlencode())            yield mark_safe('������'.format(url))        for val in self.data:            if self.option.is_choice:                pk, text = str(val[0]), val[1]            else:                text = self.option.text_func_name(val) if self.option.text_func_name else str(val)                pk = str(self.option.val_func_name(val)) if self.option.val_func_name else str(val.pk)            if not self.option.is_multi:                # ������                params[self.option.field_name] = pk                url = '{0}?{1}'.format(self.request.path_info, params.urlencode())                if pk == current_id:                    yield mark_safe('{1}'.format(url, text))                else:                    yield mark_safe('{1}'.format(url, text))            else:                # ������                _parms = copy.deepcopy(params)                id_list = _parms.getlist(self.option.field_name)                if pk in current_id_list:                    # ���������������������������������url���������������������id������������������������������������������                    id_list.remove(pk)                    _parms.setlist(self.option.field_name, id_list)                    url = '{0}?{1}'.format(self.request.path_info, _parms.urlencode())                    yield mark_safe('{1}'.format(url, text))                else:                    id_list.append(pk)                    _parms.setlist(self.option.field_name, id_list)                    url = '{0}?{1}'.format(self.request.path_info, _parms.urlencode())                    yield mark_safe('{1}'.format(url, text))
View Code

4. ������Model������������������������������

class Foo(model.Model):

xx = models.CharField()
Foo.get_field('xx')

������������������������������

model.UserInfo        model.UserInfo._meta.app_label#������������app���������        model.UserInfo._meta.model_name#������������������������        model.UserInfo._meta.get_field('username')#������������                model.UserInfo._meta.get_field('username').verbose_name#������verbose_name        model.UserInfo._meta.get_field('������������������������').rel.to #���������������model���        - models.UserInfo._meta.get_field('name') # ���������������������������������������        - models.UserInfo._meta.fields # ���������������������������        - models.UserInfo._meta._get_fields() # ������������������������������������������������������������        - models.UserInfo._meta.many_to_many # ������m2m������

������������������������������������������������

obj������������������related_fileds=obj._meta.related_objects #������������������������������������������������for related_field in fileds���    _model_name=related_field.field.model._meta.model_name#���������������������������������������    _related_name=related_field.related_name#������������������������_related_name(���������������������)    _field_name=related_field.field_name#������������������������������������������������(to_field='')    _limit_choices_to=related_obj.limit_choices_to

5. ������������������

������Q������

������show_search_form������������������������������������search_fileds=[]���������������������������

# ������    search_fileds = []    def get_search_fileds(self):        data = []        if self.search_fileds:            data.extend(self.search_fileds)        return data    def get_search_condition(self):        key_word = self.request.GET.get(self.search_key)        search_fileds = self.get_search_fileds()        condition = Q()        condition.connector = 'or'        if key_word and self.get_show_search_form():            for filed in search_fileds:                condition.children.append((filed, key_word))        return condition
Strkconfig���
# ���������������������        self.show_search_form = config.get_show_search_form()        # ������������value���url������        self.search_form_val = self.request.GET.get(config.search_key, ' ')
ChangeList���
{% if cl.show_search_form %}        
{% endif %}
������

6. Type���������

������������������������modelForm���������������������������������������������������

Type���������������������������,���������������������������������������������������������������������������������������������������

#������������    def inputScore(self,request,cr_id):        if request.method=='GET':            studyRecord_list=models.StudyRecord.objects.filter(course_record_id=cr_id)            data=[]            for studyRecord in studyRecord_list:                #������������form                SRForm=type('SRForm',(Form,),{                    'score_%s'%studyRecord.id : fields.ChoiceField(models.StudyRecord.score_choices),                    'homework_note_%s'%studyRecord.id :fields.ChoiceField(widget=widgets.Textarea(attrs={"style":'width:395px;height:45px'}))                })                data.append({"studyRecord":studyRecord,"form":SRForm(initial={'score_%s'%studyRecord.id:studyRecord.score,'homework_note_%s'%studyRecord.id:studyRecord.homework_note})})            return render(request,'inputScore.html',{'data':data})        else:            data=request.POST            print(data)            for k,v in data.items():                if k=='csrfmiddlewaretoken':                    continue                name,studyRecord_id=k.rsplit('_',1)                data_dic={}                if studyRecord_id in data_dic:                    data_dic[studyRecord_id][name]=v                else:                    data_dic[studyRecord_id]={name:v}                for id,dic in data_dic.items():                    models.StudyRecord.objects.filter(id=id).update(**dic)            return redirect(self.get_list_url())
������������

7. ������������

- ���������������������������������������������������������������������������

- redis
- ������
- ������������������������ ������������������
- pop������

 

������ ���������������������������

8. ������ list_diplay������

list_display = [���������,���������������������]

9. reverse������������URL

������url���name������������������reverse������������������namespace���������������������������������������������������������url���������������������������args=[]

# ������url    def get_urls(self):        model_class_app = (self.model_class._meta.app_label, self.model_class._meta.model_name)        urlpatterns = [            url(r'^$', self.wrap(self.changlist_view), name='%s_%s_changelist' % model_class_app),            url(r'^add/$', self.wrap(self.add_view), name='%s_%s_add' % model_class_app),            url(r'^(\d+)/change/$', self.wrap(self.chang_view), name='%s_%s_change' % model_class_app),            url(r'^(\d+)/delete/$', self.wrap(self.delete_view), name='%s_%s_delete' % model_class_app)        ]        urlpatterns.extend(self.extra_url())        return urlpatterns    # ���������url ������������config������������������������    def extra_url(self):        return []# ���������������url    def get_list_url(self):        name = 'stark:%s_%s_changelist' % (self.model_class._meta.app_label, self.model_class._meta.model_name)        list_url = reverse(name)        return list_url    # ���������������url    def get_add_url(self):        name = 'stark:%s_%s_add' % (self.model_class._meta.app_label, self.model_class._meta.model_name)        add_url = reverse(name)        return add_url    # ���������url    def get_change_url(self, nid):        name = 'stark:%s_%s_change' % (self.model_class._meta.app_label, self.model_class._meta.model_name)        edit_url = reverse(name, args=(nid,))        return edit_url    # ���������url    def get_delete_url(self, nid):        name = 'stark:%s_%s_delete' % (self.model_class._meta.app_label, self.model_class._meta.model_name)        del_url = reverse(name, args=(nid,))        return del_url
������������url

10. ������

���������������

��������� {%block body%}{%endblock%}

������������������{% extends  '���������������' %}      

                      {%block body%}{%endblock%}

11. ready������������������������

- ������������������������������

from django.apps import AppConfigclass StarkConfig(AppConfig):    name = 'stark'    def ready(self):        from django.utils.module_loading import autodiscover_modules        autodiscover_modules('stark')
stark.apps

12. inclusion_tag

������������������������������crm���������popup���������������

������������������������������������������������inclusion_tag������html���������,(������html���������������������),���������������������������������html������������������������������������

{% inclusion_tag��������������������� ��������� ���������....%}

13. ������������������

������������������������������

������������MiddlewareMixin,���������������:

  • process_request(self,request)
  • process_response(self, request, response
  • process_view(self, request, callback, callback_args, callback_kwargs)
  • process_template_response(self,request,response)
  • process_exception(self, request, exception)

15. importlib + getattr

���������������������������������django������������������������������������������������

MESSAGE_CLASSES = [    'stark.utils.message.msg.Msg',    'stark.utils.message.wx.WeChat',    'stark.utils.message.dingding.DingDing',    'stark.utils.message.email.Email',]
settings.py
import importlib    for cls_path in settings.MESSAGE_CLASSES:        # cls_path������������        module_path,class_name = cls_path.rsplit('.',maxsplit=1)        m = importlib.import_module(module_path)        obj = getattr(m,class_name)()        obj.send(subject,body,to,name)

16. FilterOption���lambda���������

         ������������������������������������������������������������������������������

 

17. QueryDict

- ������������������

- filter

18. ModelForm

������������������������������satrkcofig������

type������ModelForm

���������������form���������

# '''# for bfield in form:#     print(bfield.field, '--------------', type(bfield.field))# 
--------------
#
--------------
#
--------------
#
--------------
#
--------------
# '''### ''''# #bfield.field.queryset#
,
]>#
,
]># '''## '''# #bfield.field.queryset.model#
#
# '''## '''# #bfield.auto_id# id_depart# id_roles# '''
������������������
for bfield in model_obj_form:        temp = {"is_popup": False, "bfiled": bfield}        from django.forms import ModelChoiceField        #���������������������������������        if isinstance(bfield.field, ModelChoiceField):            #������������������model���            relate_class_name = bfield.field.queryset.model            #���������������������model������������������            if relate_class_name in site._registry:                #app���������modellei������                app_model_name = relate_class_name._meta.app_label, relate_class_name._meta.model_name                #������������������model���add���url                baseurl = reverse('stark:%s_%s_add' % app_model_name)                model_name=config.model_class._meta.model_name                related_name=config.model_class._meta.get_field(bfield.name).rel.related_name                print(related_name,'related_name',type(related_name),'------------')                #������popup���url                popurl = '%s?_popbackid=%s&model_name=%s&related_name=%s' % (baseurl, bfield.auto_id,model_name,related_name)                temp["is_popup"] = True                temp['popurl'] = popurl
View Code

19. ��������������� @property @classmethod 

20. mark_safe

���������������html������������������������������������������������������xss������

��������������������������������������������� {{aaa|safe}}

21. ���������������������+raise Im...

���������������������������������������������BaseMessage���������������������send()������������������������������������

class BaseMessage(object):    def send(self, subject, body, to, name):        raise NotImplementedError('���������send������')

���������������������������������������������������������������������������������������������������������

22. ������������������������������self.request = request

23. js���������������

(function(arg){

})('sf')
24. URL���������������
25. ���������

python3������������������,������������������

python2������������������������������,������������������������������������������������obj������������������������������������������������������������obj������������������

                  ���������������������������

                 ���������������������������

26. ���������������xlrd

 

27. redis���������

 

28. ������������

������������������������������3���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������    1. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2. ������������������������������������������������������������������������������������������switch case���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������3.������������������������������������������ crm������������������������������,������������������������������,������,������������������������������������������������������baseMessage���������������������������baseMessage���send()������

 

settings.py
MSG_PATH = "path.Email"
class XXFactory(object):
@classmethod
def get_obj(cls):
settings.MSG_PATH
# rsplit
# importlib
# getattr
return obj
class Email(object):
def send ...
class WeChat(object):
def send ...
class Msg(object):
def send ...

29. Models���������������save������

 

30. django admin���������models������

from django.contrib import admin

from . import models

# ���������

class UserConfig(admin.ModelAdmin):
pass

admin.site.register(models.UserInfo,UserConfig)

# ���������

@admin.register(models.UserInfo)
class UserConfig(admin.ModelAdmin):
pass

31. ������������

1.���������������������������������������������������������������������������������������������������������������������������������������

2.������������������������������ ������������������������������������������������������������������������������������������

    ���������������������������������������������������������������������

   ������������������������������������������������������  

 

# ������������������>>> import copy>>> var1 = {"k1": "1", "k2": 2, "k3": ["abc", 456]}# ������������������������>>> var2 = copy.copy(var1)# ������������������������������������������>>> id(var1)2084726354952>>> id(var2)2084730248008# ���������������������������������������������>>> id(var1["k1"])2084726207464>>> id(var2["k1"])2084726207464

������������������������������������������������������������������������������������������python���������������������������������������

# ������������������>>> import copy>>> var1 = {"k1": "1", "k2": 2, "k3": ["abc", 456]}# ���������������������������var1������������������var2>>> var2 = copy.deepcopy(var1)# var1���var2������������������������������>>> id(var1)1706383946760>>> id(var2)1706389852744# var1���var2���������"k3"���������������������������>>> id(var1["k3"])1706389853576>>> id(var2["k3"])1706389740744# var1���var2���"k3"���������������������������������>>> id(var1["k3"][1])1706383265744>>> id(var2["k3"][1])1706383265744

���������������������

- ������������������������URL���                     - request.GET                    - ���������                    - ���������������                    - yield                    - ������������������                - popup                    - window.open("",'name')                    - opener.xxxxxxx()                    - FK������������������ limit_choice_to ������������������Q������                    - related_name���model_name                    - ������������������������������������������limit_choice_to������                    - ������                                    - excel������������                - ������������                    - ������������URL                    - ���Admin������(include)                    - /xx/ -> ([                            'xxx',                        ],namespace)                                - ���������������������������������admin������������������������������������������������������������������������������������������������add_btn=True,show_searche=True���������������������������������������get_add_btn()                           ���get_show_search������,������������������������������������������������,���������������������������������������������������������������������������������������������������������������������������                                 -������������������������������������������������������������������������������������������������������������������������������������������������������ ���������type������������form������                 ������������field������

 

 

上一篇:Django-admin管理工具
下一篇:RabbitMQ-2

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月05日 22时39分57秒