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

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 pathfrom index.views import *urlpatterns = [path('index/', indexPage),path('admin/', admin.site.urls),
]

index > views.py

from django.http import HttpResponsedef 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 viewsurlpatterns = [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, includeurlpatterns = [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 JsonResponsedef 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 MongoDBManagerclass MyModel(models.Model):name = models.CharField(max_length=100)age = models.IntegerField()objects = MongoDBManager()

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

from django.shortcuts import render
from .models import MyModeldef 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.mzph.cn/news/85720.shtml

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

相关文章

安装gpu版本的paddle和paddleclas

安装gpu版本的paddle python -m pip install paddlepaddle-gpu2.3.2.post111 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html以上支持cuda11.1版本 其他需求可查阅文档在这里 安装paddleclas 1 在虚拟环境中安装所需的Python库: pip inst…

爬虫获取静态网页数据

自动爬取网页数据 正常情况下是我们使用浏览器输入指定url,对服务器发送访问请求,服务器返回请求信息,浏览器进行解析为我们看到的界面,爬虫就是使用python脚本取代正常的浏览器,获取相应服务器的返回请求信息&#x…

基于springboot+vue的毕业生实习与就业管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Learn Prompt-“标准“提示

在前面的教程中,我们介绍了指令输入的简单提示,提供实例的提示和角色扮演类的提示,那么是否有一个公式来列出提示的各个部分,并将其组合成一个标准化的提示?答案是肯定的。 角色扮演(Role) 指令…

MySQL详解六:备份与恢复

文章目录 1. 数据库备份的分类1.1 从物理和逻辑上分类1.1.1 物理备份1.1.2 逻辑备份 1.2 从数据库的备份策略角度上分类1.2.1 完全备份1.2.2 差异备份1.2.3 增量备份 1.3 常见的备份方法 2. MySQL完全备份2.1 完全备份简介2.2 优点与缺点2.3 实现物理冷备份与恢复2.3.1 实现流程…

Bytebase 2.8.0 - ​全新升级的数据脱敏功能

🚀 新功能 全新升级的数据脱敏功能,提供更加细化的脱敏和访问权限配置。全新升级的 SQL 编辑器界面。库表同步功能支持 Oracle。支持设置公告。 🎄 改进 新增基于 MySQL parser 的数据脱敏内核。调整了侧边栏数据库列表,用最近…

学习记忆——宫殿篇——记忆宫殿——记忆桩——工人宿舍

脸盆铁盒白色泡沫绳子电热炉 6. 椅子 7. 门帘 8. 塑料 9. 书 10.安全帽 11. 凳子 暖壶烟灰缸计算器水杯刷子

科目三基础四项(一)

​ 第一天,基础操作,仪表,方向,挡位 按照模块来 1、方向盘两手在两侧 ​ 编辑 转向时的角度,只用:向左540,向右180 向左打和向右打的角度要抵消,回正 掉头向左打满再回 注意…

18.3 【Linux】登录文件的轮替(logrotate)

18.3.1 logrotate 的配置文件 logrotate 主要是针对登录文件来进行轮替的动作,他必须要记载“ 在什么状态下才将登录文件进行轮替”的设置。logrotate 这个程序的参数配置文件在: /etc/logrotate.conf /etc/logrotate.d/ logrotate.conf 才是主要的参…

1795_ChibiOS网络书籍阅读_实时系统的一些概念

全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 不同的OS在介绍自己的机理的时候都有自己的模型或者抽象概念,ChibiOS也不例外。这里的几个概念需要做一个基本的理解: 1. 进…

解决方案 | 如何构建市政综合管廊安全运行监测系统?

如何构建市政综合管廊安全运行监测系统?WITBEE万宾城市生命线智能监测仪器,5年免维护设计,集成10多项结构与气体健康监测指标,毫秒级快速响应,时刻感知综合管廊运行态势

嵌入式网络接口之MAC芯片与PHY芯片

目录 0. 参考文档 1.嵌入式网络接口简介 2.嵌入式网络硬件架构方案 2.1 SOC内未集成MAC芯片 2.2 SOC内集成MAC芯片 2.3 主流方案总结 2.3 参照实际网卡的说明 3.MII/RMII及MDIO接口 3.1 MII 3.2 RMII 3.3 MDIO 0. 参考文档 网卡构造:MAC与PHY的关系&…

ETLCloud工具让美团数据管理更简单

美团为第三方开发者和商家提供了一系列开放的API接口和工具,使其可以与美团的业务进行对接和集成,从而获得更多的业务机会和增长空间。 通过美团开放平台,第三方开发者和商家可以实现以下功能: 开放接口:美团开放平台…

乐得瑞推出1拖2功率分配快充线方案,支持数据传输

随着PD3.1协议的市场应用越来越多,一些充电器的Type-C接口的输出功率达到百瓦及以上,如何充分利用好这类充电器设备,乐得瑞电子推出1拖2快充线缆解决方案,支持智能功率分配策略。 上图是乐得瑞1拖2功率分配快充线样线实物&#…

文件包含漏洞的 00截断

isset()函数若变量不存在则返回 FALSE;若变量存在且其值为NULL,也返回 FALSE。若变量存在且值不为NULL,则返回 TURE %00是被服务器解码为0x00发挥了截断作用。核心是chr(0)字符 00截断上传原理 - 知乎 协议参考地址&…

数据结构---栈和队列

栈(Stack) 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&#xff1…

vue-cli vue3

安装 cli npm i -g vue/cli4.5.13查看版本:vue -V升级版本:npm update -g vue/cli 升级 在 v 3.0.0 版本中是不支持的最新的 script setup 语法执行指令升级: npm i vue3.2.8 vue-router4.0.11 vuex4.0.2 "vue": "^3.2.8&q…

智云谷再获AR HUD新项目定点,打开HUD出口海外新通道

深圳前海智云谷科技有限公司(以下简称“智云谷”)于近日收到国内某新能源车企的《定点通知书》,选择智云谷作为其新车型AR HUD开发与量产供应商。智云谷获得定点的车型为海外出口车型,该车型预计在2024年下半年量产。 中国汽车全产业链出海“圈粉” 随…

【数据结构】对称二叉树 另一颗树的子树(六)

目录 一,对称二叉树 题目详情: 解题思路: 思路实现: 源代码: 二,另一颗树的子树 题目详情: 解题思路: 思路实现: 源代码: 前言: 接下来…

MySQL数据库详解 二:数据库的高级语言和操作

文章目录 1. 克隆表 ---- 将数据表的数据记录生成到新的表中1.1 方式一:先创建新表,再导入数据1.2方式二:创建的时候同时导入 2. 清空表 ---- 删除表内的所有数据2.1 delete删除2.2 truncate删除(重新记录)2.3 创建临时…