Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
前言:本文是学习网易微专业的《python全栈工程师 - Django快速建站》课程的笔记,欢迎学习交流。同时感谢老师们的精彩传授!一、课程目标
- 了解
Django
中模型的含义和作用 - 掌握迁移数据库的操作
- 掌握超级管理员的创建方法
- 掌握管理界面的配置方法
- 静态:直接写到
HTML
文件中 - 动态:来自数据库。使用
SQL
语句读取数据库,Django
通过ORM
(Object-Relational Mapping
,对象关系映射)来实现对数据库的读写。
ORM
:在关系型数据库和业务实体对象之间创建映射关系。操作业务对象时,不需要使用SQL
语句,只需要操作对象的属性和方法。- 优点:可移植性强,安全性好,查询语法简单。
ORM
实现方法:
– 编写数据模型类
– 位置:models.py
(也可以是其他文件)
– 继承:django.db.models.Model
– 对应的数据库表:appname_modelname
,(都是小写字母)
– 创建数据库表:迁移操作,命令如下 :
python manage.py makemigrations
python manage.py migrate
实操: 在
myproject/blog/models.py
文件中写入以下内容from django.db import models
from django.utils import timezone
from django.contrib.auth.models import Userclass BlogArticles(models.Model):
title = models.CharField(max_length=300)
author = models.ForeignKey(User, on_delete=models.CASCADE,related_name='blog_posts')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)class Meta:
ordering = ('-publish', )def __str__(self):
return self.title
示例解析:
文章图片
2.1.3.字段
title = models.CharField(max_length=300)
- 模型中每一个字段都应该是某个
Field
类的实例,Django
利用这些字段类来实现以下功能:
– 字段类型用以指定数据库数据库类型(如:INTEGER
,VARCHAR
,TEXT
)。
– 在渲染表单字段时默认使用的HTML
视图(如:,
)。
– 基本的有效性验证功能,用于Django
后台和自动生成的表单。
- 内置的字段类型:https://docs.djangoproject.com/zh-hans/3.0/ref/models/fields/#model-field-types
这里列举常用的模型字段:
AutoField、BigAutoField、BigIntegerField、IntegerField、BinaryField、BooleanField、CharField、DateField、DateTimeField、DecimalField、DurationField、EmailField、FileField、FilePathField
- 自定义字段类型
- 字段选项:每个字段类型中需要指定一些特定的参数
title = models.CharField(max_length=300)
说明:
1).
CharField
:表示字符类型2).
max_length
:数据库存储VARCHAR
数据时的字节最大长度publish = models.DataTimeField(default=timezone.now)
说明:
1).
DateTimeField
:表示日期时间类型2).
default
:默认指定的时间body = models.TextField()
说明:
TextField
表示文本类型2.1.6.示例分析二:
from django.contrib.auth.models import Userclass BlogArticles(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
ForeignKey
:外键,一对多(多对一)关系
说明:
1).User
:表示被关联的类
2).on_delete=models.CASCADE
:表示联级删除
3).related_name='blog_posts'
:表示User
的实例以blog_posts
属性反向查询到BlogArticles
的实例
myproject
目录下,运行命令:# 第一步
python3 manage.py makemigrations
# 第二步
python3 manage.py migrate
运行结果:
文章图片
2.1.5.迁移数据
- 迁移操作:
python manage.py makemigrations
python manage.py migrate
- 查看数据库表结构
– 可视化方法:https://sqlitestudio.pl/index.rvt
–sqlite
操作界面
文章图片
- 命令:
python manage.py createsuperuser
- 登录管理界面:管理界面对应一个专门的管理应用,
http://localhost:8000/admin/
文章图片
文章图片
blog
的内容,进行下面的操作:- 编辑
./blog/admin.py
文件,写入以下代码
from django.contrib import admin
from .models import BlogArticlesadmin.site.register(BlogArticles)
保存上面代码,此时后台界面是这样的:
文章图片
但
Blog
部分的内容只显示文章的标题,右边大片空白:文章图片
为了在文章列表中显示更多的内容,继续编辑
./blog/admin.py
文件,替换为以下代码:from django.contrib import admin
from .models import BlogArticlesclass BlogArticlesAdmin(admin.ModelAdmin):
# 要显示的字段
list_display = ('title', 'author', 'publish')
list_filter = ('publish', 'author')
search_fields = ('title', 'body')
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ['-publish', 'author']admin.site.register(BlogArticles, BlogArticlesAdmin)
【Python学习笔记(7.1.3 Django快速建站 - 模型和超管)】修改后界面变化:
文章图片
三、课程小结
- 01 创建模型
- 02 管理功能
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- Android中的AES加密-下
- 逻辑回归的理解与python示例
- 一起来学习C语言的字符串转换函数
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 定制一套英文学习方案