Django开发博客-(3)Models

时间:2021-07-27 03:26:22

复习

首先复习一个前两章内容
(1)创建app,将其添加到settings的INSTALLED_APPS中
(2)为这个app创建一个views

def homePage(request):
return render(request, 'myblog/myblog.html', {'homepage':'blog home page!'})

(3)增加一个urls文件
使用这个响应,为响应创建一个连接

from django.conf.urls import url
from myblog import views

urlpatterns = [
url(r'^blog/$', views.myblog)
]

(4)在工程下的urls中增加这个应用的urls

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/', include('myblog.urls'))
]

(5)应用增加一个模板文件,并添加一个html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客</title>
</head>
<body>

<h1>
{{ homepage }}</h1>

</body>
</html>

随之运行/blog/blog/
Django开发博客-(3)Models
图1 运行效果图

Models

下面就是本章的重头戏,Models的讲解
首先要知道Django的Modesl是什么?
通常一个Models对应数据库的一张数据表,Models以类的形式表现,它包含了一些基本的字段以及数据的一些操作。
ORM?
全名是对象关系映射(Object Relation Mapping)实现了对象和数据库之间的映射,隐藏的数据访问、操作的细节,不需要编写SQL语句

使用步骤:
(1) 在应用的models中引入models模块,创建类继承models.Model,该类就是一张数据表,在类中创建字段
(2) 字段相当于类的属性例如:
name = modelst.TextField(max_length=32)
具体字段使用函数要查看官方文档吧:
docs.djangoproject.com/en/1.10/ref/models/fields
(3) 生成数据表:
命令行中使用 python manage.py makemigrations app名(可选),不加apps默认是所有的apps都生成,然后执行python manage.py migrate

首先创建表在应用的models中

class Article(models.Model):
title = models.CharField(max_length=32, default='标题')
content = models.TextField(null=True)

2个字段,一个标题一个是内容
随后使用命令生成数据表

λ python manage.py makemigrations
Migrations for 'myblog':
myblog\migrations\0001_initial.py
- Create model Article

λ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK

其实这些数据迁移都是在settings中添加的apps
(如果没有创建sql的表,第一条命令没有输出)
可以看到创建了一个新的文件,0001_initial.py,我们可以查看一下内容

# -*- coding: utf-8 -*-
# Generated by Django 1.11.2 on 2017-06-06 01:26
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Article',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(default='标题', max_length=32)),
('content', models.TextField(null=True)),
],
),
]

由代码可知,Django为我们默认创建了主键id。现在我们可以使用一些sql可视化的一些工具查看数据库的内容了。
这里我使用的是SQLite Expert Personal。
Django开发博客-(3)Models
图2 数据库查看

然后我们手动忘数据库写入一些数据(记得点击提交修改数据库),id为1开始自增。(如果数据库为空是查询不到的)
Django开发博客-(3)Models
图3 修改数据库

然后我们需要在页面上显示这些信息
修改views的函数

def myblog(request):
article = models.Article.objects.get(pk=1)
return render(request, 'myblog/myblog.html', {'article':article})

主页render第三个参数 键值对最好是名字相同的,在html中会直接使用key作为类名引用属性。两者不一样容易混。

在myblog.html文件中

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客</title>
</head>
<body>

<h1>
{{ article.title }}</h1>
<h2>
{{ article.content }}</h2>

</body>
</html>

我们再次运行/blog/blog/即可在页面上看到
博客
Hello Blog!

在这里models相当于后台,而前端就是html文件显示的页面,通过这种方法将数据传递给页面呈现数据。

但是呢,每次都要使用可视化工具操作数据库,十分不便,接来下我们就是用Django知道的自动化数据管理页面admin来管理!