Python学习笔记(7.1.3 Django快速建站 - 模型和超管)

前言:本文是学习网易微专业的《python全栈工程师 - Django快速建站》课程的笔记,欢迎学习交流。同时感谢老师们的精彩传授!
一、课程目标
  • 了解Django中模型的含义和作用
  • 掌握迁移数据库的操作
  • 掌握超级管理员的创建方法
  • 掌握管理界面的配置方法
二、详情解读 2.1.模型 2.1.1.网页内容来源
  • 静态:直接写到HTML文件中
  • 动态:来自数据库。使用SQL语句读取数据库,Django通过ORMObject-Relational Mapping,对象关系映射)来实现对数据库的读写。
2.1.2.ORM
  • 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

示例解析: Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
文章图片

2.1.3.字段
title = models.CharField(max_length=300)

  • 模型中每一个字段都应该是某个Field类的实例,Django利用这些字段类来实现以下功能:
    – 字段类型用以指定数据库数据库类型(如:INTEGERVARCHARTEXT)。
    – 在渲染表单字段时默认使用的HTML 视图(如:)。
    – 基本的有效性验证功能,用于Django后台和自动生成的表单。
2.1.4.字段类型
  • 内置的字段类型: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
更多内容请参考文章:Django模型系统的常用字段和字段参数
  • 自定义字段类型
2.1.5.示例分析一:
  • 字段选项:每个字段类型中需要指定一些特定的参数
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

运行结果:
Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
文章图片

2.1.5.迁移数据
  • 迁移操作:
python manage.py makemigrations python manage.py migrate

  • 查看数据库表结构
    – 可视化方法:https://sqlitestudio.pl/index.rvt
    sqlite操作界面
    Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
    文章图片
2.2.管理功能 2.2.1.创建超级管理员
  • 命令:
python manage.py createsuperuser

  • 登录管理界面:管理界面对应一个专门的管理应用,http://localhost:8000/admin/
    Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
    文章图片

    Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
    文章图片
2.2.2.添加管理内容 上面的后台管理界面只显示用户模块的内容,没有显示blog的内容,进行下面的操作:
  • 编辑./blog/admin.py文件,写入以下代码
from django.contrib import admin from .models import BlogArticlesadmin.site.register(BlogArticles)

保存上面代码,此时后台界面是这样的:
Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
文章图片

Blog部分的内容只显示文章的标题,右边大片空白:
Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
文章图片

为了在文章列表中显示更多的内容,继续编辑./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快速建站 - 模型和超管)】修改后界面变化:
Python学习笔记(7.1.3 Django快速建站 - 模型和超管)
文章图片

三、课程小结
  • 01 创建模型
  • 02 管理功能

    推荐阅读