config.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. import os
  2. import random
  3. import string
  4. import logging
  5. from datetime import timedelta
  6. from dotenv import load_dotenv
  7. if os.path.exists(".env"):
  8. load_dotenv(".env", verbose=True)
  9. class BaseConfig:
  10. """基础配置"""
  11. # persist_directory = os.environ.get('PERSIST_DIRECTORY')
  12. # CG_TOKEN = os.getenv("CHATGPT_TOKEN", "your-chatgpt-token")
  13. SUPERADMIN = "admin"
  14. SYSTEM_NAME = "Pear Admin"
  15. # 主题面板的链接列表配置
  16. SYSTEM_PANEL_LINKS = [
  17. {
  18. "icon": "layui-icon layui-icon-auz",
  19. "title": "官方网站",
  20. "href": "http://www.pearadmin.com",
  21. },
  22. {
  23. "icon": "layui-icon layui-icon-auz",
  24. "title": "开发文档",
  25. "href": "http://www.pearadmin.com",
  26. },
  27. {
  28. "icon": "layui-icon layui-icon-auz",
  29. "title": "开源地址",
  30. "href": "https://gitee.com/Jmysy/Pear-Admin-Layui",
  31. },
  32. ]
  33. ASSETS_ROOT = os.getenv("ASSETS_ROOT", "/static/assets")
  34. STATIC_URL = "/static/"
  35. SECRET_KEY = os.getenv("SECRET_KEY", None)
  36. if not SECRET_KEY:
  37. SECRET_KEY = "".join(random.choice(string.ascii_lowercase) for i in range(32))
  38. # base
  39. PROJECT_NAME = "flask_blog"
  40. # 当前 config.py 文件目录
  41. DEBUG = False
  42. # 当前文件所在目录的绝对路径 /apps
  43. BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
  44. BASE_URL = "http://"
  45. ADMIN_EMAILS = ""
  46. # 分页
  47. POST_PER_PAGE = 8 # 每页文章数
  48. COMMENT_PER_PAGE = 10 # 每页评论数
  49. LANGUAGE_CODE = "zh-hans"
  50. TIME_ZONE = "PRC"
  51. UP_DIR = os.path.join(
  52. os.path.abspath(os.path.dirname(__file__)), "app/static/uploads/"
  53. ) # 文件上传路径
  54. FC_DIR = os.path.join(
  55. os.path.abspath(os.path.dirname(__file__)), "app/static/uploads/users/"
  56. ) # 用户头像上传路径
  57. UPLOADED_PHOTOS_DEST = "static/upload"
  58. UPLOADED_FILES_ALLOW = ["gif", "jpg"]
  59. UPLOADS_AUTOSERVE = True
  60. JSON_AS_ASCII = False
  61. # db
  62. SQLALCHEMY_TRACK_MODIFICATIONS = False
  63. DB_ENGINE = os.getenv("DB_ENGINE", None)
  64. DB_USERNAME = os.getenv("DB_USERNAME", None)
  65. DB_PASS = os.getenv("DB_PASS", None)
  66. DB_HOST = os.getenv("DB_HOST", None)
  67. DB_PORT = os.getenv("DB_PORT", None)
  68. DB_NAME = os.getenv("DB_NAME", None)
  69. USE_SQLITE = True
  70. # MSSQL: f"mssql+pymssql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=cp936"
  71. # MySQL: f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
  72. # Oracle: f"oracle+cx_oracle://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}"
  73. # SQLite "sqlite:/// database.db"
  74. # Postgres f"postgresql+psycopg2://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}"
  75. # Oracle的第二种连接方式
  76. # dsnStr = cx_Oracle.makedsn({HOSTNAME}, 1521, service_name='orcl')
  77. # connect_str = "oracle://%s:%s@%s" % ('{USERNAME}', ' {PASSWORD}', dsnStr)
  78. # 在SQLALCHEMY_BINDS 中设置:'{数据库连接别名}': '{连接串}'
  79. # 最后在models的数据模型class中,在__tablename__前设置 __bind_key__ = '{数据库连接别名}' 即可,表示该数据模型不使用默认的数据库连接,改用“SQLALCHEMY_BINDS”中设置的其他数据库连接
  80. # SQLALCHEMY_BINDS = {
  81. # 'testMySQL': 'mysql+pymysql://test:123456@192.168.1.1:3306/test?charset=utf8',
  82. # 'testMsSQL': 'mssql+pymssql://test:123456@192.168.1.1:1433/test?charset=cp936',
  83. # 'testOracle': 'oracle+cx_oracle://test:123456@192.168.1.1:1521/test',
  84. # 'testSQLite': 'sqlite:///database.db
  85. # }
  86. # if DB_ENGINE and DB_NAME and DB_USERNAME:
  87. # try:
  88. # # Relational DBMS: PSQL, MySql
  89. # SQLALCHEMY_DATABASE_URI = '{}://{}:{}@{}:{}/{}'.format(
  90. # DB_ENGINE,
  91. # DB_USERNAME,
  92. # DB_PASS,
  93. # DB_HOST,
  94. # DB_PORT,
  95. # DB_NAME
  96. # )
  97. # USE_SQLITE = False
  98. # except Exception as e:
  99. # print('> Error: DBMS Exception: ' + str(e) )
  100. # print('> Fallback to SQLite ')
  101. # if USE_SQLITE:
  102. # # This will create a file in <app> FOLDER
  103. # SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'db.sqlite3')
  104. # redis
  105. REDIS_HOST = os.getenv("REDIS_HOST", "localhost")
  106. REDIS_PORT = os.getenv("REDIS_PORT", 6379)
  107. REDIS_DB = os.getenv("REDIS_DB", 0)
  108. REDIS_PASSWORD = os.getenv("REDIS_PASSWORD", None)
  109. CELERY_BROKER_URL = "redis://{}:{}/{}".format(REDIS_HOST, REDIS_PORT, REDIS_DB)
  110. # mail
  111. MAIL_SERVER = os.getenv("MAIL_SERVER", "smtp.qq.com")
  112. MAIL_PORT = os.getenv("MAIL_PORT", 465)
  113. MAIL_USE_TLS = False
  114. MAIL_USE_SSL = True
  115. MAIL_DEBUG = True
  116. MAIL_USERNAME = os.getenv("MAIL_USERNAME", None)
  117. MAIL_PASSWORD = os.getenv("MAIL_PASSWORD", None) # 生成的授权码
  118. MAIL_DEFAULT_SENDER = MAIL_USERNAME
  119. # token配置
  120. TIMEOUT_TOKEN = 10 * 24 * 60 * 60
  121. TIMEOUT_EMAIL = 10 * 60
  122. PERMANENT_SESSION_LIFETIME = timedelta(hours=2)
  123. # log
  124. LOG_LEVEL = logging.WARN
  125. # 插件配置,填写插件的文件名名称,默认不启用插件。
  126. PLUGIN_ENABLE_FOLDERS = []
  127. # 七牛云
  128. QINIU_ACCESS_KEY = os.getenv("QINIU_ACCESS_KEY", None)
  129. QINIU_SECRET_KEY = os.getenv("QINIU_SECRET_KEY", None)
  130. QINIU_BUCKET_NAME = os.getenv("QINIU_BUCKET_NAME", None)
  131. # github
  132. GITHUB_CLIENT_ID = os.getenv("GITHUB_CLIENT_ID", None)
  133. GITHUB_CLIENT_SECRET = os.getenv("GITHUB_CLIENT_SECRET", None)
  134. if GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET:
  135. SOCIAL_AUTH_GITHUB = True
  136. @staticmethod
  137. def init_app(app):
  138. pass
  139. class DevelopmentConfig(BaseConfig):
  140. """开发环境配置, 开启调试模式, 使用 sqlite"""
  141. DEBUG = True
  142. SQLALCHEMY_TRACK_MODIFICATIONS = True
  143. # SQLALCHEMY_ECHO = True
  144. # SQLALCHEMY_COMMIT_ON_TEARDOWN = True
  145. SQLALCHEMY_DATABASE_URI = "sqlite:///../flask-note.sqlite3.db"
  146. class TestingConfig(BaseConfig):
  147. DEBUG = True
  148. class ProductionConfig(BaseConfig):
  149. DEBUG = False
  150. SQLALCHEMY_DATABASE_URI = (
  151. "mysql+pymysql://lyq:123456@ok.yoqi.me:13306/travel?charset=utf8"
  152. )
  153. # DB_ENGINE = os.getenv('DB_ENGINE' , None)
  154. # DB_USERNAME = os.getenv('DB_USERNAME' , None)
  155. # DB_PASS = os.getenv('DB_PASS' , None)
  156. # DB_HOST = os.getenv('DB_HOST' , None)
  157. # DB_PORT = os.getenv('DB_PORT' , None)
  158. # DB_NAME = os.getenv('DB_NAME' , None)
  159. # Security
  160. SESSION_COOKIE_HTTPONLY = True
  161. REMEMBER_COOKIE_HTTPONLY = True
  162. REMEMBER_COOKIE_DURATION = 3600
  163. config = {
  164. "default": DevelopmentConfig,
  165. "development": DevelopmentConfig, # 开发环境配置, 开启调试模式, 使用 sqlite
  166. # "testing": TestingConfig,
  167. "production": ProductionConfig,
  168. }