Django静态博客开发_2_模型层

2019.5.29  

今天学习内容:模型层:模型定义、django shell、django admin

######################################################################################################

3.初识Django模型层:

  # 模型层简介

      i.是什么:

        位于Django视图层和数据库之间。python对象和数据库表之间转换。

      ii. 为什么需要:

        屏蔽不同数据库之间的差异。开发者更加专注于业务逻辑的开发。提供很多便捷工具有助操作数据库。

      iii. 模型层的配置:

        >django_introduction>settings.py:

DATABASES={

  'default' = {

    'ENGINE' :  (用的什么数据库驱动)

    'NAME' :  (数据库名称)

}

}

  

  #. 创建博客文章模型

      i. 设计博客模型

        文章标题:文本类型

        文章摘要:文本类型

        文章内容:文本类型

        唯一ID标记:Int数字类型(自增、主键)

        发布日期:日期类型

      ii. 模型层定义字段

        数字类型:IntergerField

        文本类型:TextField

        日期类型:DataTimeField

        自增ID: AutoField

        主键定义: primary_key属性

      iii. 博客文章模型定义: >blog>models.py  

class Article(models.Model):

  #文章的唯一ID

  article_id = models.AutoField(primary_key=True)

  #文章标题

  title = models.TextField()

  #文章的摘要

  brief_content = models.TextField()

  #文章的主要内容

  content = models.TextField()

  #文章的发布日期 (返回实时时间)

  publish_date = models.DateTimeField(auto_now=True)

然后在terminal 输入 “ python manage.py makemigrations ”  在>migrations 里创建了一个模型的迁移文件(0001——initial.py)

输入“ python manage.py migrate ”  运行这个迁移文件把数据同步到数据库去

 

注意:如果要修改models,第二次同步数据库时title字段不能为空。如果第一次就创建title字段,则无影响,因为该表没有现有的行。如果数据表第一次已经创建并且已经在表插入数据,则必须定义一个默认值来填充已有的行, 否则数据库会因为违反数据的完整性而不接受数据表更改。报500:

  OperationalError: no such column: blog_article.title)

  #. 初识Django shell

     i. Django Shell 是什么

        python shell :用于交互式的Python编程  (相对c,java是编译式编程)

        Django shell: 类似,继承python shell并能用Django

     ii. 为什么需要Django shell  (方便开发,调试,debug)

        临时性操作使用Django shell更加方便

        小范围Debug更简单,不需要整个项目测试 

 

     iii. 使用

        在终端里输入“ python manage.py shell ” 进入Django shell 环境

新建Aritcle和保存:

from blog.models import Article

a = Article()

a.title = 'Test Django Shell '

a. brief_content = 'Test Django Shell, By Marvin'

a.content = 'Test Django Shell, New Ariticle, Main content.'

print(a)

a.save()

 

验证是否在数据库里:

articles = Article.objects.all()

article = articles[0]

print(article.title)

#打印title,逐个尝试#

……

 

  #. 初识Django Admin模块

      i. 是什么

        Django后台管理工具。

        读取定义的模型元数据,提供强大的管理使用页面

      ii. 为什么要用它

        Django shell 新增文章太复杂了

        管理页面是基础设施中重要的部分

        认证用户、显示管理模型、校验输入等功能

      iii. 使用:创建管理员用户,登陆界面进行创建

终端里输入“ python manage.py createsuperuser

用户名:marvin

邮箱地址:可以不填

密码:marvin123

输入“ python manage.py runserver

到浏览器页面,输入: https://127.0.0.1:8000/admin

输入用户密码,进入了admin的管理后台(one uesr, no group)

需要把模型注册到admin才能在后台看到:>blog>admin.py  输入:

from .models import Article

admin.site.register(Article)

回到网页后台刷新,多了个Aritcle,点入见到Article_object(每篇文章都是这个名字) 可改内容也可以创建文章。

可以对article内容进行修改:

我服了。。初学就踩雷,版本问题会导致admin object添加或修改失败,更新到django 2.1.5解决

如何在后台显示每个文章的title:

>blog>models.py  class Article 后面加入:

def __str__(self):

  return self.title

重新在终端输入 “ python manage.py runserver ”,回网页刷新,在后台每篇文章都显示自己的名字了。

  #. 实现博客数据返回页面(实战)

打开:>blog>views.py  新建一个视图函数实现功能:

from blog.models import Article

def article_content(request):

  article = Article.objects.all()[0]

  title = article.title

  brief_content = article.brief_content

  article_id = article.article_id

  publish_date = article.publish_date

  return_str = 'title:%s, brief_content:%s, content:%s, article_id:%s, publish_date:%s' %(title,brief_content,article_id,pulish_date)

  return HttpResponse(return_str)

 

应用级别的路由配置:打开 >blog>urls.py   在urlpaterns 中加入:

path('content',blog.views.article_content)

项目级别的路由配置: 打开 >django_introduction>urls.py ,之前已经配置过blog转发,这里不用再次配置

打开浏览器:网址加入/blog/content  展示了文章的详细情况:

 

######################################################################################################

原文地址:https://www.cnblogs.com/marvintang1001/p/10944543.html