复习
首先复习一个前两章内容
(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/
图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。
图2 数据库查看
然后我们手动忘数据库写入一些数据(记得点击提交修改数据库),id为1开始自增。(如果数据库为空是查询不到的)
图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来管理!