zoukankan      html  css  js  c++  java
  • 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  展示了文章的详细情况:

     

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

  • 相关阅读:
    第二次
    第一次
    win下less自动编译脚本
    厦门攻略游记
    npm常用命令
    青岛旅行规划及玩后感
    kissynode run on windows解决方案,contextify nodejs windows solution
    win nodejs下 findit只返回第一个文件问题
    jetty自动添加path的问题
    微博输入框统计
  • 原文地址:https://www.cnblogs.com/marvintang1001/p/10944543.html
Copyright © 2011-2022 走看看