Django之路第四篇:Models
概述
-
通常,一个Model对应数据库的一张数据表
-
Django中Models以类的形式展现
-
它包含了一些基本字段以及数据的一些行为
ORM
-
Django使用了对象关系映射-----ORM(Object Relation Mapping)
-
实现了对象和数据库之间的映射
-
隐藏了数据访问的细节,不需要编写SQL语句
编写Models的步骤
- 在应用根目录下创建models.py,并引入models模块
- 创建类,继承models.Model,该类即是一张数据表
- 在类中创建字段
这里就以blog应用为例,编写blog/models.py文件
1 # blog/models.py 2 from __future__ import unicode_literals 3 from django.db import models 4 5 class Article(models.Model): 6 title = models.CharField(max_length=32,default='Title') 7 content = models.TextField(null=True)
字段创建
- 字段即类里面的属性(变量)
- attr = models.CharField(max_length = 64)
生成数据表
1.生成数据表步骤
- 命令行中进入manage.py同级目录
- 执行python manage.py makemigrations app名(制作数据迁移准备)
- 再执行python manage.py migrate(数据迁移开始)
2.查看生成的数据表
- Django会自动在app/migrations/目录下生成移植文件
- 执行python manage.py sqlmigrate 应用名 文件id 查看SQL语句
- 默认sqlite3的数据库在项目根目录下db.sqlite3
- 推荐下载第三方软件SQLite Expert Personal打开查看db.sqlite3(轻量级,完全免费)
页面呈现数据
1.后台步骤
- 在数据库中先添加数据
- 在应用中的views.py中添加 import models
- 使用 article = models.Article.objects.get(pk=1)获取实例模型
- 然后使用 render(request,page,{'article':article}) 渲染页面
应用修改过后的views.py
1 # blog/views.py 2 from django.shortcuts import render 3 from . import models 4 def index(request): 5 article = models.Article.objects.get(pk=1) 6 return render(request, 'blog/index.html', {"article":article})
2.前端步骤
- 模板可直接使用对象以及对象的“.”操作
- {{article.title}}
应用修改过后的index.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <h1>{{ article.title }}</h1> 9 <h3>{{ article.content }}</h3> 10 </body> 11 </html>
当前的工程目录结构
myblog
|-----blog(应用目录)
|-----migrations(数据移植模块,内容自动生成)
|------__init__.py
|-----templates
|-----blog
|-----index.html
|-----__init__.py
|-----admin.py(应用的后台管理系统配置)
|-----apps.py(应用的一些配置)
|-----models.py(数据模块,类似于MVC结构中的Models(模型))
|-----tests.py(自动化测试模块)
|-----views.py(执行响应的代码所在模块)
|-----urls.py(新增路由文件)
|-----myblog(项目目录)
|-----__init__.py
|-----settings.py(项目中的总配置文件)
|-----urls.py(URL配置文件)
|-----wsgi.py(Python应用与Web服务器之间的接口)
|-----db.sqlite3(数据库文件)
|-----manage.py(与项目进行交互的命令行工具集入口(项目管理器))