本项目基于Django。由于是接口相关开发,暂时不涉及前端的开发。后端使用MySQL进行数据的存储以及增删改查等操作。
Django是用python开发的一个免费开源的Web框架,提供了许多网站后台开发常用到的模块,使开发者能够专注于业务部分。
可参考《【实战学习(二)】开源项目学习之准备工作》。
为了避免影响其他项目版本依赖,选择在虚拟环境中安装。
requirements.txt的内容:
certifi==2017.11.5
chardet==3.0.4
coreapi==2.3.3
coreschema==0.0.4
Django==1.11
djangorestframework==3.7.3
idna==2.6
itypes==1.1.0
Jinja2==2.10
MarkupSafe==1.1.1
pytz==2017.3
requests==2.18.4
uritemplate==3.0.0
urllib3==1.22
PyMySQL==0.7.11
C:\Users\Facek>workon //查看当前有哪些虚拟环境
Pass a name to activate one of the following virtualenvs:
==============================================================================
apitest
myproject
C:\Users\Facek>mkvirtualenv depapi # 新建所需的虚拟环境
created virtual environment CPython3.7.9.final.0-64 in 3843ms
creator CPython3Windows(dest=C:\Users\Facek\Envs\depapi, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\Facek\AppData\Local\pypa\virtualenv)
added seed packages: pip==21.0.1, setuptools==56.1.0, wheel==0.36.2
activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
(depapi) C:\Users\Facek>pip -V # 查看虚拟环境中pip的版本
pip 21.0.1 from C:\Users\Facek\Envs\depapi\lib\site-packages\pip (python 3.7)
(depapi) C:\Users\Facek>pip list # 查看当前已有的安装包
Package Version
---------- -------
pip 21.0.1
setuptools 56.1.0
wheel 0.36.2
(depapi) C:\Users\Facek\Desktop\学习\实战\depapi>pip install -r requirements.txt --default-timeout=100 -i http://pypi.mirrors.ustc.edu.cn/simple/ --trusted-host pypi.mirrors.ustc.edu.cn # 通过requirements.txt安装库,--default-timeout避免超时问题,使用中国科学技术大学的pypi镜像
安装 Django 之后,应该就已经有了可用的管理工具 django-admin,Windows 如果没有配置环境变量可以用django-admin。
django-admin startproject 项目名称
(depapi) C:\Users\Facek\Desktop\学习\实战\depapi>django-admin startproject depapi
(depapi) C:\Users\Facek\Desktop\学习\实战\depapi>tree /F # 打印该指定目录的文件树状结构图,/F 显示每个文件夹中文件的名称。
卷 Windows 的文件夹 PATH 列表
卷序列号为 709F-EA84
C:.
│ requirements.txt
│
└─depapi
│ manage.py # 一个实用的命令行工具,以各种方式与该 Django 项目进行交互
│
└─depapi # 项目的容器
settings.py # 该 Django 项目的设置/配置
urls.py # 该 Django 项目的URL声明,一份由 Django 驱动的网站"目录"
wsgi.py # 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目
__init__.py
可以通过python manage.py runserver 0.0.0.0:8000运行,检查项目是否正常创建。
也可以用Pycharm创建项目:file —> new project ---- 选择Django —> 配置路径和项目名称 —> 配置环境(默认用系统环境) ----> 点击create(完成创建)
Django一个项目(project)由多个应用(app)组成。Django的APP可以理解为一个网站中的一个模块,我们可以将每个模块都单独写成一个APP,这样可以让项目变得相对整洁且更加好维护起来。
创建原理基本和创建项目一样,python manage.py startapp app的名字
。
创建完成后,需要进行相关的配置:
在settings.py里注册app,即把app加到项目配置(settings.py)中的INSTALLED_APPS里。
*INSTALLED_APPS的作用
INSTALLED_APPS帮助django同步数据库、运行测试、使url正常工作以及解决更多相关问题。
- INSTALLED_APPS注册应用是为了和models.py里的模型/数据库交互使用的,不注册的话正常访问的是view,只要不和models.py有关联都可以正常访问没有影响。
Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。Django为这些数据库提供了统一的调用API。
Django默认数据库引擎为sqlite3,除了sqlite3,还支持postgresql、mysql、oracle。
在settings.py的DATABASES下进行修改:
然后还需要在与 settings.py 同级目录下的 init.py 中引入模块和进行配置:
需要注意的是,Django ORM 无法操作到数据库级别,只能操作到数据表,因此要自己手动创建MySQL数据库。
mysql> show databases; //查看已有数据库
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 174
Current database: studentmanagementsystem
+-------------------------+
| Database |
+-------------------------+
| information_schema |
| dailyfresh |
| learn1 |
| mysql |
| performance_schema |
| studentmanagementsystem |
| sys |
| test |
+-------------------------+
8 rows in set (0.04 sec)
mysql> create database depapi; //创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+-------------------------+
| Database |
+-------------------------+
| information_schema |
| dailyfresh |
| depapi |
| learn1 |
| mysql |
| performance_schema |
| studentmanagementsystem |
| sys |
| test |
+-------------------------+
9 rows in set (0.00 sec)
将models.py下的模型转换为数据表,要用命令来执行:
(depapi) C:\Users\Facek\Desktop\学习\实战\depapi\depapi>python manage.py makemigrations //makemigration生成ddl(数据库模式定义语言)
Migrations for 'dep':
dep\migrations\0001_initial.py
- Create model ClassInfo
- Create model DepartmentInfo
- Create model StudentInfo
- Add field dep to classinfo
(depapi) C:\Users\Facek\Desktop\学习\实战\depapi\depapi>python manage.py migrate //migrate执行ddl
Operations to perform:
Apply all migrations: admin, auth, contenttypes, dep, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
...
python manage.py makemigrations
:
python manage.py migrate
:将改动迁移到数据库,完成建表、修改字段等操作,操作成功后会在数据库django_migrations表中添加一条数据,表示migration文件已迁移。
此时查看该数据库,会发现除了在模型中定义的表外,其他都是管理员生成的表:
mysql> use depapi;
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_depapi |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| dep_classinfo |
| dep_departmentinfo |
| dep_studentinfo |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
13 rows in set (0.00 sec)
后台的主要实现逻辑都定义在此处。
因为牵扯到接口开发,故一并在下一篇《【接口开发实战(二)】学院信息管理模块接口开发》中展开描述。
【部分内容参考自】