【接口开发实战(一)】基于Django的学院信息管理模块后台开发

本项目基于Django。由于是接口相关开发,暂时不涉及前端的开发。后端使用MySQL进行数据的存储以及增删改查等操作。


1)什么是Django?

Django是用python开发的一个免费开源的Web框架,提供了许多网站后台开发常用到的模块,使开发者能够专注于业务部分。


2)项目简介

学生信息管理系统:

  • 功能:收集学生的个人信息,以便向老师提供每个学生在校或毕业生学籍的情况,还可以让学生用自己的学号去查看自己在校期间的表现。
  • 相关数据库:学生信息、课程信息、学院信息。

学院信息管理模块接口:

  • 功能:管理学院信息,支持学院信息的增删改查。

3)开发环境部署

1、Python、Pycharm的安装

可参考《【实战学习(二)】开源项目学习之准备工作》

2、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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值