# Django+vue项目基础知识 **Repository Path**: sic096/Django_vue_basic_knowledge ## Basic Information - **Project Name**: Django+vue项目基础知识 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-31 - **Last Updated**: 2025-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、web开发基础 ## 开发架构 常见的开发架构分为B/S架构和C/S架构,B是指Browser,C是指Client,S是指Server,也就是说这两种开发模式的差异点在于用户端使用的是浏览器(B),还是使用的是客户端(C),像我们常见的微信、QQ、网易云这种软件都是CS架构的,而使用浏览器打开的,都是BS架构的。 ## 开发模式 常见的开发模式有前后端分离和前后端不分离的开发模式。首先解释一下什么是前端,什么是后端。前端可以简单理解为给用户看到的界面,后端是操作数据库,执行用户操作逻辑的地方。比如我们使用百度搜索内容,我们操作的百度页面就是前端,点击查询的时候,前端把我们要搜索的关键字发送给后端程序,后端程序执行搜索对应的逻辑,再把对应的数据发给前端,由前端进行数据的展示,这就是前后端的交互过程。 我们的项目是基于前后端分离的模式进行开发的,现在市面上大部分的网站也都是基于前后端分离的模式进行开发的。 ## 增删改查(curd) ![img](README.assets/c3bb5c2703a5909820e3284a9f5fff0fa4270c.jpg) 其实我们开发项目的本质上就是对数据的增删改查,也就是常说的CURD操作,比如说用户的注册(增)、登录(查)、注销(删)、资料的修改(改)。 ## http协议 在前后端分离的开发模式中,前端和后端是不同的程序,那么这些程序之间是如何进行数据的交互的呢?是使用http协议进行交互的。 ![image-20250331154416889](README.assets/image-20250331154416889.png) 常见的请求方法有get、post、put、delete、option等等等等,但在我们的项目中主要用到的是前四种 ### get get请求是没有请求体的,所以他想要给后端传输数据只能放在请求地址里面,比如https://cn.bing.com/search?pc=MOZI&form=MOZLBR&q=mvc,这里面?后面就是传给后端的数据,以**变量名=变量内容**的形式进行传递的,中间使用&来进行分隔,也有另外的这种:https://blog.csdn.net/qq_34462436/article/details/102155492,最后面的/后面的数字就是传递的变量内容,对应的一般是读操作 ### post post请求是有请求体的,常见的登录、注册、添加数据等,需要向后端传递大量数据的,一般是post请求,对应的是增操作 ### put put请求和post操作类似,不过一般都是更新数据的操作,对应的改操作 ### delete 顾名思义,delete对应的是删操作 ## token http请求是无状态的,也就是说如果多个客户端同时向服务端发送请求,服务端是无法分辨谁是谁的,那么我们在登录之后,肯定要让服务端记住我们的登录状态,所以有了cookie技术。 那么这个技术的原理简单理解就是,在用户登录的时候,根据用户的用户名生成一个唯一的字符串,将这个字符串保存在浏览器缓存中,后面每次发送http请求的时候,服务端就可以通过这个字符串来分辨谁是谁了。再延伸一点就是,可以选择不同的加密模式来生成这个字符串,保证数据的安全性,也可以在生成字符串的时候,定义好过期时间,超过了这个字符串就失效了,这个字符串我们一般把他叫做令牌,token。 ## 数据库 我们最终的数据是存储在数据库中的,我们最熟悉和常用的就是MySQL。在MySQL中,数据是以一张张表来进行存储的,比如某个班的学生名单,这就是一张表,里面有姓名、性别、年龄、学号等等,这些叫做字段。在一个项目中,肯定不止有一张数据表,所以不同的表和不同的表之间肯定有不同的联系。比如在一个学生的管理系统中,学生名单是一张表,教师名单是一张表。这两张表之间可能会有不同的关联方式,这些关联方式就是数据库中的 **关系** 。最常见的关系类型有三种:**一对一(One-to-One)** 、**一对多(One-to-Many)** 和 **多对多(Many-to-Many)** 。 ### 1. **一对一关系(One-to-One)** 一对一关系是指一张表中的一条记录只能与另一张表中的一条记录相关联。这种关系在实际场景中并不常见,但也有它的用途。 #### **例子:** 假设每个学生都有一个唯一的学籍档案,而这个档案只属于某个特定的学生。那么我们可以设计两张表: - **学生表** :存储学生的姓名、性别、年龄等基本信息。 - **学籍档案表** :存储学生的详细信息,比如家庭住址、联系方式、成绩记录等。 这两张表之间的关系是 **一对一** ,因为每个学生只能有一个学籍档案,每个学籍档案也只能对应一个学生。 #### **特点:** - 一对一关系通常用于拆分复杂的信息,让数据更清晰。 - 比如,如果学生的基本信息和详细信息都放在一张表里,这张表会变得很大、很复杂。把详细信息单独存到另一张表中,可以让结构更简洁。 ------ ### 2. **一对多关系(One-to-Many)** 一对多关系是指一张表中的一条记录可以与另一张表中的多条记录相关联。这是数据库中最常见的关系类型之一。 #### **例子:** 在一个学校管理系统中,教师和班级之间的关系通常是一对多的。一个教师可以负责多个班级,但每个班级只能由一个教师管理。 #### **特点:** - 一对多关系适合表示层级或归属关系。 - 比如,班级“属于”某个教师,而教师“管理”多个班级。 - 在数据库中,通常通过外键来实现这种关系。外键就像一个指针,指向另一张表中的某条记录。 ------ ### 3. **多对多关系(Many-to-Many)** 多对多关系是指一张表中的多条记录可以与另一张表中的多条记录相关联。这种关系需要借助一张中间表来实现。 #### **例子:** 在一个课程管理系统中,学生和课程之间的关系通常是多对多的。一个学生可以选修多门课程,一门课程也可以被多个学生选修。 #### **特点:** - 多对多关系适合表示复杂的双向关系。 - 比如,一个学生可以选择数学、物理、化学三门课,同时数学课也可能被张三、李四、王五三个学生选修。 - 为了记录这种关系,我们需要引入一张中间表。这张表的作用是记录哪些学生选择了哪些课程。 ------ ### 4. **总结** - **一对一(One-to-One)** :一条记录只能与另一条记录关联。适合用来拆分复杂表或扩展信息,比如学生和学籍档案。 - **一对多(One-to-Many)** :一条记录可以与多条记录关联。适合表示层级关系,比如教师和班级。 - **多对多(Many-to-Many)** :多条记录可以与多条记录关联。适合表示复杂的双向关系,比如学生和课程。 通过合理设计表之间的关系,可以让数据库更高效、更易于维护。每种关系类型都有其适用的场景,实际项目中需要根据业务需求选择合适的关系。 # 二、Django ## MVT开发模式 Django的开发模式是MVT开发模式 M是指Model,模型,主要负责数据和数据库处理相关代码。 V是指View,视图,主要用于执行业务逻辑,从**模型**处获取数据,将数据给到特定的**模板**进行渲染后向用户展示。 T是指template,模版,主要负责处理用户界面。该模块的文件主要是`HTML`代码,主要用于浏览器渲染数据。 也就是说,Django是个前后端不分离的开发模式,但是我们也可以不使用template部分的内容,使用其他的前端框架,达到前后端分离的效果。为了达到快速开发的效果,我们可以在Django的框架中安装一个叫做REST Framework(简称DRF),它提供了一组用于快速构建Web API的工具和库,包括序列化器、认证、权限、视图、路由和文档化等功能。 ## 序列化器 什么是序列化?先从“序列化”这个概念说起。序列化是将复杂的数据结构(比如 Python 对象、数据库模型实例等)转换成一种可以传输或存储的格式(比如 JSON、XML 等)。反序列化则是反过来,将这些格式还原为原来的复杂数据结构。 而序列化器的功能是: #### **核心功能:** 1. 序列化(Serialization): - 将 Django 模型实例或其他复杂数据转换为 JSON、XML 等格式。 2. 反序列化(Deserialization): - 将 JSON、XML 等格式的数据解析为 Django 模型实例或其他复杂数据。 3. 数据验证(Validation): - 在反序列化时,验证输入数据是否符合要求(比如字段是否为空、是否符合特定格式等)。 4. 自定义逻辑: - 可以通过重写方法来自定义序列化或反序列化的逻辑。 ## 路由 在 Django 中,路由的作用是将用户的请求(比如访问某个 URL)分配给相应的处理函数或视图(View)。你可以把路由想象成一个“电话系统”,一个电话号就是一个路由地址,每个用户就是view 在Django中,路由是可以分级的,相当于电话号码里面,0530-1234567,0530是区号,代表了不同的地区,后面的1234567是具体的号码,代码了这个地区里面具体的对应的“人”。 每一个路由地址可以叫做一个api,他对应的是一个或者多个操作 ## Django项目目录 假如这个项目的名称叫做myproject,以下就是这个项目的目录结构和说明 ```python myproject/ ├── manage.py ├── myproject/ │ ├── __init__.py │ ├── settings.py # 项目配置文件 │ ├── urls.py # 项目的主路由 │ ├── wsgi.py # WSGI 配置 │ └── asgi.py # ASGI 配置 ├── students/ # 子应用(学生管理模块) │ ├── migrations/ # 数据库迁移文件 │ ├── admin.py # 管理后台配置 │ ├── apps.py # 应用配置 │ ├── models.py # 数据模型定义 │ ├── serializers.py # 序列化器(用于 API 数据转换) │ ├── views.py # 视图函数或类(处理请求逻辑) │ ├── urls.py # 子应用的路由 │ └── tests.py # 单元测试 ├── media/ # 用户上传的媒体资源文件(如图片、文件等) └── static/ # 静态资源文件(如 CSS、JS、图片等) ``` ## 常用的Django命令 --- ### 1. **项目管理相关命令** #### **创建新项目** ```bash django-admin startproject <项目名称> ``` - 示例:`django-admin startproject myproject` - 作用:创建一个新的 Django 项目。 #### **运行开发服务器** ```bash python manage.py runserver ``` - 默认地址:`http://127.0.0.1:8000/` - 可指定端口:`python manage.py runserver 8080` --- ### 2. **子应用相关命令** #### **创建子应用** ```bash python manage.py startapp <子应用名称> ``` - 示例:`python manage.py startapp students` - 作用:创建一个新的子应用(App)。 #### **注册子应用** 在项目的 `settings.py` 文件中,将子应用添加到 `INSTALLED_APPS` 列表中: ```python INSTALLED_APPS = [ ... 'students', # 新创建的子应用 ] ``` --- ### 3. **数据库相关命令** #### **生成迁移文件** ```bash python manage.py makemigrations ``` - 作用:根据模型的变化生成迁移文件(存储在 `migrations/` 文件夹中)。 #### **执行迁移** ```bash python manage.py migrate ``` - 作用:将迁移文件应用到数据库,创建或更新表结构。 #### **查看迁移状态** ```bash python manage.py showmigrations ``` - 作用:显示所有迁移文件的状态(已应用或未应用)。 #### **重置数据库** 如果需要清空数据库并重新初始化: 1. 删除数据库文件(SQLite 的 `.db` 文件)。 2. 删除所有迁移文件(`migrations/` 文件夹中的文件,保留 `__init__.py`)。 3. 重新运行以下命令: ```bash python manage.py makemigrations python manage.py migrate ``` --- ### 4. **超级用户相关命令** #### **创建超级用户** ```bash python manage.py createsuperuser ``` - 作用:创建一个超级管理员账户,用于登录 Django 管理后台。 - 提示输入用户名、邮箱和密码。 #### **修改超级用户密码** ```bash python manage.py changepassword <用户名> ``` - 示例:`python manage.py changepassword admin` - 作用:为指定用户修改密码。 --- ### 5. **管理后台相关命令** #### **启动管理后台** 确保已经在 `admin.py` 中注册了模型,然后访问: ``` http://127.0.0.1:8000/admin/ ``` 使用超级用户账户登录即可管理数据。