起田(苏州)营销策划有限公司Django项目公用底层框架.

qitian-module的Python项目详细描述


起田(苏州)营销策划有限公司DJANGO项目共用模块系统

Release Summery

1.7.9

  • 添加urls_prod, 项目引用时,直接包含此url路由
  • 添加qitian-simditor在项目依赖列表

配置文件settings

此项目包含基础项目配置,一般项目可以直接复制settings配置为基础配置。此配置会根据新加入的模块来修改,已有项目不要直接拷贝。

项目依赖文件

此项目的依赖文件要采用手动添加的方法,避免使用freeze方式。目的是为了让依赖项目简洁易读。

管理界面

管理界面使用grappelli,管理首页使用grappelli-dashboard

项目配置信息

APP列表

INSTALLED_APPS = [
    'grappelli.dashboard',
    'grappelli',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django_celery_beat',
    'django_celery_results',
    'smart_selects',
    'easy_thumbnails',
    'system',
    'simditor',
    'autopost',
    'usercenter',
    'taggit',
    'taggit_labels',
    'taggit_helpers',
]

在middleware中添加'system.middleware.site.CurrentSiteMiddleware', template.options添加 'system.context_processors.site_info',

静态文件等配置

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True

LANGUAGES = (
    ('en', ('English',)),
    ('zh-hans', ('中文简体',)),
)

# 翻译文件所在目录,需要手工创建
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    'static/',
]

STATIC_ROOT = 'pub_static/'
STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder"
)
# 静态文件版本,发布后,有js,css文件变动需更换
STATIC_VERSION = 0.1
# 项目支付设置
AES_KEY = env.str('AES_KEY')
PAY_PROJECT_ID = env.int('PAY_PROJECT_ID')
PAY_URL = 'https://pay.qitian.biz/pay/index/%d/' % PAY_PROJECT_ID
# SMS模板, 不同项目需要修改
SMS_TEMPLATE = {
    'register': '【娱乐信息网】亲爱的{name}贵宾,您的验证码是{code}。有效期为{time}分钟,请尽快验证',
    'notice': '【娱乐信息网】主人,客户:{name}已支付订单:{order},请您及时处理!',
    'reg_tel_admin': '【娱乐信息网】有手机号:{tel} 用户于{time}注册了{site}, 请尽快联系。',
}
SMS_TIMES = 3

# 设置用户属性
AUTH_PROFILE_MODULE = 'usercenter.QtUser'

# 接口定义
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 20,
    'page_query_param': 'page',
}

SHOW_TJ = env.bool('SHOW_TJ')

SITE_NAME = env.str('SITE_NAME')

GRAPPELLI_INDEX_DASHBOARD = 'dashboard.CustomIndexDashboard'

缓存与log设置

# 设置缓存
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            # "PASSWORD": "mysecret"
        }
    }
}

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': ('%(asctime)s [%(process)d] [%(levelname)s] ' +
                       'pathname=%(pathname)s lineno=%(lineno)s ' +
                       'funcname=%(funcName)s %(message)s'),
            'datefmt': '%Y-%m-%d %H:%M:%S',
        },
        'simple': {
            'format': '%(asctime)s [%(levelname)s] %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
        },
        'console-verbose': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        },
        'log_file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(BASE_DIR, 'django.log'),
            'maxBytes': 33554432,
            'formatter': 'verbose',
        },
        'celery': {
            # 'level': 'INFO',
            # 'class': 'logging.handlers.RotatingFileHandler',
            'level': 'DEBUG',
            'formatter': 'simple',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': 'celery.log',
            'when': 'midnight'
        },

    },
    'loggers': {
        'django': {
            'handlers': ['console', 'log_file'],
            'propagate': True,
            'level': 'INFO',
        },
        'qt_celery': {
            'handlers': ['celery'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}

#七牛配置

# 七牛配置
QINIU_ACCESS_KEY = 'r35LYq6an6L0FUAmDUhqDNXICbtZ5JI1vKWXBGKv'
QINIU_SECRET_KEY = '8GkmiCK4_RjGWLKcJtjIl_8RH9QdnvSI_ulo7Apu'
QINIU_URL = 'https://media.qitian.biz/'
QINIU_BUCKET = 'qitian'
QINIU_FOLDER = 'autopost'

SIMDITOR配置

#SIMDITOR配置
SIMDITOR_UPLOAD_PATH = 'uploads/'
SIMDITOR_IMAGE_BACKEND = 'pillow'

SIMDITOR_TOOLBAR = [
    'title', 'bold', 'italic', 'underline', 'strikethrough', 'fontScale',
    'color', '|', 'ol', 'ul', 'blockquote', 'code', 'table', '|', 'link',
    'image', 'hr', '|', 'indent', 'outdent', 'alignment', 'fullscreen',
    'markdown', 'emoji'
]

SIMDITOR_CONFIGS = {
    'toolbar': SIMDITOR_TOOLBAR,
    'upload': {
        'url': '/simditor/upload/',
        'fileKey': 'upload',
        'image_size': 1024 * 1024 * 4  # max image size 4MB
    },
    'emoji': {
        'imagePath': '/static/simditor/images/emoji/'
    }
}

urls.py中添加

re_path(r'^simditor/', include('simditor.urls')),

更新步骤

autopost模块需要删除: articlecategoryauthor 一定要先添加作者

部署添加前段支持

npm install -g vue-cli

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java查询,该查询应返回特定相关实体的实体   java创建了两个可运行的JAR,它们使用相同的库而不需要两次   java swing应用程序如何设置面板中组件的高度(和宽度)   在fat jar中找不到java JasperReport文件错误   kotlin在java中如何称呼这个构造函数?   java为什么被零除是一个不可恢复的问题?   java为SUTime添加用于解析季度的自定义规则   java merge 2带所有元素的排序列表   从字符串StringUtils Java中提取数字   java ForLoops最大和最小数   java我可以为嵌入式tomcat 8定义始终保持活动状态的最小executer线程数吗?   java当metod返回ResponseEntry<Resource>抛出错误时,如何返回ModelandView?   java片段翻译和电话定位错误   javagwt:如何让regex(模式和匹配器)在客户端工作   java EAR文件和“WebSphere增强的EAR”之间有什么区别?