前期文件准备

时间

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

缓存

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
        'TIMEOUT': 60,  # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
        'OPTIONS': {
            'MAX_ENTRIES': 300,  # 最大缓存个数(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
        },
        'KEY_PREFIX': '',  # 缓存key的前缀(默认空)
        'VERSION': 'v1',  # 缓存key的版本(默认1)
    }

}

CACHE_MIDDLEWARE_SECONDS = 10
CACHE_MIDDLEWARE_KEY_PREFIX = ""


'django.middleware.cache.FetchFromCacheMiddleware',  # 内存缓存配置缓存配置配置

'django.middleware.cache.UpdateCacheMiddleware',  # 内存缓存配置缓存配置
 

数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'client_statistics',
        'USER': 'client_dataer',
        'PASSWORD': 'client_Data_378ymj',
        'HOST': '117.50.4.148',
        'PORT': 3306,
    }
}

 

 

restframe

REST_FRAMEWORK = {
    # 使用Django的标准`django.contrib.auth`权限管理类,
    # 或者为尚未认证的用户,赋予只读权限.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ],
    # 用户身份认证
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',  # 配置jwt
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
    # 版本管理
    'DEFAULT_VERSION': 'v1',  # 默认版本
    'ALLOWED_VERSIONS': ['v1'],  # 允许的版本
    'VERSION_PARAM': 'version'  # URL中获取值的key
}

 

日志

LOGGING = {
    'version': 1,  # 暂时只支持1
    'disable_existing_loggers': False,  #
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(asctime)s %(module)s %(message)s'
        },
    },
    'filters': {
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            # 'include_html': True,
        },
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT + '/logs/', 'all.log'),  # 日志输出文件
            'maxBytes': 1024 * 1024 * 5,  # 文件大小
            'backupCount': 5,  # 备份份数
            'formatter': 'simple',  # 使用哪种formatters日志格式
        },
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT + '/logs/', 'error.log'),
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 5,
            'formatter': 'standard',
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        'request_handler': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT + '/logs/', 'script.log'),
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 5,
            'formatter': 'standard',
        },  # '/tmp/test.log',
        # 'scprits_handler': {
        #     'level': 'DEBUG',
        #     'class': 'logging.handlers.RotatingFileHandler',
        #     'filename': os.path.join(STATIC_ROOT + '/logs/', 'script.log'),
        #     'maxBytes': 1024 * 1024 * 5,
        #     'backupCount': 5,
        #     'formatter': 'standard',
        # }
    },
    'loggers': {
        'django': {
            'handlers': ['default', 'console'],
            'level': 'DEBUG',
            'propagate': False
        },
        'django.request': {
            'handlers': ['request_handler'],
            'level': 'DEBUG',
            'propagate': False,
        },
        # 'scripts': {
        #     'handlers': ['scprits_handler'],
        #     'level': 'INFO',
        #     'propagate': False
        # },
        # 'myapp.views': {
        #     'handlers': ['default', 'error'],
        #     'level': 'DEBUG',
        #     'propagate': True
        # },
    }

}

中间件

class MiddlewareMixin(object):


    def __init__(self, get_response=None):

        self.get_response = get_response
        super(MiddlewareMixin, self).__init__()

    def __call__(self, request):

        response = None
        if hasattr(self, 'process_request'):
            response = self.process_request(request)
        if not response:
            response = self.get_response(request)
        if hasattr(self, 'process_response'):
            response = self.process_response(request, response)
        return response


class CORSMiddleware(MiddlewareMixin):


    def process_response(self, request, response):

        if request.method == "OPTIONS":
            response['Access-Control-Allow-Origin'] = '*'
            response['Access-Control-Allow-Headers'] = '*'
            response['Access-Control-Allow-Methods']='*'
        else:
            response['Access-Control-Allow-Origin'] = '*'
        return response
View Code

JWT模块    +登录

settings:

JWT_AUTH = {
    'JWT_EXPIRATION_DELTA': timezone.timedelta(seconds=30000),  # 6小时过期
    'JWT_AUTH_HEADER_PREFIX': 'JWT',
    'JWT_VERIFY': True,
    'JWT_AUTH_COOKIE': None,
    'JWT_SECRET_KEY': SECRET_KEY,
}

url:
from rest_framework_jwt.views import obtain_jwt_token

    url(r'^admin_login/', obtain_jwt_token),
View Code
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend
from rest_framework.exceptions import ValidationError
from rest_framework import status
from django.db.models import Q
from channel import models
Manager = get_user_model()

class CustomBackend(ModelBackend):
    """
    定义用户登录方式(手机号/邮箱登录)
    username和password拿到的是字符串格式
    """

    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            manager = Manager.objects.get(Q(mobile_number=username) | Q(email=username))
            if manager.check_password(password):
                return manager
            else:
                raise ValidationError('用户名或密码错误', code=status.HTTP_400_BAD_REQUEST)
        except Exception as e:
            raise ValidationError('用户名或密码错误', code=status.HTTP_400_BAD_REQUEST)
View Code

 

随机验证

def random_num(length=6):

    seed = "1234567890"
    sa = []
    for i in range(length):
        sa.append(random.choice(seed))
    salt = ''.join(sa)
    return salt
View Code

循环生成每一天数据

def get_day_info(begin_time_datetime, last_time_datetime, day_info):

    while last_time_datetime >= begin_time_datetime:
        """
        循环显示每一天的数据,按照当前时间加上明天时间,去当天时间
        再把当前时间-1,再循环取值
        """
        # next_day = end_time_datetime + datetime.timedelta(2)  #明天的起始时间
        last_day = last_time_datetime - datetime.timedelta(1)
        active_count_day = models.AppUser.objects.filter(create_date__gte=last_day,
                                                         create_date__lte=last_time_datetime).all().count()
        bill_count_day = models.Installment.objects.filter(create_date__gte=last_day,
                                                           create_date__lte=last_time_datetime).all().count()
        loan_count_day = models.Installment.objects.filter(status=12, create_date__gte=last_day,
                                                           create_date__lte=last_time_datetime).all().count()
        loan_money_day = models.Installment.objects.filter(status=12, create_date__gte=last_day,
                                                           create_date__lte=last_time_datetime).all().aggregate(
            loan_sum=Sum('apply_amount'))
        now_date_str = str(last_time_datetime - datetime.timedelta(1)).split(' ')[0]
        now_day_info = {now_date_str: {
            'date': now_date_str,
            'active_count_day': active_count_day,
            'bill_count_day': bill_count_day,
            'loan_count_day': loan_count_day,
            'loan_money_day': loan_money_day.get('loan_sum', 0)
        }}
        day_info.append(now_day_info)  # 用列表装每天数据,用作显示
        last_time_datetime -= datetime.timedelta(1)
    return day_info
View Code

导出excel

def export_excel(day_info_list):
    """
    明天kid里面的model
    通过发送post请求,前端返回day_info_list=['2018-01-01':{‘day_info’:day_info},'2018-01-01':{‘day_info’:day_info}] 
    """

    logger.info(day_info_list)      #获取信息的日志
    filename=day_info_list.pop(-1)
    try:
        wb = xlwt.Workbook(encoding='utf-8')
        sheet = wb.add_sheet(u'人员表单')
        style_heading = xlwt.easyxf("""
            font:
                name Arial,
                colour_index white,
                bold on,
                height 0xA0;
            align:
                wrap off,
                vert center,
                horiz center;
            pattern:
                pattern solid,
                fore-colour 0x19;
            borders:
                left THIN,
                right THIN,
                top THIN,
                bottom THIN;
            """
                                   )
        style_body = xlwt.easyxf("""
            font:
                name Arial,
                bold off,
                height 0XA0;
            align:
                wrap on,
                vert center,
                horiz left;
            borders:
                left THIN,
                right THIN,
                top THIN,
                bottom THIN;
            """
                             )
        fmts = [
            'M/D/YY',
        ]
        style_body.num_format_str = fmts[0]

        # 写标题栏

        sheet.write(0, 0, '日期', style_heading)
        sheet.write(0, 1, '渠道名称', style_heading)
        sheet.write(0, 2, '激活数', style_heading)
        sheet.write(0, 3, '提单数', style_heading)
        sheet.write(0, 4, '放款数', style_heading)
        sheet.write(0, 5, '放款金额', style_heading)
        sheet.write(0, 6, '退款数', style_heading)
        sheet.write(0, 7, '退款金额', style_heading)

        # 写数据

        row = 1
        for day_dct in day_info_list:
            for day,day_info in day_dct.items():
                sheet.write(row, 0, day_info['date'], style_body)
                sheet.write(row, 1, day_info.get('channel_name','全部'), style_body)
                sheet.write(row, 2, day_info['active_count_day'], style_body)
                sheet.write(row, 3, day_info['bill_count_day'], style_body)
                sheet.write(row, 4, day_info['loan_count_day'], style_body)
                sheet.write(row, 5, day_info.get('loan_money_day','0'), style_body)
                sheet.write(row, 6, 0,)
                sheet.write(row, 7, 0)
            row = row + 1
        filename=filename+'.xls'
        output = BytesIO()
        wb.save(output)

        logger.info(filename)   #日志获取文件信息
        response = HttpResponse(content_type='application/vnd.ms-excel')   # 设置HttpResponse的类型
        response['Content-Disposition'] = 'attachment;filename=%s'%filename
        response.write(output.getvalue())

        return response
    except Exception:
        ret_error = {'code': 404}
        import json
        ret_error = json.dumps(ret_error)
        return HttpResponse(ret_error)
View Code

 

posted @ 2018-04-28 17:04  forjie  阅读(116)  评论(0)    收藏  举报