Python+Django+SQLite 制作TO-DO list(二、模型部分)

1、铺一个垫

在现如今的Web应用中,与数据库的交互已经成了必不可少的部分。 在用户访问网站的过程中,网站通过后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用漂亮的格式展示这些数据。这个网站也可能会向访问者提供修改数据库数据的方法(通俗的理解就是提供用户名的更改、用户头像的更改等操作)。

由于先天具备 Python 简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站。Django 的设计鼓励松耦合及对应用程序中不同部分的严格分割。 遵循这个理念的话,要想修改应用的某部分而不影响其它部分就比较容易了。

2、一般网站的MVC模式:

把数据存取逻辑、业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller(MVC)模式。

在这个模式中。

  • Model 代表数据存取层;
  • View 代表的是系统中选择显示什么和怎么显示的部分;
  • Controller 指的是系统中根据用户输入并视需要访问模型,以决定使用哪个视图的那部分;

Django 紧紧地遵循这种 MVC 模式,可以称得上是一种 MVC 框架

以下是 DjangoM、VC 各自的含义:

  • M:数据存取部分,由django数据库层处理。
  • V:选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。
  • C:根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适当的Python 函数。

由于 C 由框架自行处理,而 Django 里更关注的是模型(Model)、模板(Template)和视图(Views)。因此,Django 也被称为 MTV 框架 。

在 MTV 开发模式中:

  • M 代表模型(Models),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
  • T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
  • V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。(以上内容转自https://blog.csdn.net/hcx25909/article/details/24251427

接下来到轮到我登场啦

3、分析models.py

在Todolist中,models.py定义如代码所示:

from django.db import models
from django.contrib.auth.models import AbstractUser
from datetime import datetime

#导入AbstractUser
class UserProfile(AbstractUser):
    '''
    继承Django的AbstractUser 并向里面添加数据内容
    '''
    gender = models.CharField(max_length=6,choices=(('male','男'),('female','女')),default='female',verbose_name='性别')
    memo = models.TextField(null=True, blank=True,verbose_name='便签')
    class Meta:
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name #指定模型的复数形式是什么,如果不指定Django会自动在模型名称后加一个’s’

class UserTodo(models.Model):
    deadline = models.DateTimeField(default=datetime.now(),verbose_name='截至时间')
    user_email = models.ForeignKey(UserProfile,on_delete=models.CASCADE)  #设置外键,关联到UserProfile表
    ToDolist = models.CharField(max_length=255,verbose_name='todo')
    done = models.BooleanField(default=False,verbose_name='完成状态')
    class Meta:
        verbose_name = '用户自增信息'
        verbose_name_plural = verbose_name

其中

UserProfile为用户信息的模型,它继承自AbstractUser,具体用法可以参考这篇博客《Django的AbstractUser》

也就是在原来Django所包含的信息中新增了gender数据、memo数据;

UserTodo为用户todo列表模型,按照Django的常规方法继承自models.Model。它包含完成时间deadline,user_email(利用外键关联到UserProfile中),用户ToDolist,完成状态done。模型相关参数的使用方法可以参考这篇博客《Django之models.py》以及Django外键ForeignKey中的on_delete》

这里解释一下为什么将memo和todo分离开:

我的想法是当前用户只有一个memo,但是可以有多条todo,memo在下次登陆的时候还可以显示上一次的memo,所以将memo单独设置到UserProfile中,而将todo部分单独新建一个模型。

项目github地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值