Django 基础知识详细图文教程 1-Django 介绍

来源引用网络知识与某站曹老师视频相互结合学习记录,仅供参考!

Django 简介

Django 是一个用于构建 Web 应用程序的高级 Python Web 框架,Django 提供了一套强大的工具和约定,使得开发者能够快速构建功能齐全且易于维护的网站,Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 ,Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。

Django 是一个高级的 Python Web 框架,可以快速开发安全和可维护的网站;由经验丰富的开发者构建,Django 负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发;它是免费和开源的,有繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。

Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务。Django 提供了全栈开发所需的工具,包括数据库 ORM、模板引擎、路由系统、用户认证等,大幅减少重复代码。

Django 是一个功能强大的 Python Web 框架,设计上采用了"快速开发"的理念,它的架构可以帮助开发者高效构建 Web 应用程序;Django 的架构遵循 MVC (Model-View-Controller) 模式的理念,不过它在 Django 中被称为 MTV (Model-Template-View)。

Django 的哲学:

  • DRY(Don't Repeat Yourself): 避免重复代码,提倡复用(如模板继承、模型继承)。
  • 约定优于配置: 默认提供合理配置(如自动生成 Admin 界面),减少决策成本。
  • **快速开发:**从原型到生产环境均可高效推进。

Django 遵循 MVC(Model-View-Controller)架构,但在 Django 中更常被称为 MTV(Model-Template-View)。

内置功能

|--------------|--------------------------------------|
| 功能 | 描述说明 |
| Admin 后台 | 自动生成管理界面,无需手动编写 CRUD 逻辑。 |
| ORM | 用 Python 类操作数据库,无需写 SQL。 |
| 表单处理 | 内置表单验证,防止 CSRF 攻击。 |
| 用户认证 | 提供登录、注册、权限管理(django.contrib.auth)。 |
| 路由系统 | URL 映射灵活,支持正则表达式。 |
| 缓存机制 | 支持 Memcached、Redis 等后端。 |

官方网址:The web framework for perfectionists with deadlines | Django

相关具体内容请参考Django官方文档:中文版Django 文档 | Django 文档 | Django

Django 架构概览

1. Model (模型)

负责应用的核心数据结构,它定义了应用的数据和数据库的交互。模型通常映射到数据库表,并且负责处理数据的增删改查操作。Django 提供了一个 ORM(对象关系映射)系统,使得开发者可以使用 Python 代码来操作数据库,而不需要编写 SQL 语句。

例如:定义一个类 Book,它会自动映射到数据库中的一张 book 表。

2. Template (模板)

用于呈现 HTML 页面,类似于前端视图。在 Django 中,模板是 HTML 文件,允许动态内容的插入。例如,你可以在模板中使用变量来动态渲染数据,或用控制结构(如 forif)来生成不同的内容。模板是 MVC 中的视图部分。

复制代码
<h1>{{ book.title }}</h1>
<p>{{ book.author }}</p>
3. View (视图)

视图是处理用户请求的函数或类,负责接收请求并返回相应的响应。视图通常是接收到请求后,调用模型(数据)和模板(显示)并生成 HTML 页面。视图处理用户的输入(比如表单提交或 URL 路由)并返回一个 HTTP 响应。Django 的视图和 MVC 中的控制器相似。

复制代码
from django.shortcuts import render
from .models import Book
 
def book_detail(request, book_id):
    book = Book.objects.get(id=book_id)
    return render(request, 'book_detail.html', {'book': book})
4. URLconf (URL 路由)

Django 的 URL 路由机制允许你将不同的 URL 映射到不同的视图。路由的配置是通过 Django 的 urls.py 文件来实现的。它根据请求的 URL 匹配相应的视图函数或类,并处理请求。

复制代码
from django.urls import path
from . import views
 
urlpatterns = [
    path('books/<int:book_id>/', views.book_detail, name='book_detail'),
]
5. Admin (管理后台)

Django 自带了一个强大的管理后台,可以自动生成与模型相对应的界面,供管理员进行数据管理。这使得 Django 特别适合构建内容管理系统(CMS)或者后台管理系统。

6. Middleware (中间件)

中间件是在请求和响应之间的钩子,Django 提供了多种中间件,可以在请求到达视图之前或响应返回之前对其进行处理。中间件的用途非常广泛,比如:权限认证、会话管理、跨站请求伪造保护等。

Django 架构的工作流程

  1. 请求到达 URL 路由: 用户通过浏览器发送一个 HTTP 请求,Django 接收到请求后,首先检查 urls.py 配置,找到对应的视图函数(View)。
  2. 视图函数处理请求: 视图函数接收请求并处理,通常视图会查询模型(Model),然后将结果传递给模板(Template)。
  3. 模型与数据库交互: 如果视图需要访问数据,它会通过 Django 的 ORM 从数据库中获取数据。例如,通过 Model.objects.filter() 来获取数据。
  4. 模板渲染: 视图返回一个渲染过的模板,模板包含动态的内容。例如,模板可以插入数据库中获取的数据,并生成最终的 HTML 页面。
  5. 响应返回给客户端: 最终,Django 将渲染好的 HTML 页面作为 HTTP 响应返回给客户端,用户在浏览器中看到渲染后的页面。

Django 核心特性

  • ORM (对象关系映射):通过 ORM,Django 允许开发者使用 Python 类与数据库表交互,无需手写 SQL。ORM 可以大大提高开发效率。
  • 自动生成管理后台:Django 提供了一个自动化的管理界面,开发者只需定义模型,Django 就会自动为这些模型生成数据操作界面。
  • URL 路由系统:通过配置 urls.py,开发者可以灵活地将 URL 请求映射到特定的视图函数。
  • 表单处理与验证:Django 提供了丰富的表单类来帮助开发者处理用户输入和表单验证,减少了手动处理表单数据的麻烦。
  • 中间件:Django 的中间件机制允许开发者对请求和响应进行预处理和后处理,可以用于实现跨站请求伪造保护、会话管理等功能。
  • 可扩展性和插件系统:Django 提供了大量现成的插件和包,可以帮助开发者快速实现功能扩展,如用户认证、权限管理、RESTful API 等。

经典的 Django MVC 与 MTV 的区别

  • Model:无论是 MVC 还是 MTV,都会有模型层,负责与数据库交互。
  • View
    • 在 MVC 中,View 主要指的是用户看到的界面(HTML)。
    • 在 Django 中,View 是处理请求并返回响应的函数或类,它并不直接涉及到界面呈现。
  • Controller
    • 在 MVC 中,Controller 负责处理请求逻辑。
    • 在 Django 中,这个角色由 View 扮演。
  • Template :Django 采用 Template 来表示用户界面,等同于 MVC 中的 View

Django 的架构通过 MTV 模式(Model -Template-View)实现了 Web 应用的清晰分离,使得开发者可以高效构建与维护 Web 应用。它的设计让数据层、逻辑层和表现层都各自独立,并且与强大的工具和功能(如 ORM、表单处理、路由系统、管理后台等)紧密集成,从而简化了开发流程并提高了开发效率。

MVC (Model-View-Controller)
  • Model (模型):处理与数据库的交互,定义数据的结构和业务逻辑。
  • View (视图):负责数据展示,生成用户看到的 HTML 页面。
  • Controller (控制器):接收用户请求,调用 Model 处理数据,并将结果传递给 View 渲染页面。

流程:

  1. 用户发送请求到 Controller。
  2. Controller 处理逻辑,调用 Model 获取数据。
  3. Controller 将数据传递给 View。
  4. View 渲染并返回 HTML 页面给用户。
MVT (Model-Template-View) ------ Django 的实现方式

Django 中采用了 MVT 设计模式,类似于 MVC,但有一些区别:

  • Model (模型):与数据库交互,处理数据的创建、读取、更新、删除。
  • Template (模板):负责页面渲染,生成最终的 HTML 内容。
  • View (视图):Django 的 View 更偏向于控制器的角色,接收请求并决定使用哪个模板和数据。

流程:

  1. 用户访问 URL,请求被 Django 的 urls.py 映射到相应的 View。
  2. View 处理业务逻辑,调用 Model 获取数据。
  3. View 将数据传递给 Template。
  4. Template 渲染 HTML,最终返回给用户。

Django 的适用场景

适合用 Django 的项目:

  • ✅ 内容管理系统(CMS)(例如 新闻网站、博客)
  • ✅ 社交平台(用户系统、动态发布)
  • ✅ 电子商务网站(订单管理、支付集成)
  • ✅ API 后端(结合 Django REST framework)

不适合的场景:

  • ❌ 超高性能要求的实时系统(例如 高频交易平台,推荐FastAPI、Go 或 Rust)
  • ❌ 极度轻量级的微服务(可以考虑 Flask 或 FastAPI)

Django VS 其他框架

|-------------------|-------------------------------|
| 框架 | 特点 |
| Flask | 轻量级,灵活,适合小型项目或微服务。 |
| FastAPI | 异步支持强,适合高性能 API 开发。 |
| Ruby on Rails | 类似 Django,但使用 Ruby 语言。 |
| Laravel | PHP 生态的 MVC 框架,功能与 Django 类似。 |

Django 优势:

  • "开箱即用":无需额外安装插件即可实现完整功能。
  • 安全性:自动防范 SQL 注入、XSS、CSRF 等常见攻击。
  • 社区活跃:丰富的第三方库(如 Django REST framework、Django CMS)。

Django 安装

使用包管理工具 pip 安装,烦请自行学习安装;

复制代码
pip install Django

# 指定版本、指定清华镜像源
pip install Django==5.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

执行安装完成后,会在 Python 安装文件路径的"Scripts"目录下多出一个名称为"django-admin.exe"的可执行文件,这是 Django 项目创建工具;

同时,会在 Python 安装文件路径的"Lib\site-packages"目录文件下亦会多出一个"django"文件目录,这是后续开发项目会使用到的 django 相关开发包;

Django 项目创建

传统命令方式

选择创建项目目录文件路径(任何目录都行,自定义即可),例如把项目创建在"D:\works\pythondjango01"目录文件路径下,需要先切换到创建项目的目录文件路径下,再使用命令创建;

快捷键"win+R"然后输入"cmd"命令回车键打开命令提示符窗口;

或可直接在要创建项目的目录文件路径中输入"cmd"命令回车键打开命令提示符窗口(这样可省去使用 cd 命令切换到目标文件路径操作);

复制代码
# 1.使用cd命令进入到目标文件路径下
cd /d D:\works\pythondjango01

# 2.借助django-admin工具,使用命令创建项目
django-admin startproject 项目名称

为什么可以直接使用这个命令,因为在安装 Python 时有配置环境变量 path (需安装时勾选自动配置环境变量,若未配置环境变量可手动自行配置),否则需要填写全路径;

使用 django-admin 工具执行创建项目命令完成之后,会自动创建 django 项目,烦请自行查看,最里面会生成五个相关的 django 配置文件则说明项目创建成功;

使用 PyCharm 工具方式

在 PyCharm 工具中创建项目,打开 PyCharm 工具,鼠标光标移动到左上角单击"File/文件(F)→New Project/新建项目...",选中"Django"选项,创建新项目,自行选择存储路径,自定义项目名称(或可使用默认名称);注意 PyCharm 工具得是专业版才能创建和调试 Django 项目,PyCharm 社区版目前是不支持此功能的;建议可创建一个不带其他第三方库(带Django)的干净的环境,这么做的好处除了保持本地环境整洁之外,还可以轻松的移植到其他环境中,减少不必要的第三方库的安装;这里为了省事,选择的现有本地环境,自行选择即可。

更多设置里面是 Django 的一些设置,Template language 模板语言,默认为 Django 选项,Template folder 模板文件夹是存放 Django 静态文件的地方,默认为"templates"名称,一些html,css,js 文件都会存放在 templates 文件夹中;默认勾选:Enable Django admin 启用Django admin(E)是使用Django自带的admin后台管理系统,如若暂时没有想好是否要自己写后台管理系统,建议可使用默认勾选,根据之后的需求变更进行修改,最后就是单击"创建"进行项目构建。

对比使用命令方式,在 PyCharm 工具中创建的项目,会多出"templates"(用来存放 html 模板文件)目录,以及在项目根目录"djangoProject"目录文件下"settings.py"文件里面会多出"BASE_DIR / 'templates'"代码,而使用命令方式创建的 Django 项目"settings.py"文件里"'DIRS'"默认为空;

项目默认配置文件

manage.py 项目管理命令行工具

manage.py:项目管理命令行工具,内置多种方式与项目进行交互,包括启动项目,创建 app,数据库管理等;在命令提示符窗口下,将路径切换到目标项目并输入"python manage.py help"可以查看该工具的指令信息(一般不用修改);

复制代码
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()
init.py 项目初始化文件

init.py:项目初始化文件,默认空的,一般情况下无须修改;

asgi.py ASGI 服务

asgi.py:开启一个 ASGI 服务,ASGI 是异步网关协议接口(一般不用修改);开启后性能方面更加强劲,并发更高;了解即可;

复制代码
"""
ASGI config for djangoProject project.

It exposes the ASGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/
"""

import os

from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject.settings')

application = get_asgi_application()
settings.py 项目配置文件

settings.py:项目的配置文件,项目的所有功能都需要在该文件中进行配置,后续会经常使用到;

复制代码
"""
Django settings for djangoProject project.

Generated by 'django-admin startproject' using Django 5.0.6.

For more information on this file, see
https://docs.djangoproject.com/en/5.0/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.0/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/5.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-i01#=6cjknb()(5@p19olv+c2$tf7ez86)r%g!b&5(2&pdkfd0'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'djangoProject.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_APPLICATION = 'djangoProject.wsgi.application'


# Database
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators

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/5.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.0/howto/static-files/

STATIC_URL = 'static/'

# Default primary key field type
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
urls.py 项目路由设置

urls.py:项目的路由设置,设置网站的具体网址内容;其实后续开发过程中基本全是写请求和函数映射;

复制代码
"""
URL configuration for djangoProject project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/5.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]
wsgi.py 服务器网关接口

wsgi.py:全称为"Python Web Server Gateway Interface",即 Python web 服务器网关接口,是 Python 应用与 Web 服务器之间的接口,即 Python 的 Web 应用程序(如Flask)和 Web 服务器 (如Nginx)之间的一种通信协议;用于 Django 项目在服务器上的部署和上线(一般不用修改);了解即可;

复制代码
"""
WSGI config for djangoProject project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject.settings')

application = get_wsgi_application()

在项目创建好之后,Django 其实已经搭建好一个网页,单击绿色三角形按钮运行项目;

运行成功后可以看到本地加上端口号"http://127.0.0.1:8000/",可直接鼠标单击访问;

若此时在浏览器中输入"http://127.0.0.1:8000/admin/",可以发现进入到了一个新的界面。

这里需要注意的是地址栏中的内容发生了变化,是被重定向了;

下图是重定向的抓包内容,可供参考:首先是 301,其次是 302,然后再是 200;

所以最后看到的 URL 是"http://127.0.0.1:8000/admin/login/?next=/admin/";

应用创建与应用配置

无论是创建项目还是创建项目应用,都需要输入相关的 Django 内置的操作指令才能得以实现;

操作命令

在 PyCharm 工具的 Terminal 终端中输入命令"python manage.py help"后按回车键,可以看到相关的指令信息;

复制代码
PS D:\works\djangoProject> python manage.py help
# 输入"manage.py help <子命令>"以获取特定子命令的帮助信息。
Type 'manage.py help <subcommand>' for help on a specific subcommand.
# 可用子命令:
Available subcommands:

[auth]
    changepassword
    createsuperuser

[contenttypes]
    remove_stale_contenttypes

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    optimizemigration
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

[sessions]
    clearsessions

[staticfiles]
    collectstatic
    findstatic
    runserver

Django5 的操作指令共有 31 条命令,每条指令的说明如下表所示;

|---------------------------|---|---|
| 指令 | 描述说明 ||
| changepassword | 修改内置用户表的用户密码。 ||
| createsuperuser | 为内置用户表创建超级管理员账号。 ||
| remove_stale_contenttypes | 删除数据库中已不使用的数据表。 ||
| check | 检测整个项目是否存在异常问题。 ||
| compilemessages | 编译语言文件,用于项目的区域语言设置。 ||
| createcachetable | 创建缓存数据表,为内置的缓存机制提供存储功能。 ||
| dbshell | 进入Django配置的数据库,可以执行数据库的SOL语句。 ||
| diffsettings | 显示当前settings.py的配置信息与默认配置的差异。 ||
| dumpdata | 导出数据表的数据并以JSON格式存储,如 python manage.py dumpdata index >data.json,这是index的模型所对应的数据导出,并保存在 data.json文件中。 ||
| flush | 清空数据表的数据信息。 ||
| inspectdb | 获取项目所有模型的定义过程。 ||
| loaddata | 将数据文件导入数据表,如 python manage.py loaddatadata.,json。 ||
| makemessages | 创建语言文件,用于项目的区域语言设置。 ||
| makemigrations | 从模型对象创建数据迁移文件并保存在App 的migrations文件夹。 ||
| migrate | 根据迁移文件的内容,在数据库里生成相应的数据表。 ||
| optimizemigration | 允许优化迁移操作。 ||
| sendtestemail | 向指定的收件人发送测试的电子邮件。 ||
| shell | 进入Django的Shell模式,用于调试项目功能。 ||
| showmigrations | 查看当前项目的所有迁移文件。 ||
| sqlflush | 查看清空数据库的SOL语句脚本。 ||
| sqlmigrate | 根据迁移文件内容输出相应的SQL语句。 ||
| sqlsequencereset | 重置数据表递增字段的索引值。 ||
| squashmigrations | 对迁移文件进行压缩处理。 ||
| startapp | 创建项目应用App。 ||
| startproject | 创建新的Django项目。 ||
| test | 运行App里面的测试程序。 ||
| testserver | 新建测试数据库并使用该数据库运行项目。 ||
| clearsessions | 清除会话Session数据。 ||
| collectstatic | 收集所有的静态文件。 ||
| findstatic | 查找静态文件的路径信息。 ||
| runserver | 在本地计算机上启动Django项目。 ||

上述命令每次执行命令都要在 Terminal 终端输入"python manage.py help"命令,比较繁琐,使用工具时有个简便的方法,可以借助 PyCharm 开发工具 ,在菜单栏 Tools 工具(I)下拉菜单中选中" Run manage.py Task...运行 manage.py 任务...(快捷键Ctrl+Alt+R)"直接单击,再输入"help"命令即可快捷使用;

应用创建

一个项目是由于一个或者多个应用组成的(一般开发过程中,一个项目里就创建一个应用就行,当然也可以创建多个);

例如:一个网站里面的项目,可以分为两个应用(一个是 前台用户 APP,另一个是 后台管理 APP),每个应用可以独立出来,缺点是有些东西要重复造轮子,优点是安全性高,后台其他人是看不到的;

复杂的电商项目,后台甚至可以拆分用户应用APP,商品应用APP,订单应用APP,支付应用APP,积分应用APP,优惠券应用APP等等;

项目里的每个应用都是独立的,可以拥有独立的数据库,模版代码,业务代码;管理时可以一起来管理的;

创建项目应用 APP

使用命令"startapp"来创建,执行"startapp testapp01"创建名称为"testapp01"的应用,执行完成后,会在项目中自动生成一个名称为"testapp01"的目录文件;可自定义创建应用,一个项目可以拥有一个或者多个应用,理论上可以创建无数个应用,但是在实际开发过程中,一般情况下一个项目只需要创建一个应用即可;如若后续会有很多个应用的话,可以先创建一个名称为"apps"的文件夹,以后创建应用都在这里面,方便统一管理诸多应用;

应用配置

MTV 架构

Django的MTV分别代表:

  • Model(模型):业务对象与数据库的对象(ORM ),比如说是"学生"模型,对应数据库会有一个表;
  • Template(模版):负责如何把页面展示给用户;是要写模板代码的,例如"网页"或者展示一个列表、图片等;
  • View(视图):负责业务逻辑,并在适当的时候调用Model和Template;类似控制器,就像管理员是核心控制;

此外,Django还有一个urls分发器,它的作用是将一个URI的页面请求分发给不同的view处理,view再调用相应的Model和Template。 Django WEB框架示意图如下所示:

首先"Models"是可以去数据库里面取数据的,其次"View.py"视图控制器可以去 Models 里面取数据,并将数据取得返回给 View 视图,拿到数据之后通过渲染可以把数据返回给 Template 模板,然后 Template 模板加上数据的话就是网页了,用户就可以看到;

以用户角度看:

用户在浏览器输入 URL 地址,根据"urls.py"文件里面的配置,然后分发给具体的一个函数,到 View.py 视图中执行函数,去 Models 里可以去取数据,返回给 Template 模板,再显示给用户。

创建应用时所生成的文件
复制代码
+---testapp01
|   \---migrations
|           __init__.py
|   |   __init__.py
|   |   admin.py
|   |   apps.py
|   |   models.py
|   |   tests.py
|   |   views.py

migrations.py目录:用于存放数据库迁移历史文件;

__init__.py:说明目录是一个python模块;

admin.py:默认提供了admin后台管理,用作网站的后台管理站点配置相关;

apps.py:应用配置文件;

models.py: 用于应用操作数据库的模型;

tests.py:用于做单元测试;

views.py: 用于编写Web应用视图,接收数据,处理数据,与Model(模型),Template(模版)进行交互,返回应答。

未完待续......

相关推荐
IT毕设实战小研1 小时前
基于大数据的二手车数据分析与预测
java·大数据·后端·爬虫·python·算法·课程设计
狂云歌1 小时前
AI时代,学什么,怎么学
人工智能·学习
Allen_LVyingbo1 小时前
医疗AI可扩展网格信息系统中网格计算技术的智能优化
大数据·人工智能·python·算法·机器学习·django·健康医疗
MNLoser1 小时前
AI agent开发——LangGraph接入持久化
linux·人工智能·windows·python
lingguangbuzhi1 小时前
【JAVA教程】java课程java学习编程
java·学习·教程
YM52e1 小时前
鸿蒙 ArkTS 实战|防渣万能执行方案:五阶段防御体系 + 红线清单的代码实现
学习·华为·harmonyos
练习两年半的攻城狮1 小时前
RAG 系统中 Excel/表格数据的正确处理方式
python·llamaindex
苏灿烤鱼1 小时前
九个编码 Agent 共用免费额度,本地代理是路由还是绕开?
python·agent·claude
优化Henry1 小时前
关于“星链”互联网系统的几点认识
运维·服务器·网络·笔记·学习·信息与通信