接口开发实战基于Django的学院信息管理模块后台开发
Posted 黑黑白白君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口开发实战基于Django的学院信息管理模块后台开发相关的知识,希望对你有一定的参考价值。
本项目基于Django。由于是接口相关开发,暂时不涉及前端的开发。后端使用mysql进行数据的存储以及增删改查等操作。
文章目录
1)什么是Django?
Django是用python开发的一个免费开源的Web框架,提供了许多网站后台开发常用到的模块,使开发者能够专注于业务部分。
- Django 的功能相对最完整,定义了服务发布、路由映射、模板编程、数据处理的一整套功能。
- Django 借鉴了经典的 MVC 模式,也将交互的过程分为了 3 个层次,即 MTV 设计模式:Model、Template、View。
- 详细介绍可参考《【实战学习(三)】开源项目学习之Django框架简介以及启动》。
2)项目简介
学生信息管理系统:
- 功能:收集学生的个人信息,以便向老师提供每个学生在校或毕业生学籍的情况,还可以让学生用自己的学号去查看自己在校期间的表现。
- 相关数据库:学生信息、课程信息、学院信息。
学院信息管理模块接口:
- 功能:管理学院信息,支持学院信息的增删改查。
3)开发环境部署
1、Python、Pycharm的安装
2、Django以及其他库的安装
为了避免影响其他项目版本依赖,选择在虚拟环境中安装。
- 虚拟环境的介绍以及在虚拟环境中安装Django同样可参考《【实战学习(二)】开源项目学习之准备工作》。
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镜像
4)用Django创建项目
4.1 使用命令行创建项目
安装 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(完成创建)
4.2 创建APP(应用)
Django一个项目(project)由多个应用(app)组成。Django的APP可以理解为一个网站中的一个模块,我们可以将每个模块都单独写成一个APP,这样可以让项目变得相对整洁且更加好维护起来。
创建原理基本和创建项目一样,python manage.py startapp app的名字
。
- 完整删除的方法可参考:https://blog.csdn.net/huochen1994/article/details/52680067
创建完成后,需要进行相关的配置:
1、在settings.py里注册该app
在settings.py里注册app,即把app加到项目配置(settings.py)中的INSTALLED_APPS里。
- 可以选择直接添加app名,在大多数情况下,把app名直接加入到INSTALLED_APPS就足够了。
- 还可以添加该app对应的配置AppConfig子类,只有当需要给app自定义配置信息时,就需要把加入app对应的AppConfig子类路径直接加入到INSTALLED_APPS。
*INSTALLED_APPS的作用
INSTALLED_APPS帮助django同步数据库、运行测试、使url正常工作以及解决更多相关问题。
- INSTALLED_APPS注册应用是为了和models.py里的模型/数据库交互使用的,不注册的话正常访问的是view,只要不和models.py有关联都可以正常访问没有影响。
2、定义models
Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。Django为这些数据库提供了统一的调用API。
3、配置Django使用mysql数据库
Django默认数据库引擎为sqlite3,除了sqlite3,还支持postgresql、mysql、oracle。
在settings.py的DATABASES下进行修改:
- 将ENGINE中的sqlite3改为mysql
- mysql的相关配置
然后还需要在与 settings.py 同级目录下的 init.py 中引入模块和进行配置:
4、将models.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
:- 首先,django会检查创建或修改数据库的合法性,如果不合法会给出提示,比如CharField必须设置max_length,新增了没有默认值的非空字段。
- 第一次执行该操作:会在app下面创建migrations目录,并创建0001_inital.py文件,文件中记录了当前的建表、依赖等信息。
- 下一次执行该操作:如果有关于model.py的改动,会在migrations下生成已修改内容为名,类似0002_alter_permission_name_max_length.py的文件,文件中记录了你修改字段等信息。如果没有改动则提示:No changes detected。
- 注意:这些改动在此时都没有迁移到数据库!
-
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)
4.3 编写views
后台的主要实现逻辑都定义在此处。
因为牵扯到接口开发,故一并在下一篇《【接口开发实战(二)】学院信息管理模块接口开发》中展开描述。
【部分内容参考自】
- Django 教程: https://www.runoob.com/django/django-tutorial.html
- Django的INSTALLED_APPS中应该写app名,还是AppConfig子类?:https://zhuanlan.zhihu.com/p/220440450
- Django1.8.3 未在INSTALLED_APPS里添加新引用,依然可以正常访问?:https://segmentfault.com/q/1010000003100424
- django migration详解:https://blog.csdn.net/weixin_33127753/article/details/90717038
以上是关于接口开发实战基于Django的学院信息管理模块后台开发的主要内容,如果未能解决你的问题,请参考以下文章
送书 | Django实战 Python Web典型模块与项目开发