Django学习(2)项目实战

1、环境及简介

前端开发:HTML、CSS、JavaScript
后端开发:Java、PHP、Python、GO
数据库:MySQL、MSSQL、Oracle、Redis

安装Django
pip install Django 或 下载.whl后 pip install D:\xxx.whl

创建Django项目
File--New Project--Django 或 命令django-admin startproject MyDjango
* manage.py     命令行工具  python manage.py help 帮助命令
* __init__.py   初始化文件,一般无须修改
* asgi.py       启动异步通信服务,如在线聊天等异步通信功能
* settings.py   项目配置文件
* urls.py       项目路由设置,设置网站的具体网址内容
* wsgi.py       Python Web Server Gateway Interface Python服务器网关接口,用于Django项目在服务器上的部署和上线

查看Django版本
python  import django  django.__version__

创建项目应用,简称App,相当于网站功能
python manage.py startapp index

* migrations    生成数据迁移文件,自动在数据库中生成相应的数据表
* __init__.py   当前App名的初始化文件
* admin.py      设置当前App的后台管理功能
* apps.py       当前App的配置信息
* models.py     数据库的映射类,每个类关联一张数据表,实现数据的持久化,即MTV的模型

Model
* tests.py      自动化测试的模块,实现单元测试
* views.py      试图文件,处理功能的业务逻辑,即MTV中的视图View

启动项目
python manage.py runserver 8001  http://127.0.0.1:8001/

2、项目需求与设计

软件工程

  • 开发流程:需求分析→设计说明(概要和详细设计)→代码编写→程序测试→软件交付→客户验收→后期维护。
  • 网站首页:商品搜索功能、网站导航、广告轮播、商品分类热销、网站尾部
  • 商品列表页:商品搜索功能、网站导航、商品分类、商品列表
  • 商品详细页:商品搜索功能、网站导航、商品基本信息、商品详细介绍、热销推荐
  • 购物车页面:商品搜索功能、网站导航、商品的购买费用核算
  • 个人中心页面:商品搜索功能、网站导航、用户基本信息、订单信息
  • 用户登录注册页面:商品搜索功能、网站导航、登录注册表单

数据库表的数据结构

商品信息表

idInt11主键
nameVarchar100商品名称
sizesVarchar100商品规格
typesVarchar100商品类型
priceFloat商品价格
discountFloatFloat折后价格
stockInt        存货数量
soldInt        已售数量
likesInt  收藏数量

created

Date  商家日期
imgVarchar100商品主图
detailsVarchar100商品描述

商品类别表    关联商品信息表的types

idInt11主键
firstsVarchar100一级分类
secondsVarchar100二级分类

购物车信息表

idInt11主键
quantityInt11购买数量
commodityInfos_idInt11商品信息表的主键id          商品信息表id关联comm.._id
user_idInt11Django内置用户表的主键id    关联Django内置用户表的id

订单信息表

idInt11主键
priceFloat11订单总价   购物车信息表结算费用写入price
createdInt11 订单创建时间
user_idDateDjango内置用户表的主键id   关联Django内置用户表的id
stateVarchar20订单状态
  • MyDjango——与项目名相同
  • commodity——网站的商品列表页、商品详细页
  • index——网站首页
  • media——网站的媒体资源,存放商品的主图、详细介绍图
  • pstatic——网站的静态资源,如CSS、JavaScript、网站界面图片
  • shopper——购物车页面、个人中心页面、用户登录注册页面、在线支付功能
  • templates——存放HTML模板文件,即网站的网页文件

3、项目配置Settings.py

settings.py  添加新增的文件夹,识别这些文件夹

实际开发中,需要根据实际情况对INSTALLED_APPS、MIDDLEWARE、TEMPLATES、DATABASES、STATIC_URL进行配置

完成网站的开发过程,网站上线阶段则配置属性DEBUG、ALLOWED_HOSTS

INSTALLED_APPS:识别新增的项目应用(App),新增新建的App

TEMPLATES:模板文件设置,App中创建的模板文件夹需要在配置属性DIRS中添加如'index/temp,APP_DIRS需要为True,否则无法从项目应用中查找模板文件

MIDDLEWARE:中间件的作用是处理用户请求信息和返回响应内容

DATABASES:配置数据库
        "ENGINE": "django.db.backends.mysql",
        # "NAME": BASE_DIR / "db.sqlite3",
        "NAME": 'xxxs',  # 数据库名称
        'USER': 'root',  # mysql用户名
        'PASSWORD': 'xxx',  # mysql密码
        'HOST': '127.0.0.1',  # 数据库主机号
        'PORT': '3306',  # 数据库端口

创建my.cnf

[client]
database = 数据库名称
user = root
password = 密码
default-character-set = utf8
DATABASES = {"default": {"ENGINE": "django.db.backends.mysql","OPTIONS": {"read_default_file": "my.cnf",},}
}

Django可以使用mysqlclient和pymysql模块实现MySQL
django--db--backends--mysql--base.py mysqlclient版本要求
如果是使用pymysql,则需要在项目名目录下__init__.py文件中写入:import pymysql  pymysql.install_as_MySQLdb()

如果是使用MySQL8.0版本,加密方式需要改为原来的加密方式
ALTER USER 'root' @ 'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword'; FLUSH PRIVILEGES;

STATIC_URL进行配置:静态资源配置

"""
Django settings for xxxs project.Generated by 'django-admin startproject' using Django 4.2.7.For more information on this file, see
https://docs.djangoproject.com/en/4.2/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.2/ref/settings/
"""from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
# 项目路径
BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
# 密钥配置
SECRET_KEY = "xxx"# SECURITY WARNING: don't run with debug turned on in production!
# 调试模式
DEBUG = True# 域名访问权限
ALLOWED_HOSTS = []# Application definition
# App列表
INSTALLED_APPS = ["django.contrib.admin",  # 内置的后台管理系统"django.contrib.auth",  # 内置的用户认证系统"django.contrib.contenttypes",  # 记录项目中所有model元数据(Django的ORM框架)"django.contrib.sessions",  # Session会话功能,用于标识当前访问用户的身份,记录相关用户信息"django.contrib.messages",  # 消息提示功能"django.contrib.staticfiles",  # 查找静态资源路径'index','commodity','shopper',
]
# 中间件  用于处理Django的请求Request和相应Response
MIDDLEWARE = ["django.middleware.security.SecurityMiddleware",  # 内置的安全机制,保护用户与网站的通信安全"django.contrib.sessions.middleware.SessionMiddleware",  # 会话Session功能"django.middleware.common.CommonMiddleware",  # 处理请求信息,规范化请求内容"django.middleware.csrf.CsrfViewMiddleware",  # 开启CSRF防护功能"django.contrib.auth.middleware.AuthenticationMiddleware",  # 开启内置的用户认证系统"django.contrib.messages.middleware.MessageMiddleware",  # 开启内置的信息提示功能"django.middleware.clickjacking.XFrameOptionsMiddleware",  # 防止恶意程序单机劫持  LocaleMiddleware:国际化和本地化功能
]
# 路由入口配置  默认值是与项目同名的文件夹的urls.py文件
ROOT_URLCONF = "xxxs.urls"
# 模板配置  配置模板的解析引擎、模板的存放路径地址即内置功能模板使用配置信息
TEMPLATES = [{"BACKEND": "django.template.backends.django.DjangoTemplates","DIRS": [BASE_DIR / 'templates'],"APP_DIRS": True,"OPTIONS": {"context_processors": ["django.template.context_processors.debug","django.template.context_processors.request","django.contrib.auth.context_processors.auth","django.contrib.messages.context_processors.messages",],},},
]
# WSGI配置  告诉Django如何查找WSGI文件
WSGI_APPLICATION = "xxxs.wsgi.application"# 数据库配置
# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
# 配置数据库的连接信息,如连接数据库的模块、数据库名称、帐号和密码,默认连接SQLite数据库
# django.db.backends.postgresql/mysql/sqlite3/oracle
DATABASES = {"default": {"ENGINE": "django.db.backends.mysql",# "NAME": BASE_DIR / "db.sqlite3","NAME": 'xxx',  # 数据库名称'USER': 'root',  # mysql用户名'PASSWORD': 'xxx',  # mysql密码'HOST': '127.0.0.1',  # 数据库主机号'PORT': '3306',  # 数据库端口}
}
或者配置成以下方式
DATABASES = {"default": {"ENGINE": "django.db.backends.mysql","OPTIONS": {"read_default_file": "my.cnf",},}
}# Password validation
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
# 内置Auth认证的功能配置
AUTH_PASSWORD_VALIDATORS = [{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",},{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",},{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",},{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",},
]# Internationalization
# https://docs.djangoproject.com/en/4.2/topics/i18n/
# 国际与本地化配置  语言设置、不同时区时间的设置
LANGUAGE_CODE = "en-us"
LANGUAGE_CODE = "zh-hans"TIME_ZONE = "UTC"
TIME_ZONE = "Asia/Shanghai"USE_I18N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.2/howto/static-files/
# 静态资源配置
STATIC_URL = "static/"
# 添加并设置配置属性STATICFILES_DIRS
# 静态文件加载路径  如果静态文件不和app挂钩,可以在settings.py中添加STATICFILES_DIRS,之后DTL会在这个列表的路径中查找静态文件
STATICFILES_DIRS = (BASE_DIR / 'static',
)
# STATIC_ROOT = BASE_DIR / 'AllStatic'  该文件夹与服务器之间构建映射关系# 媒体资源配置
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'# Default primary key field type
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"# 发送邮件相关配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'xxx@qq.com'
EMAIL_HOST_PASSWORD = 'xxx'  # 开启服务授权码,在邮箱的设置更改密码下方的位置进行配置,配置需要发送短信,之后获得的码输入到此处
DEFAULT_FROM_EMAIL = 'xxx@qq.com'  # 默认发送者LOGIN_URL = '/auth/login'

4、路由  URL(Uniform Resource Locator 统一资源定位符)

互联网上标准资源的地址,用于指出网站文件的路径位置

5、数据模型搭建

ORM框架,实现面向对象编程
models  id = models.AutoField(primary_key=True)
      模型字段名称    数据类型    字段属性

__str__()  设置模型的返回值
默认情况:返回值为模型名+主键

模型扩展功能

class Meta:  设置模型的常用属性  元数据db_table = 指定表名unique_together = ('列名1', '列名2', ...)  联合约束,确定唯一记录ordering = ['列名1', '-列名2']  先按列名1升序排序,再按列名2降序排序app_label = 指定该模型所属的应用abstract = True 抽象模型,不能生成数据库表结构,只能作为其他模型的父类

当模型较多时,用包Package将模型拆分进行统一管理;将models.py文件拆分为xx.py和xxx.py后,需要在__init__.py文件中导入所有模型

settings.py的DATABASES属性中配置MySQL数据库连接信息

数据迁移指令
python manage.py makemigrations  新定义的模型会在项目应用的migrations文件夹中创建新的.py文件
python manage.py migrate  执行新建到数据库操作
python manage.py migrate 应用名 0001_initial  执行某个项目应用中的某个.py文件

其他迁移指令
squashmigrations、inspectdb、showmigrations、sqlflush、sqlsequencereset、remove_stale_contenttypes

数据导入(loaddata)与导出(dumpdata)
python manage.py dumpdata>data.json
data.json项目根目录下,如果要保存到指定的文件夹下,cd到该路径后执行命令
命令行需要python xxx/xxx/manage.py dumpdata>data.json

导出项目应用commodity中所有模型数据
python manage.py dumpdata commodity>data.json
导出项目应用commodity中模型Types的数据
python manage.py dumpdata commodity.Types>types.json

导入数据
python manage.py loaddata data.json
注:数据的导入需要以整个项目或整个项目应用的数据为单位,因为存在外键关联,只导入某张表数据,需要考虑该数据表是否设有外键且外键所关联的数据表是否已有数据

*关联关系型字段*

一对一关系            

从表中增加xxx_id字段,关联主表的id
xxx = models.OneToOneField(to_field=’id‘, to='table_name', on_delete=models.CASCADE, blank=True, null=True)
                           指向主表的id        指向主表        主表中删除一条记录,对应表也同步删除

一对多关系    

主表的一条记录对应从表的多条记录
xxx = models.Foreignkey('主表的模型名称', on_delete=models.CASCADE)    xxx_id

多对多关系

A表的一条记录和B表的多条记录对应,B表的一条记录和A表的多条记录对应(如:作者和图书,一个作者可以借阅多本图书,一本图书可以由多人借阅)
xxx = models.ManyToManyField(模型名, blank=True)  与模型建立多对多关系
作者信息表    多对多关联中间表    图书信息表

数据库基本操作

新增

  • python manage.py shell    交互模式环境
  • from xxx.models import goods  导入模型
  • g = goods()     构建goods模型实例
  • g.xxx = 'xxx'   为属性赋值
  • 或 g = goods(xxx='xxx, ...)
  • g.save()        通过save()方法将实例保存到数据库表中
  • g = goods.objects.create(xxx='xxx', ...)  通过create()方法新增记录
  • g = goods.objects.get_or_create(xxx='xxx', ...)  新增前检查记录是否存在
  • d = dict(xxx='xxx',...)
  • g = goods.objects.update_or_create(**d, defaults={'xxx':xxx})  数据表中如存在该记录,对记录进行修改
  • g1 = goods(xxx='xxx', ...)  g2 = goods(xxx='xxx', ...)  goods.objects.bulk_create([g1, g2])  批量新增

查询

  • goods.objects.all()         查找数据库表中所有记录
  • QuerySet类型,对应于数据库表的记录集合(字典、元组)
  • goods.objects.values()      ...所有记录,以字典的形式表示
  • goods.objects.values_list() 以列表的形式返回指定模型对象所对应的数据库表所有记录
  • goods.objects.get(条件)      返回符合条件的记录
  • goods.objects.first() 返回第一条记录 / last() 返回最后一条记录 / count() 返回数据个数
  • goods.objects.filter(条件)   可以在组合条件下对数据库表中记录进行查找
  • goods.objects.exclude(条件)  排除条件,返回不符合条件的记录
  • goods.objects.order_by('id', '列名')  按照指定字段排序
  • goods.objects.aggregate()

修改

  • models.goods.objects.filter(条件).update(条件)

删除

  • models.goods.objects.filter(条件).delete()
  • models.goods.objects.filter(条件).distinct()  去掉重复记录

命令行

安装Django
pip install Django 或 下载.whl后 pip install D:\xxx.whl

创建Django项目
django-admin startproject MyDjango

查看Django版本
python  import django  django.__version__

创建项目应用,简称App,相当于网站功能
python manage.py startapp index

启动项目
python manage.py runserver 8001
访问地址为http://127.0.0.1:8001/

创建Django内置功能的数据表(创建新表)
python manage.py makemigrations    创建模型对应的表结构命令文件
python manage.py migrate           创建新表结构

python manage.py makemigrations    新定义的模型会在项目应用的migrations文件夹中创建新的.py文件
python manage.py migrate           执行新建到数据库操作
python manage.py migrate 应用名 0001_initial  执行某个项目应用中的某个.py文件

数据导入(loaddata)与导出(dumpdata)
python manage.py dumpdata>data.json
导出项目应用commodity中所有模型数据
python manage.py dumpdata commodity>data.json
导出项目应用commodity中模型Types的数据
python manage.py dumpdata commodity.Types>types.json
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32MP135裸机编程:修改官方GPIO例程在DDR中点亮第一颗LED灯

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf 正点原子stm32mp135开发板&原理图 STM32Cube_FW_MP13_V1.1.0 STM32CubeIDE v1.151 需要修改那些地方 1.1 修改LED引脚 本例使用开发板的PI3引脚链接的LED作为我们点亮的第一颗LED灯,…

在idea中创建Scala项目教程

1.下载Scala支持插件 文件-设置-插件-marketplace 搜索Scala 下载 2.创建项目 文件-新建-项目-新项目-构建系统maven 3.创建Scala目录 Scr-main(右键)-新建-目录(Scala回车键)-scala(右键)-将项目标记为-源代码根目录 4.对当前项目引入Scala支持 未添…

Tdengine的时序数据库简介、单机部署、操作语句及java应用

Tdengine的时序数据库简介、单机部署、操作语句及java应用 本文介绍了Tdengine的功能特点、应用场景、超级表和子表等概念,讲述了Tdengine2.6.0.34的单机部署,并介绍了taos数据库的常见使用方法及特色窗口查询方法,最后介绍了在java中的应用。…

【差分数组】1674. 使数组互补的最少操作次数

本文涉及知识点 差分数组 LeetCode1674. 使数组互补的最少操作次数 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit 。每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的另一个整数。 如果对于所有下标 i(下标从 0 开始&…

详解 Flink 的容错机制

一、检查点 Checkpoint 1. 介绍 有状态流应用中的检查点(checkpoint),其实就是所有任务的状态在某个时间点的一个快照(一份拷贝),这个时间点应该是所有任务都恰好处理完一个相同的输入数据的时刻。在一个流…

C++ | Leetcode C++题解之第144题二叉树的前序遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> preorderTraversal(TreeNode *root) {vector<int> res;if (root nullptr) {return res;}TreeNode *p1 root, *p2 nullptr;while (p1 ! nullptr) {p2 p1->left;if (p2 ! nullptr) {…

linux centos如何安装python3版本但不能影响默认python2版本

在CentOS上安装Python3而不影响系统默认的Python2,具有如何安装呢? 1. 更新系统包 首先,确保系统包是最新的: sudo yum update -y2. 安装EPEL存储库 EPEL(Extra Packages for Enterprise Linux)存储库包含许多额外的软件包,包括Python3: sudo yum install epel-rel…

MATLAB基础应用精讲-【数模应用】二元Logit分析

目录 算法原理 数学模型 极大似然法 Newton牛顿迭代法 logit回归分析步骤 一、二元logit分析 1.基本说明 2.数据处理 3.SPSSAU上传数据 4.分析前提示 5.SPSSAU分析 6.其它说明 二、多分类logit分析 1.基本说明 2.数据要求与处理 3.SPSSAU上传数据 4.SPSSAU分析…

Maven 插件

Maven 插件 Maven 是一个强大的项目管理工具,它通过插件来实现构建、测试、打包和部署等功能。Maven 插件是 Maven 的核心组成部分,它们扩展了 Maven 的功能,使其能够处理各种构建任务。本文将详细介绍 Maven 插件的概念、工作原理、如何使用和创建插件,以及一些流行的 Ma…

QT获取最小化,最大化,关闭窗口事件

QT获取最小化&#xff0c;最大化&#xff0c;关闭窗口事件 主程序头文件&#xff1a; 实现&#xff1a; changeEvent&#xff0c;状态改变事件 closeEvent触发点击窗口关闭按钮事件 其代码它参考&#xff1a; /*重写该函数*/ void MainWindow::changeEvent(QEvent *event) {…

2024-6-10-zero shot,few shot以及无监督学习之间的关系是什么

Zero-shot learning、few-shot learning和无监督学习都是机器学习中的方法&#xff0c;它们共同的特点是在有限或没有标签数据的情况下进行学习。下面是这三种方法之间的关系和区别&#xff1a; Zero-shot Learning (零样本学习)&#xff1a; 零样本学习是在模型训练过程中完全…

计算机毕业设计hadoop+spark+hive舆情分析系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 微博大数据 微博推荐系统 微博预测系统

本 科 毕 业 论 文 论文题目&#xff1a;基于Hadoop的热点舆情数据分析与可视化 姓名&#xff1a; 金泓羽 学号&#xff1a; 20200804050115 导师&#xff1a; 关英 职称&…

matlab演示银河系转动动画

代码 function GalaxyRotationSimulation()% 参数设置num_stars 1000; % 恒星数量galaxy_radius 1; % 银河系半径rotation_speed 0.05; % 旋转速度% 生成银河系中的恒星分布theta 2 * pi * rand(num_stars, 1); % 角度r galaxy_radius * sqrt(rand(num_stars, 1)); % 半径…

XUbuntu24.04之制作ISO镜像启动盘(二百四十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【html】如何利用HTML+CSS制作自己的印章

大家有没有尝试过用HTML和CSS制作自己的印章. 首先印章具有两个最基本的特点就是它是圆形的并且有边框 当然它还有一些其他的属性吗&#xff0c;废话不多说我们直接上源码&#xff1a; 效果图&#xff1a; 源码&#xff1a; html&#xff1a; <!DOCTYPE html> <h…

51单片机STC89C52RC——1.1点亮一个LED

目录 STC单片机模块 LED模块 创建Keil项目 代码 效果 STC单片机模块 我们程序中要点亮的LED灯的位置如下图。 我们程序要用到的针脚如下图 LED模块 电路图如下 8个LED&#xff0c;全部点亮 每一bit位 都需要设置为0 二进制是0000 0000 。如果只点亮D1一个&#xff…

Docker高级篇之Docker-compose容器编排

文章目录 1. Docker-compse介绍2. Docker-compse下载3. Docker-compse核心概念4. Docker-compse使用案例 1. Docker-compse介绍 Docker-compose时Docker官方的一个开源的项目&#xff0c;负责对Docker容器集群的快速编排。Docker-compose可以管理多个Docker容器组成一个应用&a…

CentOS:安装NodeJs

1、首先安装wget yum install -y wget 如果已经安装了可以跳过该步 2、下载nodejs最新的bin包 可以在下载页面 Node包 中找到下载地址 ​wget https://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz也可以在本地下载最新的bin包&#xff0c;然后通过 Ftp 上传到 Ce…

华为坤灵路由器初始化开局的注意事项,含NAT配置

坤灵路由器比较坑&#xff0c;无web界面&#xff0c;全程命令行配置&#xff0c;但是版本更新导致和华为企业路由器配置很多不一样的地方&#xff0c;今天介绍下 1、aaa密码复杂度修改&#xff1a; #使能设备对密码进行四选三复杂度检查功能。 <HUAWEI>system-view […

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.2 从零移植 Ubuntu,基于RISC-V

1. 概述 上一章节我们的Linux kernel已经跑起来了,接下来我们就移植rootfs,在移植rootfs之前,我们要知道几个概念,这样有助于后续移植rootfs。 2. kernel和rootfs的调用关系 如下,是上一章节我们kernel运行时打印的log,可以看出他在启动时会去调用四个脚本,这四个脚本就…