Django入门学习(三)
Ctrl+Fn+B退出服务器
Models
1.Django中的Models是什么?
通常,一个Model对应数据库的一张数据表。Django中Model类以类的形式表现,它包含了一些基本字段以及数据的一些行为。
2.ORM(Object Relation Mapping):对象关系映射。实现了对象和数据库之间的映射。隐藏了数据访问的细节,不需要编写SQL语句。
编写Models
1、步骤:
- 在应用根目录下创建models.py,并引入models模块。这一步Django在创建应用的时候已经帮我们实现了。
- 创建类,继承models.Model,该类即是一张数据表。
- 在类中创建字段
2、字段创建:
语法为 字段名 = models下的某个字段类,可传参数,有的参数可选,有的参数必选
例:字段名 = models.CharField(max_length = 64)
这里CharField就有必选参数:最大长度
3.生成数据表
- 命令行中进入manage.py同级目录
- 执行python manage.py makemigrations app名(可选)(如果不写app名,则默认为该目录下的所有的应用都生成数据迁移)
- 再执行python manage.py migrate
4.查看
Django会自动在app/migrations/目录下生成移植文件。打开0001_initial.py我们会发现
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)),
],
),
]
在这段代码中,我们并没有创建id,结果却存在id字段。这是因为我们在创建时没有为Article设置主键,所以Django为我们默认生成一个主键。如果自己手动生成主键,则id不会自动生成。
执行python manage.py sqlmigrate 应用名 文件id 查看SQL语句
默认sqlite3的数据库在项目根目录下db.sqlite3。可使用第三方软件SQLite Expert Personal查看并编辑sqlite3。
5.页面呈现数据
后台步骤:
- 在views.py中import models 这个模块
- 获取模型类的一个具体对象
例:article = models.Article.objects.get(pk=1)
article为变量名,Article为我们的类。get方法里的参数就是我们要指定的数据里的标识。pk即primarykey。 - 最后通过render把数据传到前端
例:render(request,page,{‘article’:article})
6.前端步骤:
模板可直接使用对象以及对象的“.”操作,如:{{article.title}}。
运行中如果出现Article matching query does not exist.的问题,注意查看数据库中是否有相关记录。
//views.py
from django.shortcuts import render
from django.http import HttpResponse
from .import models
def index(request):
# return HttpResponse('Hello,world')
article = models.Article.objects.get(pk=1)
return render(request,'index.html',{'article':article})
# Create your views here.
//models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length = 32 , default = 'Title')
content = models.TextField(null = True) #允许为空
# Create your models here.
//index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{ article.title }}</h1>
<h3>{{ article.content }}</h3>
</body>
</html>
在settings.py中设置时区时,只需要设置为Asia/Shanghai即可
Admin
什么是Admin?
Admin是Django自带的一个功能强大的自动化数据管理界面,被授权的用户可直接在Admin中管理数据库。
配置Admin
- 创建用户
执行python manage.py createsuperuser
>>python manage.py createsuperuser
Username (leave blank to use 'aaron'): admin
Email address: [email protected]
Password:aaronyan1120(写在这里防止忘记)
Password (again):aaronyan1120
Superuser created successfully.
- 访问后台管理系统
地址为localhost:8000/admin/
显示如下界面
若想要显示为中文只需修改settings.py中LANGUAGE_CODE = ‘zh_Hans’
配置应用
- 在应用下admin.py中引入自身的models模块(或里面的模型类)
- 编辑admin.py:admin.site.register(models.Article)
from django.contrib import admin
from .import models
admin.site.register(models.Article)
# Register your models here.
我们会发现增加一条数据时,都显示Artical Object,如下图所示,这样很不便于管理。因此我们可修改数据默认显示名称。
步骤:
①在Article类下添加一个方法
Python3使用__str__(self) Python 2.7使用__unicode__(self)
②return self.title
//models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length = 32 , default = 'Title')
content = models.TextField(null = True) #允许为空
def __str__(self)://这里每一侧都是两个下划线,且不能与class同级
return self.title