Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
Django 非常适合敏捷开发,开发效率非常之高。Model 作为 Django 重要组成部分也是亮点之一,着实需要花时间好好梳理一遍。ORM 需要好好学习一下,运用得当可以大大的提升代码的简洁性。Django 的 model 模块,使得代码更加容易维护,只需修改一次,肯定会大大提高程序的健壮性以及可维护性,而且ORM也使得该框架更加灵活且松解耦。
本次的资讯模型比较简单,如果需要增加其它字段,可以自行修改,为达到前端数据交互效果,在分类上可以采用多级分类联合。
① 分类
class NewsCategory(models.Model):
name = models.CharField(max_length=100, verbose_name="类别名", help_text="类别名")
② 内容
class News(models.Model):
title = models.CharField(max_length=200, verbose_name="标题", help_text="标题")
desc = models.CharField(max_length=200, verbose_name="简述", help_text="简述")
thumbnail = models.URLField(verbose_name="封面图链接", help_text="封面图链接")
content = models.TextField(verbose_name="文本内容", help_text="文本内容")
# 资讯发布时间
pub_time = models.DateTimeField(auto_now_add=True)
category = models.ForeignKey('NewsCategory', on_delete=models.SET_NULL, null=True) # 这篇新闻引用后被删除了 处理category 为空
author = models.ForeignKey('xfzauth.User', on_delete=models.SET_NULL, null=True)
class Meta:
# 以后News.objects提取数据的时候,就会自动的按照列表中指定的字段排序
# 如果不加负号,那么默认就是按照从小到大正序排序
# 如果加上一个负号,就会按照从大到小倒序排序
ordering = ['-pub_time']
③ 评论
class Conment(models.Model):
content = models.TextField(verbose_name="评论内容", help_text="评论内容")
pub_time = models.DateTimeField(auto_now_add=True)
news = models.ForeignKey("News", on_delete=models.CASCADE, related_name='comments')
# 评论删除 人也删除
author = models.ForeignKey("xfzauth.User", on_delete=models.CASCADE)
class Meta:
ordering = ['-pub_time']
④ 轮播图
class Banner(models.Model):
image_url = models.URLField(verbose_name="轮播图封面链接", help_text="轮播图封面链接")
priority = models.IntegerField(default=0)
link_to = models.URLField(verbose_name="轮播图跳转链接", help_text="轮播图跳转链接")
pub_time = models.DateTimeField(auto_now_add=True)
class Meta:
# 优先级越高就在越前面
ordering = ["-priority"]