传统的MVC结构中,有模型这么一个概念。Django中,Models又是怎么一回事呢?
刚才生成的这些乱七八糟的数据迁移就是Django自带的一些应用
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',
创建的数据迁移
执行python manage.py makemigrations,Django会在app/migrations/目录下生成移植文件blog\migrations\0001_initial.py和blog2\migrations\0001_initial.py
因为刚刚我们创建的那个模型,我们没有给它添加主键。于是Django呢帮我们创建了这么一个字段用来当做我们这个模型的主键。所以呢如果我们自己手动添加主键,这个id呢也就不会自动生成了。这个id还是挺好用的。
# Generated by Django 2.0.5 on 2018-05-18 14:07from django.db import migrations, modelsclass 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='Title', max_length=32)), ('content', models.TextField(null=True)), ], ), ]
# Generated by Django 2.0.5 on 2018-05-18 14:07from django.db import migrations, modelsclass 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='Title', max_length=32)), ('content', models.TextField(null=True)), ], ), ]
生成的数据表的SQL语句是可以看的。
这个文件id就是0001或者是0002这些。
使用Django默认的sqlite3数据库
这个就是我们的数据库sqlite3
大部分都是Django自动生成的数据表。前面的blog前缀是Django自动添加的。rowid是这个软件自动加的一个东西。第二个id就是我们的主键。
Django的模板语言不但支持字符串之类的那种传统的数据传递,也支持这种对象的传递。
blog\views.py
# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.shortcuts import render# Create your views here.#from django.shortcuts import renderfrom django.http import HttpResponsefrom . import modelsdef index(request): #return HttpResponse('Hello, world!'); #return render(request,'index.html',{'hello': 'Hello,Blog'}) article = models.Article.objects.get(pk=1) #return render(request, 'blog/index.html') return render(request, 'blog/index.html',{ 'article':article})
blog2\views.py
# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.shortcuts import render# Create your views here.from . import modelsdef index(request): #return render(request, 'blog2/index.html') article = models.Article.objects.get(pk=1) return render(request, 'blog2/index.html',{ 'article':article})
后台代码我们就写完了
刚才传递了这么一个对象article到前端模板,而在模板中调用实例成员的方法和后台是一样的,就用这个.操作符。
blog\index.html
Title { { article.title }}
{ { article.content }}
blog2\index.html
Title { { article.title }}
{ { article.content }}
这个就是Django的模型models的一些基本用法。