📜  Django 项目 MVT 结构(1)

📅  最后修改于: 2023-12-03 15:00:27.605000             🧑  作者: Mango

Django 项目 MVT 结构

什么是MVT?

MVT 是 Django 框架中用于组织代码的一种架构模式,其中 MVT 代表 Model(模型)、View(视图)和 Template(模板)。

  • Model(模型):负责处理数据和数据库相关的操作。
  • View(视图):负责处理用户的请求,从模型中获取数据并响应用户。
  • Template(模板):负责展示数据,将数据渲染成用户能看懂的页面或者其他形式的文本内容。
Django 项目 MVT 结构分析
目录结构
your_project/
├─ your_project/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├─ your_app/
│   ├── migrations/
│   │   └── ...
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
└─ manage.py
  • your_project: Django 项目的根目录。
    • __init__.py: 标明该目录是一个 Python 包。
    • settings.py: 配置文件,包含 Django 项目的常见设置。
    • urls.py: 定义 Django 项目中 URL 的路由映射。
    • wsgi.py: WSGI 接口,用于与 Web 服务器进行交互。
  • your_app: Django 应用的目录。
    • migrations: 用于存储数据库迁移脚本的目录。
    • __init__.py: 标明该目录是一个 Python 包。
    • admin.py: 管理后台相关配置。
    • apps.py: 应用的配置,包括应用名、中文名、版本号等。
    • models.py: 数据库模型。
    • tests.py: 单元测试相关代码。
    • urls.py: 应用的 URL 路由映射。
    • views.py: 视图函数代码。
常见操作

Model

# models.py
from django.db import models

class Article(models.Model):
    title = models.CharField('文章标题', max_length=100)
    content = models.TextField('文章内容')

    def __str__(self):
        return self.title

定义了一个 Article 的模型,表示一篇文章。每个模型都是django.db.models.Model 的子类,模型中的每个字段都是django.db.models模块中的一个字段类的实例。模型字段定义了数据库中的表结构,可以是数字、日期、字符串等多种数据类型。模型中的每一个属性代表着数据表中的一列,其属性值为模型的实例所代表的一行的值。

View

# views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Article

def article_list(request):
    articles = Article.objects.all()
    return render(request, 'article_list.html', {'articles': articles})

def article_detail(request, pk):
    article = Article.objects.get(pk=pk)
    return render(request, 'article_detail.html', {'article': article})

views.py 中定义了如下两个处理函数:

  • article_list: 获取所有文章列表,返回一个包含所有文章的 HttpResponse 实例。
  • article_detail: 根据传入的文章 ID 显示将一个文章的详细信息。

Template

<!-- article_list.html -->
{% for article in articles %}
  <div class="article">
    <h2><a href="{% url 'article_detail' article.pk %}">{{ article.title }}</a></h2>
    <p>{{ article.content|truncatewords:30 }}</p>
  </div>
{% endfor %}

article_list.html 是一个使用 Django 模板语言渲染的 HTML 文本,在该模板中使用了 for 循环将所有文章都渲染出来,其中链接指向的是单篇文章的详细页的链接。在之后的 URL 路由映射中,配置的 URL 的类似于这样:path('article/<int:pk>/', views.article_detail, name='article_detail')

总结

MVT结构能够有效的组织代码和开发流程,使得代码复用,测试可靠和维护变得非常容易。在上述实现的过程中,可以保持清晰的思路和良好的代码风格,能够更好的实现Django项目。