Django 小实例S1 简易学生选课管理系统 第3节——创建用户模型(model)

点击查看教程总目录

作者自我介绍:b站小UP主时常直播编程+红警三python1对1辅导老师

本文涉及到的新的额外知识点:models

没有这部分基础的读者,建议一边阅读本文一边查阅相关知识

这里推荐我的专栏:Django自学笔记 第四章内容

数据库表的设计已在本专栏之前的博客做好了:一、项目流程梳理与数据库设计

这里对于用户模块,需要学生表和教师表,

那么对应的,这里需要建立两种模型:学生(Student),教师(Teacher)

模型的添加和修改要在对应appmodels.py中进行

首先,打开项目下的./user/models.py文件

其初始内容如下:

from django.db import models

# Create your models here.

其中第一行导入了models类,如果你的models.py文件没有导入,请添加这一行

同时开始添加自己的模型代码后,最好把第三行的注释删掉

1 添加学生模型

models.py中添加如下代码即可

class Student(models.Model):
genders = [
("m", "男"),
("f", "女")
] name = models.CharField(max_length=50, verbose_name="姓名")
gender = models.CharField(max_length=10, choices=genders, default='m', verbose_name="性别")
birthday = models.DateField(verbose_name="生日")
email = models.EmailField(verbose_name="邮箱")
info = models.CharField(max_length=255, verbose_name="个人简介", help_text="一句话介绍自己,不要超过250字") grade = models.CharField(max_length=4, verbose_name="年级")
number = models.CharField(max_length=6, verbose_name="年级子学号")
password = models.CharField(max_length=30, verbose_name="密码") class Meta:
constraints = [
# 复合主键:保证 grade和number组合的student_id唯一
models.UniqueConstraint(fields=['grade', 'number'], name='student_id'),
] def get_id(self):
return "%s%s" % (self.grade, self.number) def __str__(self):
return "%s (%s)" % (self.get_id(), self.name)

说明:学生年级号为4位数字组成的字符串,年级下子学号为6位数字组成的字符串。

这两个连接起来组成学生的唯一学号,该学号也为其登录使用的账号。

比如学生李大爽,年级号为"2020",子学号为"000001",其学号为"2020000001"

2 添加老师模型

models.py中继续添加如下代码即可

class Teacher(models.Model):
genders = [
("m", "男"),
("f", "女")
] name = models.CharField(max_length=50, verbose_name="姓名")
gender = models.CharField(max_length=10, choices=genders, default='m', verbose_name="性别")
birthday = models.DateField(verbose_name="生日")
email = models.EmailField(verbose_name="邮箱")
info = models.CharField(max_length=255, verbose_name="教师简介", help_text="不要超过250字") department_no = models.CharField(max_length=3, verbose_name="院系号")
number = models.CharField(max_length=7, verbose_name="院内编号")
password = models.CharField(max_length=30, verbose_name="密码") class Meta:
constraints = [
# 复合主键:保证 grade和number组合的student_id唯一
models.UniqueConstraint(fields=['department_no', 'number'], name='teacher_id'),
] def get_id(self):
return "%s%s" % (self.department_no, self.number) def __str__(self):
return "%s (%s)" % (self.get_id(), self.name)

说明:老师院系号为3位数字组成的字符串,院内编号为7位数字组成的字符串。

这两个连接起来组成老师的唯一教师号,该教师号也为其登录使用的账号。

比如老师牛有力,院系号为"266",院内编号为"0000001",其教师号为"2660000001"

3 建立(更新)数据库

在django框架下,并不是添加好模型(model)就万事大吉了

添加好模型后,我们还需要手动执行脚本,才能根据模型生成对应的数据库表。

在项目文件夹下,打开命令行,按行依次执行:

python manage.py makemigrations
python manage.py migrate

解释下上面这两句的作用

其中第1句会生成对应的迁移(migrations)命令。

具体到本项目,由于是第一次运行,

那么会在./user/migrations文件夹下,

生成0001_initial.py用于记录迁移(migrations)命令

第一次运行也会在项目文件夹下,生成一个空的 database:db.sqlite3

第2句会执行第一句中生成的迁移(migrations)命令。

执行完第二句,改动才真正更新到数据库文件了。

对应到本项目,就是数据库中添加了两个模型(学生、老师)对应的数据库表。

当然,实际上,数据库中的改动并不是简单的添加了这两个模型的事,有兴趣的朋友可以打开此时的db.sqlite3看看。无法直接打开,需要使用对应的软件,我一般用DB Browser (SQLite),里面生成了很多个表,不过这个细说起来就复杂了。

以后我们如果修改了模型的属性之类,也要执行上面两句脚本去更新对应的数据库表。

Django 小实例S1 简易学生选课管理系统 3 创建用户模型(model)的更多相关文章

  1. Django 小实例S1 简易学生选课管理系统 9 创建课程模型(model)

    Django 小实例S1 简易学生选课管理系统 第9节--创建课程模型(model) 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 对于课程模块, ...

  2. Django 小实例S1 简易学生选课管理系统 12 CSS样式完善

    Django 小实例S1 简易学生选课管理系统 第12节--CSS样式完善 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块的逻辑代码到这里 ...

  3. Django 小实例S1 简易学生选课管理系统 11 学生课程业务实现

    Django 小实例S1 简易学生选课管理系统 第11节--学生课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,学生需要拥 ...

  4. Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现

    Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...

  5. Django 小实例S1 简易学生选课管理系统 8 CSS样式优化

    Django 小实例S1 简易学生选课管理系统 第8节--CSS样式优化 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 前面的几节下来,用户模块基 ...

  6. Django 小实例S1 简易学生选课管理系统 7 修改个人信息

    Django 小实例S1 简易学生选课管理系统 第7节--修改个人信息 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 用户模块除了注册登录之外,还 ...

  7. Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑

    Django 小实例S1 简易学生选课管理系统 第6节--实现登录逻辑 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 业务逻辑 本教程第四节里 ...

  8. Django 小实例S1 简易学生选课管理系统 2 新建项目(project)并进行设置

    Django 小实例S1 简易学生选课管理系统 第2节--新建项目(project)并进行设置 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 0 ...

  9. Django 小实例S1 简易学生选课管理系统 4 实现登录页面

    Django 小实例S1 简易学生选课管理系统 第4节--实现登录页面 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新的额外知识点: ...

随机推荐

  1. Python isinstance() 函数 Python 内置函数 Python 内置函数

    描述 isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关 ...

  2. 1. JVM核心类加载器及类加载的全过程

    运行环境: 下面说明一下我的运行环境.我是在mac上操作的. 先找到mac的java地址. 从~/.bash_profile中可以看到 java的home目录是: /Library/Java/Java ...

  3. spring boot处理跨域请求代码

    @Configuration @WebFilter(filterName = "CorsFilte") public class CorsFilter implements Fil ...

  4. NOIP模拟69

    T1 石子游戏 大坑未补 T2 大鱼吃小鱼 解题思路 set+桶可以得到 60pts (code) 线段树上二分每一次优先递归右区间从右区间贪心选择,并且记录下更改过的值,在处理完答案之后再复原回去. ...

  5. CSharp委托与匿名函数

    CSharp委托与匿名函数 场景 面对事件处理,我们通常会通过定义某一个通用接口,在该接口中定义方法,然后在框架代码中,调用实现该接口的类实例的方法来实现函数的回调.可能这样来说有些抽象,那我们提供一 ...

  6. windows中抓包命令,以及保存为多个文件的方法

    本文主要介绍windows中抓包命令,以及保存为多个文件的方法 说一说保存为多个文件存储数据包这个问题的由来,一般如果长时间抓包,有可能需要等上几个小时,因为这个时候抓包的内容都是存放在内存中的,几个 ...

  7. 在Vue中使用JSX,很easy的

    摘要:JSX 是一种 Javascript 的语法扩展,JSX = Javascript + XML,即在 Javascript 里面写 XML,因为 JSX 的这个特性,所以他即具备了 Javasc ...

  8. DL4J实战之五:矩阵操作基本功

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. TCP 粘包 - 拆包问题及解决方案

    目录 TCP粘包拆包问题 什么是粘包 - 拆包问题 为什么存在粘包 - 拆包问题 粘包 - 拆包 演示 粘包 - 拆包 解决方案 方式一: 固定缓冲区大小 方式二: 封装请求协议 方式三: 特殊字符结 ...

  10. 1.2 Simple Code!(翻译)

    Simple Code! 简洁编码 Playing football is very simple, but playing simple football is the hardest thing ...