使用flask开发测试平台02-项目结构
目录结构
这篇说一说怎么来组织项目结构,首先我们打开编辑器,vscode和pycharm都行。
flytest
.
├── app
│ ├── choices.py
│ ├── core # 核心文件,如三方插件,celery
│ ├── __init__.py
│ ├── models.py # 模型文件
│ ├── request.py # 请求
│ ├── settings # 设置
│ ├── static # 静态资源
│ ├── templates # jinja2模板
│ ├── utils.py # 工具类
│ └── views # 视图
├── flytest.py # 主运行文件
├── logs # 日志
├── media # 上传文件存储
└── requirements.txt
我们先按照该目录搭建一个我们项目的脚手架。
我们上一章节的模型文件就在models.py
文件中放着
然后我们使用命令创建python虚拟环境python -m venv env
,这里我选择的python版本是3.8.6版本。
安装依赖项
以下是requirements.txt
文件中我们本项目要使用的依赖包。
alembic==1.5.3
amqp==5.0.6
APScheduler==3.7.0
asgiref==3.4.1
astroid==2.6.1
autopep8==1.5.5
billiard==3.6.4.0
blinker==1.4
celery==5.1.2
certifi==2020.12.5
chardet==4.0.0
click==7.1.2
click-didyoumean==0.0.3
click-plugins==1.1.1
click-repl==0.2.0
dnspython==1.16.0
eventlet==0.30.2
Faker==8.10.1
Flask==2.0.1
Flask-APScheduler==1.11.0
Flask-Avatars==0.2.2
Flask-Caching==1.9.0
Flask-Limiter==1.4
Flask-Login==0.5.0
Flask-Mail==0.9.1
Flask-Migrate==2.6.0
Flask-Moment==0.11.0
Flask-SQLAlchemy==2.4.4
flask-whooshee==0.7.0
greenlet==1.0.0
gunicorn==20.0.4
idna==2.10
isort==5.9.1
itsdangerous==2.0.1
Jinja2==3.0.1
kombu==5.1.0
lazy-object-proxy==1.6.0
limits==1.5.1
Mako==1.1.4
MarkupSafe==2.0.1
mccabe==0.6.1
mysqlclient==2.0.3
Pillow==8.1.0
pip-autoremove==0.9.1
prompt-toolkit==3.0.20
pycodestyle==2.6.0
pydocstyle==5.1.1
pygal==2.4.0
pylint==2.9.0
python-dateutil==2.8.1
python-dotenv==0.15.0
python-editor==1.0.4
pytz==2021.1
redis==3.5.3
requests==2.25.1
six==1.15.0
snowballstemmer==2.1.0
SQLAlchemy==1.3.23
text-unidecode==1.3
toml==0.10.2
tzlocal==2.1
urllib3==1.26.3
vine==5.0.0
watchdog==1.0.2
wcwidth==0.2.5
Werkzeug==2.0.1
Whoosh==2.7.4
wrapt==1.12.1
我们创建好虚拟环境之后,使用命令pip install -r requirements.txt
进行依赖包的安装。
依赖项
上一章节说到我们在模型文件中使用了flask-login和flask-avatars这两个库。
所以我们需要在app/core/extensions.py
文件中进行注册。
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_avatars import Avatars
db = SQLAlchemy()
mail = Mail()
avatars = Avatars()
当然还有很多的依赖项这里没有列举
设置
然后我们设置settings.py
文件添加项目配置。
import os
from flytest import BASE_DIR
DEBUG = True
SECRET_KEY = os.getenv('SECRET_KEY', "ahJ#5UoEg9x1T&@n")
PER_PAGE_SIZE = 10
DB_SERVER = os.getenv("DB_SERVER", "127.0.0.1")
SQLALCHEMY_ECHO = True
SQLALCHEMY_RECORD_QUERIES = True
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_DATABASE_URI = "mysql://root:root1234@%s:3306/flytest" % DB_SERVER
# email
MAIL_SERVER = os.getenv("MAIL_SERVER", 'smtp.126.com')
MAIL_PORT = os.getenv("MAIL_PORT", 25)
MAIL_USERNAME = os.getenv("MAIL_USERNAME", 'twxhou@126.com')
MAIL_PASSWORD = os.getenv("MAIL_PASSWORD", 'GQWJDUKVWNOJLPOH')
MAIL_DEFAULT_SENDER = (os.getenv("MAIL_DEFAULT_SENDER", 'WXTEST Admin'), MAIL_USERNAME)
# cache
CACHE_CONFIG = {
'CACHE_TYPE': "redis", # Flask-Caching related configs
'CACHE_REDIS_HOST': DB_SERVER,
'CACHE_REDIS_PORT': 6379,
"CACHE_DEFAULT_TIMEOUT": 600
}
AVATARS_SAVE_PATH = os.path.join(BASE_DIR, 'media', 'avatars')
IMAGES_PATH = os.path.join(BASE_DIR, 'media', 'images')
VIDEOS_PATH = os.path.join(BASE_DIR, 'media', 'videos')
AUDIOS_PATH = os.path.join(BASE_DIR, 'media', 'audios')
FLASK_LOGGER_FILE = os.path.join(BASE_DIR, 'logs', 'server.log')
CAPTCHA_FONT_FILE = os.path.join(BASE_DIR, 'media', 'fonts', 'arial.ttf')
# crontab-config
SCHEDULER_API_ENABLED = True
SCHEDULER_TIMEZONE = 'Asia/Shanghai'
SCHEDULER_EXECUTORS = {
'default': {'type': 'threadpool', 'max_workers': 20}
}
SCHEDULER_JOB_DEFAULTS = {
'coalesce': False,
'max_instances': 3
}
先配置到这里吧,下一篇先写一个注册页面。
随风挥手 ——土木狗的IT生涯 | 群: 299524235 |