3月的收获总结

1.循环体内定义的函数是无法保存循环执行过程中的不停变化的外部变量

    list = []
    for i in range(3):
        print i, 'iiiii'

        def func(a):
            print i, 'funcfunc'
            return i + a
        list.append(func)

    for f in list:
        print(f(1))

在这里插入图片描述
现象: 循环体内定义的函数获取的外部变量是循环体最后一次循环的变量值。

2.filter()函数 ——判断函数(过滤函数)
filter(function, iterable)
将iterable的每一个元素丢给function进行过滤,符合function规则的返回,所有符合function规则的作为一个新的iterable当成filter()的返回结果。

foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]


def fun_filter(x):
    if x > 20 and x % 3 == 0:
        return x

y1 = filter(fun_filter, foo)
# 也可以简洁的写成
y2 = filter(lambda x: (x > 20 and x % 3 == 0), foo)
print y1, y2

结果:

[24, 27] [24, 27]

3.map()函数

map() 会根据提供的函数对指定序列做映射。

4.for…else…

    for x in xrange(1, 6):
        if x == 5:
            print 'find 5'
            break
    else:
        print 'can not find 5!'

5.脚本返回数据解析。
要求:脚本返回数据格式为json格式。

def deal_log_str(str_log):
    """
    字符串log日志
    :param str_log:脚本返回数据
    :return:
    """
    def is_json(log_content):
        '''
        能否转成json
        :param log_content:
        :return:
        '''
        try:
            json.loads(log_content)
        except Exception:
            return False
        return True

    re_result = re.findall("['{'].*['}']", str_log)
    if re_result and is_json(re_result[0]):
    	#  如果返回json格式数据 函数返沪json , True
        return json.loads(re_result[0]), True
    else:
    	#  如果不能返回json格式, 则返回脚本数据格式,False
        return str_log, False

6.对数据库每天数据记录数据入库次数进行限制。
①.如果只是一天一条数据记录,当天数据可以更新覆盖,采用:

RunProcess.objects.update_or_create(
            defaults={
                'step_data': val,
                'start_time': data_time,
                'handle_user': handle_user,
                'record_time': record_time,
                'apply_user': call_apply,
                'connected_internet': network,
                'network_time': network_time,
                'data_back_time': backup_data,
                'backup_data_time': backup_data_time,
                'phone_bank': phone_bank,
                'pc_room': pc_room,
                'server_group': server_group,
                'phone_transfer': phone_transfer,
                'remark': remark_dict,
                # 'time01': time01,
                # 'all_time': all_time,
                'network_remark': network_remark,
                'backup_data_remark': backup_data_remark,
                'pc_room_remark': pc_room_remark,
                'server_group_remark': server_group_remark,
                'phone_bank_remark': phone_bank_remark,
                'record_date': record_date,
                "status": (1 if 1 in status_list else 0)
            },
            **{
                'record_date': record_date,
                "category": 2,
            }
        )
		#  可以通过 **{key:value, key1:value1,···}  进行入库,通过多个字段构成数据库数据唯一

②.如果每天数据是多条,采用:

     run_process_obj = RunProcess.objects.filter(record_date=record_date, category=category)
                if run_process_obj.count() < 3:
                    process = RunProcess.objects.create(
                        handle_user=handle_user,
                        category=category,
                        result=content,
                        record_time=record_time,
                        record_date=record_date,
                        step_data={},
                        remark={},
                        start_time={},
                        status=(0 if status else 1)
                    )

七.操作审计
概念:记录什么人,在什么时间,做了什么事。
主要针对数据库发生更改的记录(以及造成该行为的请求方法,如POST等),包括创建、更新、删除等。

#  表结构
class Logs(models.Model):
    """
    操作日志
    """

    METHOD = (
        ('POST', u"创建"),
        ('DELETE', u"删除"),
        ('PUT', u"更新"),
        ('PATCH', u"更新"),
        ('EXECUTE', u"执行"),
    )

    operator = models.CharField(verbose_name=u"操作人", max_length=20, null=True, blank=True)
    object_id = models.IntegerField(verbose_name=u"操作对象id", null=True)
    object_name = models.CharField(verbose_name=u"操作对象名称", max_length=20, null=True, blank=True)
    object_module = models.CharField(verbose_name=u"操作对象所属模块", max_length=20, null=True, blank=True)
    operate_method = models.CharField(verbose_name=u"操作类型", max_length=20, null=True, blank=True, choices=METHOD)
    operate_content = models.TextField(verbose_name=u"操作内容", null=True, blank=True)
    create_time = models.DateTimeField(verbose_name=u"操作时间", default=datetime.datetime.now)

    class Meta:
        db_table = "system_logs"
        verbose_name = u"操作日志"

    def __unicode__(self):
        return u"[{}]:{}{}{}(id={})". \
            format(self.create_time, self.operator, self.get_operate_method_display(), self.object_name, self.object_id)

    @property
    def abstract(self):
        return u"{}{}(id={})".format(self.get_operate_method_display(), self.object_name, self.object_id)


from django.forms.models import model_to_dict
from common.log import logger

"""
# 添加操作日志
# 根据当前模块,创建模块日志示例
from apps.commons.audit import OperateAudit
# request:请求request对象,instance:操作model对象
OperateAudit.add_log(request, instance)
"""


class OperateAudit(object):
    __module__ = "OPERATE_AUDIT"

    def __init__(self):
        self.operator = None
        self.object_name = None
        self.object_module = None
        self.operate_method = None
        self.operate_content = None
        self.object_id = None

    @classmethod
    def add_log(cls, request=None, instance=None, method=None):
        """
        添加操作日志
        :param request:
        :param instance:
        :param method:
        :return:
        """
        try:
            cls.operate_method = method or request.method
            cls.operator = request.user.username
            cls.object_id = instance.id
            cls.object_name = instance._meta.verbose_name
            cls.object_module = instance._meta.object_name
            cls.operate_content = model_to_dict(instance)
            Logs.objects.create(
                operator=cls.operator,
                object_id=cls.object_id,
                object_name=cls.object_name,
                object_module=cls.object_module,
                operate_method=cls.operate_method,
                operate_content=cls.operate_content,
            )
        except Exception as e:
            log_data = {
                "operator": cls.operator,
                "object_id": cls.object_id,
                "object_name": cls.object_name,
                "object_module": cls.object_module,
                "operate_method": cls.operate_method,
            }
            error_msg = u'添加日志失败:{};操作对象:{object_name}(id={object_id});' \
                        u'操作人:{operator};操作模块:{object_module};操作类型:' \
                        u'{operate_method}'.format(e, **log_data)
            logger.error(error_msg)

八、创建django-cache表命令

python manage.py createcachetable django_cache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值