将近 5 万字讲解 Python Django 框架详细知识点(更新中)

news2025/6/9 0:02:17

Django 框架基本概述

Django 是一个开源的 Web 应用后端框架,由 Python 编写。它采用了 MVC 的软件设计模式,即模型(Model)、视图(View)和控制器(Controller)。在 Django 框架中,模型层负责与数据库交互,进行数据的增、删、改、查等操作。视图层用于封装结果,生成页面展示的 HTML 内容。控制器层负责接收请求,处理业务逻辑,与模型和视图交互,并返回结果。

Django 框架还提供了许多其他的功能,例如数据库管理、响应处理、业务逻辑等,从而简化了 Web 应用开发的过程。Django 还使用 ORM(对象关系映射)来处理数据库操作。ORM 通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中,负责模型层的业务。

总之 Django 是一个功能强大的 Web 应用后端框架,提供了许多工具和组件来简化 Web 应用开发过程,使得开发者能够更快速、高效地开发 Web 应用。

在这里插入图片描述

Django 官网:https://www.djangoproject.com/

pip 安装 Django 框架

使用 pip 安装 django 框架

pip install django==4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple 

为了方便下载安装第三方库的操作镜像源配置,可以进行永久性地将清华镜像源设置为默认源,所有的pip安装都将使用清华镜像源进行下载和安装。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

创建 Django 项目

Django 和其他第三方 Python 模块一样,会在当前 python 环境下的 lib>site-package 中,只是 Django 是比较大的那种模块。并且 Django这个包呢同时会生成 django-admin.exe 在 Scripts 文件夹中,这个 exe 可执行文件是帮助我们操作 Django 项目的。

通过 cmd terminal 终端创建初始化 django 框架

django-admin startproject 【项目名称 例如:HelloDjango】

Django 项目目录结构

默认生成文件概述

manage.py:Django用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。
HelloDjango/__init__.py:Python该目录是一个 python 包,暂无内容,一些工具的初始化可能会用到。
HelloDjango/settings.py:Django项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等。
HelloDjango/urls.py:维护项目的 URL 路由映射,即定义当客户端访问时由哪个模块进行响应。
HelloDjango/wsgi.py:全称为 Python web Server Gateway Interface,即 Python 服务器网关接口,是 Python 应用与 web 服务器之间的接口,用于 Django 项目在服务器上的部署和上线,一般不需要修改。
HelloDjango/asgi.py:定义 ASGI 的接口信息,和 wSGI类似,在3.e以后新增 ASGI,相比 NSGI,ASGI 实现了异步处理,用于启动异步通信服务,比如:实现在线聊天等异步通信功能。

CMD 创建 APP

python .\manage.py startapp 【app 名称例如:banana】

这里的 APP 不是手机应用那个 APP,而是一部分功能的意思。一个 Django 项目可能需要处理多个业务,我们将业务拆解,一部分一部分分开来管理代码会比较有条理,所以可以通过创建多个 app 来分别实现多个业务功能。举栗来说,一个项目分别对用户管理、订单管理、后台管理等业务都创建相应的 app 去实现。这样每个app的表结构、函数、HTML模板、css等都可以分开管理,不会混乱。

但是 app 是为了分开实现那些大功能的,像增加用户信息和删除用户信息这两个小功能就大可不必分成两个 app 来写。我们自己个人开发的时候,就可以只创建一个 app 来实现项目功能。

项目目录 banana APP

在这里插入图片描述

INSTALLED_APPS

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

setting 配置

在这里插入图片描述

migrate 数据迁移

在 Django 中,“migrate” 是指数据库迁移的过程,用于将模型定义转化为数据库的实际表结构。当你在 Django 中修改了模型(models.py)后,你需要使用 Django 的迁移工具来更新数据库,以保持代码和数据库的一致性。

修改模型

在你的应用的 models.py 文件中修改模型定义。例如,添加一个新的字段或者修改一个现有的字段。

创建迁移文件

python manage.py makemigrations

这将为你的应用创建一个新的迁移文件,该文件描述了模型的更改。

查看迁移文件

Django 会创建一个新的迁移文件,并将其放在你的应用的migrations目录中。你可以查看该文件,以了解模型更改的具体内容。

迁移数据库

运行以下命令将模型的更改应用到数据库中:

python manage.py migrate

这将执行迁移文件中的所有操作,并将模型的更改应用到数据库中。这些步骤将帮助你在 Django 中执行数据迁移,确保代码和数据库的一致性。

请注意,在执行迁移之前,请确保你已经备份了数据库,以防意外发生。

urls 路由配置

根路由配置

HelloDjango > urls.py

from django.contrib import admin
from django.urls import path

from index.views import *

urlpatterns = [
    path('index/', indexPage),
    path('admin/', admin.site.urls),
]

index > views.py

from django.http import HttpResponse

def indexPage(request):
    return HttpResponse('Hello world')

urls 子路由配置

在 Django 中,你可以通过使用子路由(nested routes)来组织和管理你的路由配置。子路由允许你将一组相关的路由组织在一起,形成一个单独的路由块,以便在 URL 中进行分组和嵌套。

在你的 Django 项目中,创建一个新的 Python 文件,用于定义子路由的配置。在你创建的 app 目录下创建一个名为 urls.py 的文件。在 urls.py 文件中,导入 pathre_path 函数来定义路由的模式。导入 include 函数,以便将子路由包含在主路由配置中。

from django.urls import path, include

urls.py 文件中,定义你的子路由配置。你可以使用 pathre_path 函数来定义每个子路由的模式和视图函数。

from django.urls import path
from . import views

urlpatterns = [
    path('sub-route-1/', views.sub_route_1_view),
    path('sub-route-2/', views.sub_route_2_view)
]

在你的主路由配置文件中(这边是 HelloDjango/urls.py),导入 include 函数,并将子路由配置文件的路径作为参数传递给 include 函数。这样,Django 将会加载子路由配置文件并将其包含在主路由配置中。

from django.urls import path, include

urlpatterns = [
    path('main-route/', include('your_app.urls')),
]

在上面的示例中,your_app 是你的子路由配置文件所在的应用的名称,而 urls 是子路由配置文件的名称(不包括文件扩展名)。现在当你访问主路由时,Django 将会根据子路由配置文件中的定义,将子路由添加到主路由的 URL 中。例如,如果你访问 /main-route/sub-route-1/,Django 将会调用 sub_route_1_view 视图函数。

通过配置子路由,你可以将相关的路由组织在一起,使你的代码更加清晰和易于维护。同时,你也可以使用子路由来实现更复杂的 URL 结构,以适应不同的应用程序需求。

Django 返回 JSON

在 Django 中,您可以使用 JsonResponse 来返回 JSON 数据。

from django.http import JsonResponse

def my_view(request):
    data = {'name': 'John', 'age': 30}
    return JsonResponse(data)

在上面的示例中,data 是一个字典,它包含要返回为 JSON 数据的数据。然后,使用 JsonResponse 将该字典作为 JSON 数据返回。

还可以设置 safe 参数为 False,以允许返回非字典数据:

def my_view(request):
    data = ['apple', 'banana', 'cherry']
    return JsonResponse(data, safe=False)

在上面的示例中,data 是一个列表,它不是字典。通过将 safe 参数设置为 FalseJsonResponse 将允许返回非字典数据。但是,请确保您知道您正在返回的数据类型,以避免可能的安全漏洞。

Django 返回 Image

from django.http import HttpResponse  
from django.core.files.storage import DefaultStorage  
from django.core.files.base import ContentFile  
import mimetypes  
  
def return_image(request):  
    # 创建一个存储对象  
    storage = DefaultStorage()  
  
    # 图片文件的路径,这里假设它位于你的项目的根目录下  
    image_path = '/path/to/image.jpg'  
  
    # 打开图片文件并读取内容  
    with open(image_path, 'rb') as image_file:  
        img_data = image_file.read()  
  
    # 创建一个 ContentFile 对象,用于将文件内容作为响应发送给客户端  
    content_file = ContentFile(img_data)  
  
    # 获取文件的 MIME 类型,这里假设它是 JPEG 图片  
    mime_type = mimetypes.guess_type(image_path)[0]  
  
    # 创建一个 HttpResponse 对象,设置正确的 MIME 类型并将 ContentFile 对象作为响应内容  
    response = HttpResponse(content_file, content_type=mime_type)  
  
    # 返回 HttpResponse 对象,将图片发送给客户端  
    return response

Django 调用 MongoDB

在 Django 中调用 MongoDB 需要使用第三方库,例如 django-mongodb-enginedjango-nonrel。这些库提供了与 MongoDB 的连接和集成,使得你可以在 Django 中使用 MongoDB 作为数据存储。

安装 django-mongodb-engine

pip install django-mongodb-engine

在 Django 项目的设置文件(settings.py)中配置连接信息

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.dummy',
        'NAME': 'mydatabase',
    }
}

MONGODB_DATABASES = {
    'default': {
        'NAME': 'mydatabase',
        'HOST': 'localhost',
        'PORT': 27017,
    }
}

DATABASE_ROUTERS = ['mongodb_engine.router.MongoDBRouter']

创建一个 MongoDB 模型

from django.db import models
from mongodb_engine.django.mongodb import MongoDBManager

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

    objects = MongoDBManager()

在视图或表单中使用 MongoDB 模型

from django.shortcuts import render
from .models import MyModel

def my_view(request):
    objects = MyModel.objects.all()
    return render(request, 'my_template.html', {'objects': objects})

上述示例中,我们首先安装了 django-mongodb-engine 库。然后,在项目的设置文件中,我们配置了 MongoDB 的连接信息,并指定了使用 mongodb_engine.router.MongoDBRouter 路由器。接下来,我们创建了一个名为 MyModel 的 MongoDB 模型,其中包含 nameage 字段。最后,在视图函数中,我们使用 MyModel.objects.all() 来获取所有模型对象,并将其传递给模板进行渲染。

请注意,这只是一个简单的示例,你可以根据你的具体需求进行更复杂的操作。另外,还有其他第三方库可以用于 Django 和 MongoDB 的集成,你可以根据自己的喜好和需求选择合适的库。

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

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

相关文章

Oracle查询固定时间间隔

获取每一天 SELECT (trunc(to_date(2023-01-01,YYYY-MM-DD), dd) LEVEL -1) as DATA_TIME FROM dual CONNECT BY LEVEL < 3;解释&#xff1a; 这个 SQL 查询语句的目的是生成一个包含三个日期的结果集。查询的结果是从当前日期开始的三个连续日期。让我解释一下查询的各个…

ClickHouse与Elasticsearch比较总结

目录 背景 分布式架构 存储架构 写入链路设计 Elasticsearch 再谈Schemaless 查询架构 计算引擎 数据扫描 再谈高并发 性能测试 日志分析场景 access_log&#xff08;数据量197921836&#xff09; trace_log&#xff08;数据量569816761&#xff09; 官方Ontime测…

爬虫入门基础与Selenium反爬虫策略

目录 一、爬虫入门基础 1、什么是爬虫&#xff1f; 2、爬虫的分类 3、爬虫的基本流程 二、Selenium简介 1、Selenium是什么&#xff1f; 2、Selenium的用途 三、应对反爬虫的Selenium策略 1、使用代理IP 2、模拟用户行为 3、设置合理的请求间隔时间 4、随机化请求参…

社区活跃开发者 Aaron 加入 sCrypt

Aaron&#xff08;周全&#xff09;是资深的 BSV 开发者&#xff0c;前 nChain BSV 基础架构团队成员&#xff0c;也是比特币协会在中国任命的首位技术推广专家。作为 BSV 社区的活跃成员&#xff0c;他多次作为演讲者参与区块链技术会议&#xff0c;开发了 Webot 应用、Witnes…

【完美解决】GitHub连接超时问题 Recv failure: Connection was reset

问题&#xff1a; 已经开了梯子但是在Idea中使用git&#xff08;GitHub&#xff09;还是连接超时Recv failure: Connection was reset。此时需要让git走代理。 解决方案&#xff1a; 1.对右下角网络点击右键 -> 打开网络和Internet设置 2.代理 -> 查看到地址和端口号…

智能生活从这里开始:数字孪生驱动的社区

数字孪生技术&#xff0c;这个近年来备受瞩目的名词&#xff0c;正迅速渗透到社区发展领域&#xff0c;改变着我们居住的方式、管理的方式以及与周围环境互动的方式。它不仅仅是一种概念&#xff0c;更是一种变革&#xff0c;下面我们将探讨数字孪生技术如何推动社区智能化发展…

淘宝分布式文件存储系统( 二 ) -TFS

淘宝分布式文件存储系统( 二 ) ->>TFS 目录 : 大文件存储结构哈希链表的结构文件映射原理及对应的API文件映射头文件的定义 大文件存储结构 : 采用块(block)文件的形式对数据进行存储 , 分成索引块,主块 , 扩展块 。所有的小文件都是存放到主块中的 &#xff0c;扩展块…

湖南湘潭家具3D轮廓扫描测量家居三维数字化外观逆向设计-CASAIM中科广电

随着科技的不断进步&#xff0c;CASAIM三维扫描技术在各个行业中得到了广泛应用&#xff0c;家具行业也不例外。传统的家具设计和展示方式已经无法满足现代消费者的个性化、多元化需求&#xff0c;而三维扫描技术的出现为家具行业带来了新的机遇和可能性。 家具表面有雕刻图案…

Selenium和Requests搭配使用

Selenium和Requests搭配使用 前要1. CDP2. 通过requests控制浏览器2. 1 代码一2. 2 代码2 3. 通过selenium获取cookie, requests携带cookie请求 前要 之前有提过, 用selenium控制本地浏览器, 提高拟人化,但是效率比较低,今天说一种selenium和requests搭配使用的方法 注意: 一定…

企业该如何选择数字化转型工具?_光点科技

随着科技的不断进步和数字化的浪潮席卷全球&#xff0c;企业数字化转型已经成为了保持竞争力和持续增长的关键因素之一。无论企业规模大小&#xff0c;数字化转型都可以提高效率、降低成本、改善客户体验&#xff0c;从而实现更好的业务结果。然而&#xff0c;要成功进行数字化…

Unity云原生分布式运行时

// 元宇宙时代的来临对实时3D引擎提出了诸多要求&#xff0c;Unity作为游戏行业应用最广泛的3D实时内容创作引擎&#xff0c;为应对这些新挑战&#xff0c;提出了Unity云原生分布式运行时的解决方案。LiveVideoStack 2023上海站邀请到Unity中国的解决方案工程师舒润萱&#x…

iPhone辐射超标,发布三年突然禁售了

昨晚 iPhone 15 预售大家抢到了吗&#xff1f; 虽然13日发布会后大家的反应十分冷静&#xff0c;但身体还是很诚实&#xff0c;官网都排到6-7周以后了... 在大伙都争着第一波尝鲜的时候&#xff0c;有一个地方正准备禁售 iPhone 。 不用想肯定是欧盟某个国家啦&#xff0c;这…

python正则表达(06)

python正则表达(06) 文章目录 python正则表达(06)1 正则表达式概念2 正则的三个基础方法2.1 match、search、findall三个基础方法2.2 re.match() 函数2.2.1 re.match(匹配规则&#xff0c;被匹配字符串)2.2.2验证是否开头匹配&#xff0c;match是匹配开头&#xff0c;后面的是不…

Ingress Controller

什么是 Ingress Controller &#xff1f; 在云原生生态中&#xff0c;通常来讲&#xff0c;入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件&#xff0c;用于管理入口资源对象。 Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则&#xff0c;以控制进…

Ae 效果:CC Ball Action

模拟/CC Ball Action Simulation/CC Ball Action CC Ball Action &#xff08;CC 球体动作&#xff09;基于源图像转换为网格&#xff0c;并基于网格生成一个个继承源图像像素颜色的具有 3D 深度的小球体。 效果名称左侧出现的立方体图标&#xff0c;表示本效果支持 3D 摄像机。…

2023_Spark_实验七:Scala函数式编程部分演示

1、Scala中的函数 在Scala中&#xff0c;函数是“头等公民”&#xff0c;就和数字一样。可以在变量中存放函数&#xff0c;即&#xff1a;将函数作为变量的值&#xff08;值函数&#xff09;。 def myFun1(name:String):String"Hello " nameprintln(myFun1("…

EasyExcel导出转换@ExcelProperty注解中converter不生效,以及EasyExcel导入日期转换失败问题

用EasyExcel做导出&#xff0c;需要用ExcelProperty做格式转换&#xff0c;比如日期转换&#xff0c;枚举类转换 然后新建一个转换类 里面有两个实现方法&#xff0c;converToJavaData是导入时&#xff0c;数据转换定义格式&#xff0c;converToExcelData是导出时做数据转换的。…

Python爬虫基础(三):使用Selenium动态加载网页

文章目录 系列文章索引一、Selenium简介1、什么是selenium&#xff1f;2、为什么使用selenium3、安装selenium&#xff08;1&#xff09;谷歌浏览器驱动下载安装&#xff08;2&#xff09;安装selenium 二、Selenium使用1、简单使用2、元素定位3、获取元素信息4、交互 三、Phan…

3D WEB引擎HOOPS Commuicator助力Naval Architect Jumpstart快速启动船舶信息建模平台开发

行业&#xff1a;造船业 挑战&#xff1a;新公司希望将创新的船舶信息建模产品推向市场-基于浏览器的产品需要支持高级可视化和强大的数据转换&#xff0c;以处理大型、复杂的造船项目-小型开发团队的任务是雄心勃勃的平台发布计划。 解决方案&#xff1a; Tech Soft 3D提供领…

ubuntu x86_64 源码编译 rust 1.48.0

源码地址 GitHub - rust-lang/rust: Empowering everyone to build reliable and efficient software. git clone https://github.com/rust-lang/rust cd rust git checkout 1.48.0 ./configure ./x.py build 安装前执行cargo vendor yeqiangyeqiang-MS-7B23:~/Downloads/sr…