Flutter&Python项目实战: 从0到1实现背单词App(2) 后端环境的搭建

375 阅读2分钟

不要犯同样的错误,尝试犯新的错误.

1. 后端环境

作者开发环境是 Mac(非M处理器)+PyCharm专业版.

大家按照以下配置检查环境:

  • python版本: Python 3.10.4(python3 --version), 一般来说3.x都是可以的.
  • 其他依赖:
asgiref==3.5.1
async-timeout==4.0.2
certifi==2022.5.18.1
cffi==1.15.0
charset-normalizer==2.0.12
cryptography==37.0.2
Deprecated==1.2.13
Django==4.0.4
django-filter==21.1
django-redis==5.2.0
djangorestframework==3.13.1
djangorestframework-camel-case==1.3.0
idna==3.3
mysqlclient==2.1.0
packaging==21.3
pycparser==2.21
PyMySQL==1.0.2
pyparsing==3.0.9
pytz==2022.1
qiniu==7.7.1
redis==4.3.3
requests==2.27.1
sqlparse==0.4.2
urllib3==1.26.9
wrapt==1.14.1

大家可以在根目录新建一个 requirements.txt 文件, 将上面的依赖复制到文件内, 然后调用pip install -r requirements.txt安装.

2. settings配置

大家创建完项目后(建议使用pycharm创建), 这里我们要解决如下几个问题:

  • 创建业务app(django中的术语, 一个项目包含若干application).
  • django中的基本配置, 如数据库, 路由.
  • django中restframework的基本配置.

2.1 创建业务app

直接通过django命令来完成.

# 构建一个叫api的application, 顾名思义是用来为前端提供api的
python manage.py startapp api

2.2 配置数据库, 路由等

在backend.settings中进行如下配置:

# 将刚才创建的app添加到安装列表
INSTALLED_APPS = [
    'api.apps.ApiConfig', 
    ...
]

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 我这里用的mysql
        'NAME': 'fisher',  # 实际创建的数据库名称
        'HOST': '127.0.0.1',
        'USER': 'xxx',
        'PASSWORD': 'xxxxx' # 用户名和密码请根据实际修改
    }
}

# 配置单词本保存路径, 大家根据实际路径配置
MEDIA_ROOT = '/Users/qiangchen/Desktop/fisher/upload/'
MEDIA_URL = 'upload/' # 用来构建下载路径

# restframework 配置
REST_FRAMEWORK = {
    'UNAUTHENTICATED_USER': None, 
    'UNAUTHENTICATED_TOKEN': None,
    'DEFAULT_PAGINATION_CLASS': 'api.common.pagination.Pagination',
    'PAGE_SIZE': 10, # 默认每页数据量
    'DEFAULT_RENDERER_CLASSES': ( # 后端一般使用下划线命名, 前端使用驼峰, 这里用这个插件处理下
        'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
        'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer',
    ),
    'DEFAULT_PARSER_CLASSES': (
        'djangorestframework_camel_case.parser.CamelCaseFormParser',
        'djangorestframework_camel_case.parser.CamelCaseMultiPartParser',
        'djangorestframework_camel_case.parser.CamelCaseJSONParser'
    )
}

其他配置, 按照默认的来就行了, 下面将进行第一次数据库构建, 主要是为了创建一些django需要的默认表:

python manage.py makemigrations api # 构建迁移文件

python manage.py migrate # 执行迁移

后面我们将使用"数据库迁移或"迁移"来表示上面两个步骤.

3. 划分开发环境和生产环境

如果只是为了本地练手, 这一步不是必须的, 但是如果为了以后部署上线, 区分环境是必要的. 这里通过添加settings_product.py来配置生产环境的设置:

# settings_product.py
from backend.settings import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'fisher',
        'HOST': '127.0.0.1',
        'USER': 'xxxx',
        'PASSWORD': 'xxxxxx'
    }
}

接下来, 需要我们通过一个枚举来区分和切换环境, 在manage.py中添加如下代码:

# manage.py
...

class Environment(Enum):
    LOCAL = 'backend.settings_base'
    PRODUCT = 'backend.settings_product'


environment = Environment.LOCAL # 当前是本地环境


def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', environment.value)
    ...

...

4. 运行

在运行之前请大家检查一下:

  • mysql是否已经启动.
  • 本地数据库是否已经创建.

如果都已确认, 使用django命令来启动服务(或者直接点击右上角运行按钮):

python manage.py runserver

代码已开源: github.com/oooooocean/…, 如果觉得有帮助, 请给个Star, 鼓励下作者.

如果大家在创建数据库, 启动服务上有任何问题或者报错, 可以加群讨论: