创建 App

这里把所有 Model 划分为三类:blog 相关、配置相关和评论相关。这么分的好处是便于独立维护各个模块,也便于在开发时分配任务。

blog App

创建一个名为 blog 的 app

此使项目的目录结构如下:

先创建博客内容相关的模型,编写 blog/models.py 中的代码

  1. from django.contrib.auth.models import User
  2. from django.db import models
  3. class Category(models.Model):
  4. STATUS_NORMAL = 1
  5. STATUS_DELETE = 0
  6. STATUS_ITEMS = (
  7. (STATUS_NORMAL, '正常'),
  8. (STATUS_DELETE, '删除'),
  9. )
  10. name = models.CharField(max_length=50, verbose_name="名称")
  11. status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
  12. is_nav = models.BooleanField(default=False, verbose_name="是否为导航")
  13. owner = models.ForeignKey(User, verbose_name="作者", on_delete=models.DO_NOTHING)
  14. created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
  15. class Meta:
  16. verbose_name = verbose_name_plural = '分类'
  17. class Tag(models.Model):
  18. STATUS_NORMAL = 1
  19. STATUS_DELETE = 0
  20. STATUS_ITEMS = (
  21. (STATUS_NORMAL, '正常'),
  22. (STATUS_DELETE, '删除'),
  23. )
  24. name = models.CharField(max_length=10, verbose_name="名称")
  25. status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
  26. owner = models.ForeignKey(User, verbose_name="作者", on_delete=models.DO_NOTHING)
  27. created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
  28. class Meta:
  29. verbose_name = verbose_name_plural = '标签'
  30. class Post(models.Model):
  31. STATUS_NORMAL = 1
  32. STATUS_DELETE = 0
  33. STATUS_DRAFT = 2
  34. STATUS_ITEMS = (
  35. (STATUS_NORMAL, '正常'),
  36. (STATUS_DELETE, '删除'),
  37. (STATUS_DRAFT, '草稿'),
  38. )
  39. title = models.CharField(max_length=255, verbose_name="标题")
  40. desc = models.CharField(max_length=1024, blank=True, verbose_name="摘要")
  41. content = models.TextField(verbose_name="正文", help_text="正文必须为MarkDown格式")
  42. status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
  43. category = models.ForeignKey(Category, verbose_name="分类", on_delete=models.DO_NOTHING)
  44. tag = models.ManyToManyField(Tag, verbose_name="标签")
  45. owner = models.ForeignKey(User, verbose_name="作者", on_delete=models.DO_NOTHING)
  46. created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
  47. class Meta:
  48. verbose_name = verbose_name_plural = "文章"
  49. ordering = ['-id'] # 根据id进行降序排列

config APP

接下来,创建另外一个 config APP,它用来放置其他几个模型,blog App 用来放内容相关的数据,这个用来放配置相关的数据——侧边栏和友链。创建好之后,编写 config/models.py 中的代码:

  1. from django.contrib.auth.models import User
  2. from django.db import models
  3. class Link(models.Model):
  4. STATUS_NORMAL = 1
  5. STATUS_DELETE = 0
  6. STATUS_ITEMS = (
  7. (STATUS_NORMAL, '正常'),
  8. (STATUS_DELETE, '删除'),
  9. )
  10. title = models.CharField(max_length=50, verbose_name="标题")
  11. href = models.URLField(verbose_name="链接") # 默认长度200
  12. status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
  13. weight = models.PositiveIntegerField(default=1, choices=zip(range(1, 6), range(1, 6)),
  14. verbose_name="权重",
  15. help_text="权重高展示顺序靠前")
  16. owner = models.ForeignKey(User, verbose_name="作者", on_delete=models.DO_NOTHING)
  17. created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
  18. class Meta:
  19. verbose_name = verbose_name_plural = "友链"
  20. class SideBar(models.Model):
  21. STATUS_SHOW = 1
  22. STATUS_HIDE = 0
  23. STATUS_ITEMS = (
  24. (STATUS_SHOW, '展示'),
  25. (STATUS_HIDE, '隐藏'),
  26. )
  27. SIDE_TYPE = (
  28. (1, 'HTML'),
  29. (2, '最新文章'),
  30. (3, '最热文章'),
  31. (4, '最近评论'),
  32. )
  33. title = models.CharField(max_length=50, verbose_name="标题")
  34. display_type = models.PositiveIntegerField(default=1, choices=SIDE_TYPE,
  35. verbose_name="展示类型")
  36. content = models.CharField(max_length=500, blank=True, verbose_name="内容",
  37. help_text="如果设置的不是HTML类型,可为空")
  38. status = models.PositiveIntegerField(default=STATUS_SHOW, choices=STATUS_ITEMS, verbose_name="状态")
  39. owner = models.ForeignKey(User, verbose_name="作者", on_delete=models.DO_NOTHING)
  40. created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
  41. class Meta:
  42. verbose_name = verbose_name_plural = "侧边栏"

comment APP

最后,创建评论部分,这是一个可以完全独立的模块。编写 comment/models.py 的代码:

  1. from django.db import models
  2. from blog.models import Post
  3. class Comment(models.Model):
  4. STATUS_NORMAL = 1
  5. STATUS_DELETE = 0
  6. STATUS_ITEMS = (
  7. (STATUS_NORMAL, '正常'),
  8. (STATUS_DELETE, '删除'),
  9. )
  10. target = models.ForeignKey(Post, verbose_name="评论目标")
  11. content = models.CharField(max_length=2000, verbose_name="内容")
  12. nickname = models.CharField(max_length=50, verbose_name="昵称")
  13. website = models.URLField(verbose_name="网站")
  14. email = models.EmailField(verbose_name="邮箱")
  15. status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS, verbose_name="状态")
  16. created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
  17. class Meta:
  18. verbose_name = verbose_name_plural = "评论"

到此为止,Model 部分已经实现完毕。

配置 INSTALLED_APPS

创建好 App,编写好对应的 Model 代码之后,我们需要把这些 App(blog、config 和 comment)放到 settings配置中,才能让 Django 启动时识别这些 App。

修改 settings/base.py:

  1. INSTALLED_APPS = [
  2. 'blog',
  3. 'config',
  4. 'comment',
  5. 'django.contrib.admin',
  6. 'django.contrib.auth',
  7. 'django.contrib.contenttypes',
  8. 'django.contrib.sessions',
  9. 'django.contrib.messages',
  10. 'django.contrib.staticfiles',
  11. ]

创建数据库[表]

配置好 Model 和 App 之后,需要做的就是配置数据库。

这意味着已经创建好了迁移文件。至此 Model 和数据库就创建完成了,可以通过工具查看表信息。

编写 Model 层的代码的更多相关文章

  1. MVC引入SERVICE层 提高代码重用性 沟通CONTROL和MODEL

    MVC是web开发中常见的程序结构. 简单的mvc结构如下: view层:显示层. control层:业务层,集合了各种action. model层:模型层,一般和数据打交道.简单的sample:一个 ...

  2. [CAMCOCO][C#]我的系统架构.服务器端.(三)----Model层

    我估计一片帖子写不完这个,慢慢来吧... 先上个图,按照图来说明应该容易说清楚一些. 在Model Core核心代码中,老胡创建了一个类 CAMCOCO.Model.Core,要求今后在Model L ...

  3. DjangoMTV模型之model层——ORM操作数据库(基本增删改查)

    Django的数据库相关操作 对象关系映射(英语:(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说 ...

  4. MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求

    MVC5中Model层开发数据注解   ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...

  5. PHP MVC 中的MODEL层

    Model层,就是MVC模式中的数据处理层,用来进行数据和商业逻辑的装封 三.实现你的Mode层 Model层,就是MVC模式中的数据处理层,用来进行数据和商业逻辑的装封,进行他的设计的时候设计到三个 ...

  6. 2013/11/22工作随笔-缓存是放在Model层还是放在Controller层

    web网站的典型代码框架就是MVC架构,Model层负责数据获取,Controller层负责逻辑控制,View层则负责展示. 一般数据获取是去mysql中获取数据 但是这里有个问题,我们不会每次请求都 ...

  7. js 实现angylar.js view层和model层双绑定(改变view刷新 model,改变model自动刷新view)

    近段时间研究了下angular.js 觉得它内部实现的view和model层之间存在很微妙的关系,如下图 如上图说的,view的改变会update 数据层model, 数据层会update视图层vie ...

  8. HTML5学习+javascript学习:打飞机游戏简介以及Model层

    本着好记性不如烂博客以及分享成功的喜悦和分享失败的苦楚,今天我来分享下一个练手项目:打飞机游戏~从小就自己想做游戏,可是一直没有机会.HTML5给了我们这个平台,这个平台可以有很多以前想都不敢想的东西 ...

  9. pureMVC简单示例及其原理讲解二(Model层)

    本节将讲述Model层. Model层有VO和Mediator组成,非常简单,仅仅包含两个类:UserVO和UserProxy. UserVO中的构造器用于初始化用户的添加(通过email和密码),另 ...

随机推荐

  1. SDU&PDU

    SDU(service Data Unit):服务数据单元,又叫业务数据单元,是指定层的用户服务的数据集,传送到接收方的时候同一协议层时数据没有发生变化,即业务部分,然后发给下层之后,下层将其封装在P ...

  2. 访问kubernetes api

    kubernetes api介绍 作用: 将各种资源对象的数据都通过该api接口被提交到后端的持久化存储etcd中; 一个api的顶层元素由kind丶apiVersion丶metadata丶spec和 ...

  3. mysql高级:触发器、事务、存储过程、调用存储过程

    一.触发器 二.pymysql事务测试 三.存储过程 四.pymysql调用存储过程 一.触发器  在某个时间发生了某个事件时  会自动触发一段sql语句 create trigger cmd_ins ...

  4. 【input】标签去除默认样式

    input{-webkit-appearance: none; -moz-appearance: none; -o-appearance: none; appearance: none;}

  5. 第十五届四川省省赛 SCU - 4443 Range Query

    先给你1~N的N个数 再给你每种最多50个的条件(ai,bi,ci) 或者[ai,bi,ci] (ai,bi,ci)表示下标ai到bi的最小值必为ci [ai,bi,ci]表示下标ai到bi的最大值必 ...

  6. php一些常用单词(供初学者背)

    > property         性质 特性 财产 所有权> oriented         导向> summarize     概括 总结> register      ...

  7. Websocket @serverendpoint 404

    今天写一个前后端交互的websocket , 本来写着挺顺利的,但测试的时候蒙了,前端websocket发的连接请求竟然连接不上 返回状态Status 报了个404 ,然后看后台onError方法也没 ...

  8. JAVA内存存储分配粗略讲解

    以String类型为例:String s1 = "ABC"; String s2 = "ABC"; String s3 = new String("A ...

  9. ogg12c 配置

    环境:source 192.168.2.182 : 系统:Windows Server 2012 oracle: Release 12.1.0.2.0 ogg: 12.2.0.2.3 target 1 ...

  10. .NET Core 3来了!如何使用DevExpress WPF创建.NET Core 3应用

    DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...