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 展示了文章的详细情况:
######################################################################################################