Django的执行流程、Django的设计模式、Django中MVT模式和MVC模式的区别、Django提供了(自动化脚本工具、数据库ORM对象关系映射、模板、表单、Admin管理站点、文件管理、认证

1 Django的执行流程
1.1 Django提供了(自动化脚本工具、数据库ORM对象关系映射、模板、表单、Admin管理站点、文件管理、认证权限、session机制、缓存cache)
2 Django的设计模式
2.1 MVC模式
2.2 MVT模式
3 Django中MVT模式和MVC模式的区别

1 Django的执行流程

Django的执行流程、Django的设计模式、Django中MVT模式和MVC模式的区别、Django提供了(自动化脚本工具、数据库ORM对象关系映射、模板、表单、Admin管理站点、文件管理、认证_第1张图片

1.1 Django提供了哪些给我们用

1 提供项目工程管理的自动化脚本工具
	django-admin startproject 项目名
	python manage.py startapp 应用名
	python manage.py runserver
	python manage.py makemigrations
	python manage.py migrate
	python manage.py createsuperuser

2 数据库ORM支持(对象关系映射,英语:Object Relational Mapping)
	# 查询所有年龄大于等于 18 的记录
	results = MyModel.objects.filter(age__gte=18)
	with transaction.atomic():
    # 执行一系列数据库操作

3 模板
	在前端构建动态的、可重用的用户界面。
	
4 表单

5 Admin管理站点
	注册模型:
	通过在 admin.py 文件中注册你的模型,你可以在 Admin 站点中管理这些模型。在模型的管理类中,你可以定义显示的字段、过滤器、搜索字段等。
	
6 文件管理
	Django 提供了一些内置的文件管理功能,以便于处理用户上传的文件和静态文件的管理。
	这些功能主要通过两个应用来实现:django.core.files 和 django.contrib.staticfiles
	
7 认证权限
	1. **用户和用户组:**
	   - Django 的权限系统建立在用户和用户组的基础上。用户可以被分配到一个或多个用户组,而用户组可以拥有一个或多个权限。
	2. **内置权限:**
	   - Django 提供了一些内置的权限,例如 `add`, `change`, 和 `delete`,用于控制用户对模型的增加、修改和删除操作。这些权限通常对应于数据库的 CRUD 操作。
	3. **权限检查:**
	   - 在视图中,你可以使用装饰器来检查用户是否有特定的权限。例如,`@login_required` 装饰器可以用于要求用户登录,`@permission_required` 装饰器用于要求用户具有特定的权限。

8 session机制
	是的,Django 提供了一个强大的 session 机制,用于在 Web 应用中跟踪用户的会话状态。
	Session 是一种在服务器端存储用户数据的机制,通过将一个唯一的标识符(通常是一个加密的 Cookie)发送到用户的浏览器,来追踪用户与服务器之间的交互。

	1. **Session 后端:**
	   - Django 提供了多种 session 后端来存储 session 数据,包括数据库后端、缓存后端、文件系统后端等。
	   - 你可以在项目的设置中配置使用哪个后端,默认情况下,Django 使用数据库后端。
	   # settings.py
	   # 使用数据库后端
	   SESSION_ENGINE = 'django.contrib.sessions.backends.db'
	
	2. **Session 数据的存储和访问:**
	   - 在 Django 视图中,你可以通过 `request.session` 对象来存储和访问 session 数据。
	   - 这个对象的行为类似于 Python 的字典,你可以使用键值对来存储和检索数据。
	   # 存储数据到 session
	   request.session['username'] = 'john_doe'
	
	   # 从 session 中获取数据
	   username = request.session.get('username', 'default_username')
	
	3. **Session 过期时间:**
	   - 你可以通过设置 `SESSION_COOKIE_AGE` 来定义 session 的过期时间。
	   - 默认情况下,session 的过期时间是两周。
	   # 设置 session 过期时间为一天
	   SESSION_COOKIE_AGE = 24 * 60 * 60
	
	4. **Session 认证:**
	   - Django 的用户认证系统通常与 session 一起使用。一旦用户登录,Django 将创建一个唯一的 session 标识符,并将其存储在用户的浏览器中。这样,用户就可以在会话期间保持登录状态。
	
	5. **Session 中间件:**
	   - Django 使用中间件来处理 session。在 `MIDDLEWARE` 设置中,通常包含了 `'django.contrib.sessions.middleware.SessionMiddleware'` 中间件,用于处理 session 相关的操作。
	
	6. **Session 使用建议:**
	   - 尽管 session 提供了一种方便的方式来存储用户数据,但过度使用 session 可能导致性能问题。
	   - 通常,应该将 session 用于存储对用户可见的数据,而不是用于存储大量的系统状态。
	   - 对于系统状态,更适合使用数据库或缓存。
	
	Django 的 session 机制是 Web 开发中常用的工具,它提供了一种方便的方式来跟踪用户的状态和
	存储相关数据。通过合理使用 session,你可以提高用户体验并实现更高级的功能。

9 缓存
	Django 提供了强大的缓存框架,使得在应用中实现缓存变得相对简单。
	缓存是一种用于存储和快速检索数据的机制,可以显著提高应用程序的性能,特别是对于一些昂贵的操作,如数据库查询或复杂的计算。
	
	1. **缓存后端:**
	   - Django 允许你选择不同的缓存后端,包括内存缓存、文件缓存、数据库缓存、Memcached 等。你可以在项目的设置中配置使用哪个后端,默认情况下,Django 使用内存缓存。
	   # settings.py
	   # 使用内存缓存
	   CACHES = {
	       'default': {
	           'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
	           'LOCATION': 'unique-snowflake',
	       }
	   }
	
	2. **缓存装饰器和缓存视图:**
	   - Django 提供了 `cache_page` 装饰器,用于缓存整个视图的输出。这可以减轻服务器的负载,提高响应速度。
	   from django.views.decorators.cache import cache_page
	   @cache_page(60 * 15)  # 缓存 15 分钟
	   def my_view(request):
	       # 视图的逻辑
	3. **缓存 API:**
	   - 你可以在代码中使用 Django 提供的缓存 API 来手动管理缓存。这包括 `cache.set`、`cache.get`、`cache.delete` 等方法。
	   from django.core.cache import cache
	   # 将数据存储到缓存中
	   cache.set('my_key', 'my_value', timeout=60)
	   # 从缓存中获取数据
	   my_value = cache.get('my_key')
	
	4. **缓存中间件:**
	   - Django 的缓存框架还提供了中间件,可以在视图被调用之前查找缓存并在缓存中找到数据时直接返回响应,而不用执行视图中的逻辑。这种方式被称为缓存中间件。
	   # settings.py
	   MIDDLEWARE = [
	       # ...
	       'django.middleware.cache.UpdateCacheMiddleware',
	       'django.middleware.common.CommonMiddleware',
	       'django.middleware.cache.FetchFromCacheMiddleware',
	       # ...
	   ]
	
	5. **自定义缓存键和版本:**
	   - 你可以通过指定缓存键来控制缓存项的存储位置,并使用缓存版本来防止旧的缓存项被错误地使用。
	   from django.core.cache import cache
	   key = 'my_key'
	   value = 'my_value'
	   # 自定义缓存键和版本
	   cache.set(key, value, version=2)
	
	Django 的缓存框架是一个强大的工具,可以帮助开发者提高应用程序的性能,减轻服务器负载,特别是在处理大量请求或昂贵操作的场景下。通过灵活配置缓存后端和使用缓存装饰器等手段,你可以有效地利用缓存提高应用的响应速度。

2 Django的设计模式

Django 是一个使用了多种设计模式的高级 Web 框架,主要采用了以下一些设计模式:

1. **MVT 模式(Model-View-Template):**
   - **Model(模型):** 负责处理与数据相关的逻辑,包括数据库操作等。
   - **View(视图):** 处理用户请求,包含业务逻辑,并将处理结果传递给模板。
   - **Template(模板):** 负责将处理结果渲染成最终的 HTML 页面,与视图分离显示逻辑。

2. **Singleton 模式:**
   - Django 的配置对象采用了单例模式,确保在整个应用程序中只有一个配置实例,这有助于全局配置的一致性。

3. **Observer 模式:**
   - Django 的信号(Signals)系统采用了观察者模式,允许某个部分的代码发出信号,而其他部分的代码则监听并对这些信号做出响应。

4. **Decorator 模式:**
   - 在 Django 中,装饰器用于修改或扩展函数的行为,例如 `@login_required` 用于强制用户登录。

5. **Factory 模式:**
   - Django 使用工厂方法模式来创建数据库查询集(QuerySet)对象,通过管理器(Manager)来实现。管理器充当工厂,为模型提供数据库查询功能。

6. **Strategy 模式:**
   - Django 的表单系统使用策略模式,允许你为表单字段选择不同的验证策略。

7. **Facade 模式:**
   - Django 提供了高级的、简化的接口,隐藏了底层的复杂性。例如,Django ORM 提供了简单的 API 用于数据库操作,而隐藏了底层 SQL 查询的复杂性。

8. **Template Method 模式:**
   - Django 的类视图中,通常使用 Template Method 模式,其中基类提供了一个模板方法(例如 `get()` 或 `post()`),而子类可以根据需要覆盖其中的一些方法。

这些设计模式的使用有助于提高代码的可维护性、可扩展性,并促使开发者采用一致的最佳实践。

2.1 MVC模式

M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
V全拼为View,用于封装结果,生成页面展示的html内容。
C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

Django的执行流程、Django的设计模式、Django中MVT模式和MVC模式的区别、Django提供了(自动化脚本工具、数据库ORM对象关系映射、模板、表单、Admin管理站点、文件管理、认证_第2张图片

2.2 MVT模式

M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

Django的执行流程、Django的设计模式、Django中MVT模式和MVC模式的区别、Django提供了(自动化脚本工具、数据库ORM对象关系映射、模板、表单、Admin管理站点、文件管理、认证_第3张图片

3 Django中MVT模式和MVC模式的区别

Django 使用的是 MVT(Model-View-Template)模式,而不是传统的 MVC(Model-View-Controller)模式。虽然它们有相似之处,但在细节上有一些区别。

1. **MVC 模式:**
   - **Model(模型):** 数据存取层。负责处理数据逻辑和数据库交互。
   - **View(视图):** 用户界面层。负责显示数据,接收用户输入。
   - **Controller(控制器):** 处理用户输入,更新 Model 和 View 之间的关系。负责业务逻辑。

2. **MVT 模式:**
   - **Model(模型):** 与 MVC 模式中的模型类似,负责数据存取和处理数据逻辑。与数据库的交互通常在这里进行。
   - **View(视图):** 不同于 MVC 中的视图,Django 的视图处理用户请求和返回响应,类似于 MVC 中的 Controller。视图接收用户输入,处理业务逻辑,然后返回响应给用户。
   - **Template(模板):** 负责将数据渲染成 HTML 页面,类似于 MVC 中的视图。模板将逻辑与表示分开,有助于更好地组织代码和实现可维护的用户界面。

关键区别在于 MVT 中引入了模板(Template)的概念,而将视图(View)用于处理用户请求和业务逻辑。这有助于更好地分离前端和后端的责任,使代码更清晰、模块化,并支持更好的代码复用。

你可能感兴趣的:(补充,django,设计模式,mvc)