Render的第三个参数
返回给前端的数据 是从数据库中获取的
Models 模型
对应数据库的一张数据表 以类的形式表现
ORM 对象关系映射:所有对数据库的操作实际上是对类以及对类的对象的操作
隐藏了数据访问的细节,不需要写任何sql语句 实现了对象与数据库之间的映射
步骤:
1. 在应用根目录的models.py 引入models模块
1. 创建类 继承models.Model 该类就是一张数据表
1. 在类中创建字段
字段创建:
字段即类里面的属性
attr = models.CharField(max_length=64)
字段类型看文档:https://docs.djangoproject.com/en/1.11/ref/models/fields/
将模型映射成数据表:
1. python manage.py makemigrations app名
1. python manage.py migrate
- migrate, which is responsible for applying and unapplying migrations.
- makemigrations, which is responsible for creating new migrations based on the changes you have made to your models.
makemigrations与migrate区别
makemigrations作用:相当于在该app下建立 migrations目录,并记录下所有的关于modes.py的改动,比如0001_initial.py,
但是这个改动还没有作用到数据库文件
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-02-10 02:25
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('blog', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='article',
name='publish_time',
field=models.DateTimeField(auto_now=True),
),
]
migrations命令作用:
将该改动作用到数据库文件,比如产生table,修改字段的类型等。
Django会在app/migrations/目录下生成移植文件
执行python manage.py sqlmigrate 应用名 文件id 可以查看sql语句,例如:
manage.py@test2 > sqlmigrate blog 0001
bash -cl "/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Applications/PyCharm.app/Contents/helpers/pycharm/django_manage.py sqlmigrate blog 0001 /Users/shixinshan/Development/DjangoProjects/test2"
BEGIN;
--
-- Create model Article
--
CREATE TABLE "blog_article" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(32) NOT NULL, "content" text NULL);
COMMIT;
Following files were affected
Process finished with exit code 0
生成的数据库在哪里? 使用了默认的sqlite3
查看并编辑db.sqlite3 使用第三方 轻量级 完全免费
Windows:sqlite expert personal
Mac:SQLiteStudio (推荐)
页面数据获取:
在views.py中import models
Article = models.Article.objects.get(pk=1) select 主键为1
render(request,page, {‘article’: article})
也支持对象的传递