将近 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
文件中,导入 path
或 re_path
函数来定义路由的模式。导入 include
函数,以便将子路由包含在主路由配置中。
from django.urls import path, include
在 urls.py
文件中,定义你的子路由配置。你可以使用 path
或 re_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
参数设置为 False
,JsonResponse
将允许返回非字典数据。但是,请确保您知道您正在返回的数据类型,以避免可能的安全漏洞。
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-engine
或 django-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 模型,其中包含 name
和 age
字段。最后,在视图函数中,我们使用 MyModel.objects.all()
来获取所有模型对象,并将其传递给模板进行渲染。
请注意,这只是一个简单的示例,你可以根据你的具体需求进行更复杂的操作。另外,还有其他第三方库可以用于 Django 和 MongoDB 的集成,你可以根据自己的喜好和需求选择合适的库。
相关文章:
将近 5 万字讲解 Python Django 框架详细知识点(更新中)
Django 框架基本概述 Django 是一个开源的 Web 应用后端框架,由 Python 编写。它采用了 MVC 的软件设计模式,即模型(Model)、视图(View)和控制器(Controller)。在 Django 框架中&am…...
Arcgis提取每个像元的多波段反射率值
Arcgis提取每个像元的多波段反射率值 数据预处理 数据预处理阶段需要对遥感图像进行编辑传感器参数、辐射定标、大气校正、正射校正,具体流程见该文章 裁剪研究区 对于ENVI处理得到的tiff影像,虽然是经过裁剪了,但是还存在黑色的背景值&a…...
JavaScript面试题整理(一)
数据类型篇 1、JavaScript有哪些数据类型,它们的区别是什么? 基本数据类型:number、string、boolean、undefined、NaN、BigInt、Symbol 引入数据类型:Object NaN是JS中的特殊值,表示非数字,NaN不是数字…...
数据结构:树和二叉树之-堆排列 (万字详解)
目录 树概念及结构 1.1树的概念 1.2树的表示 编辑2.二叉树概念及结构 2.1概念 2.2数据结构中的二叉树:编辑 2.3特殊的二叉树: 编辑 2.4 二叉树的存储结构 2.4.1 顺序存储: 2.4.2 链式存储: 二叉树的实现及大小堆…...
爬虫入门基础:深入解析HTTP协议的工作过程
目录 一、HTTP协议简介 二、HTTP协议的工作过程 三、请求方法与常见用途 四、请求头与常见字段 五、状态码与常见含义 六、进阶话题和注意事项 总结 在如今这个数字化时代,互联网已经成为我们获取信息、交流和娱乐的主要渠道。而在互联网中,HTTP协…...
k8备份与恢复-Velero
简介 Velero 是一款可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷等资源的备份恢复软件。 Velero 实现的 kubernetes 资源备份能力,可以轻松实现 Kubernetes 集群的数据备份和恢复、复制 kubernetes 集群资源到其他kubernetes 集群或者快速复制生产环境…...
基于Python开发的火车票分析助手(源码+可执行程序+程序配置说明书+程序使用说明书)
一、项目简介 本项目是一套基于Python开发的火车票分析助手,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,…...
旺店通·企业奇门与金蝶云星空对接集成订单查询连通销售订单新增(旺店通销售-金蝶销售订单-小红书)
旺店通企业奇门与金蝶云星空对接集成订单查询连通销售订单新增(旺店通销售-金蝶销售订单-小红书) 接通系统:旺店通企业奇门 慧策最先以旺店通ERP切入商家核心管理痛点——订单管理,之后围绕电商经营管理中的核心管理诉求,先后布局流量获取、会…...
卡尔曼滤波应用在数据处理方面的应用
卡尔曼滤波应用到交通领域 滤波器介绍核心思想核心公式一维卡尔曼滤波器示例导入所需的库 滤波器介绍 卡尔曼滤波器是一种用于估计系统状态的数学方法,它以卡尔曼核心思想为基础,广泛应用于估计动态系统的状态和滤除测量中的噪声。以下是卡尔曼滤波器的核…...
PROFIBUS主站转ETHERCAT协议网关
产品介绍 JM-DPM-ECT是自主研发的一款PROFIBUS-DP主站功能的通讯网关。该产品主要功能是将各种PROFIBUS-DP从站接入到ETHERCAT网络中。 本网关连接到PROFIBUS总线中作为主站使用,连接到ETHERCAT总线中作为从站使用。 产品参数 技术参数 ◆ PROFIBUS-DP/V0 协议符…...
Vue路由的使用及node.js下载安装和环境搭建
目录 一、Vue路由 1.1 简介 ( 1 ) 特点 ( 2 ) 作用 1.2 实例 ( 1 ) 引入 ( 2 ) 组件 ( 3 ) 关系 ( 4 ) 路由 ( 5 ) 事件 ( 6 ) 锚点 二、nodeJS 2.1 下载 2.2 安装 2.3 环境搭建 新增 添加 测试 配置 运行 一、Vue路由 1.1 简介 Vue路由是Vue.…...
【算法训练-二叉树 三】【最大深度与直径】求二叉树的最大深度、求二叉树的直径
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【求二叉树的直径】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件…...
查看linux是centos还是Ubuntu
查看linux是centos还是Ubuntu 命令:cat /etc/os-release...
win10怎么关闭自动更新,这个方法你知道吗?
Windows 10 操作系统自动更新是确保系统安全性和性能的关键功能。然而,有时用户可能希望手动控制更新,因此关闭自动更新可能是一个有用的选项。在本文中,我们将介绍win10怎么关闭自动更新的两种方法,以满足用户不同的需求。 方法1…...
「语音芯片」常见的OTP芯片故障分析
OTP语音芯片是指一次性可编程语音芯片,语音只能烧写一次,适合应用在不需要修改语音、语音长度短的场合,从放音的长度上可以分为20秒、40秒、80秒、170秒、340秒。语音芯片的特点是单芯片方案、价格便宜,适合批量生产,即便是小数量…...
孩子写作业买什么样台灯合适?适合孩子读写台灯推荐
现在孩子的普遍都存在视力问题,而导致孩子近视的原因可能跟光线太强或太弱、不用的用眼习惯、长时间的过度用眼等因素有关,根据数据表明目前中国近视患者人数达到6亿多,其中儿童青少年的视力不良率甚至高达八成,所以在孩子的学习道…...
DBAPI插件开发指南
DBAPI插件开发指南 插件市场 您可以去插件市场下载插件 插件的作用 DBAPI的插件分4类,分别是数据转换插件、缓存插件、告警插件、全局数据转化插件 缓存插件 对执行器结果进行缓存,比如SQL执行器,对查询类SQL,sql查询结果进…...
线程池使用之自定义线程池
目录 一:Java内置线程池原理剖析 二:ThreadPoolExecutor参数详解 三:线程池工作流程总结示意图 四:自定义线程池-参数设计分析 1:核心线程数(corePoolSize) 2:任务队列长度(workQueue) 3:最大线程数(maximumPoolSize) 4:最…...
Puppeteer无头浏览器:开启自动化之门,掌握浏览器世界的无限可能
大概还是入门期,我曾用Puppeteer做爬虫工具以此来绕过某网站的防爬机制。近期有需求要做任意链接网页截图,像这种场景非常适合用Puppeteer完成。无头浏览器我已知的还有Selenium。 完成截图需求踩的最大的坑不是具体的逻辑代码,而是Docker部…...
Ubuntu 23.10/24.04 LTS 放弃默认使用 snap 版 CUPS 打印堆栈
导读Canonical 的开发者、OpenPrinting 的项目负责人 Till Kamppeter 今年 5 月表示,计划在 Ubuntu 23.10(Mantic Minotaur)上默认使用 Snap 版本的 CUPS 打印堆栈。 不过经过数月的测试,官方放弃了这项决定。Ubuntu 23.10&#x…...
Linux CentOS7 history命令
linux查看历史命令可以使用history命令,该命令可以列出所有已键入的命令。 这个命令的作用可以让用户或其他有权限人员,进行审计,查看已录入的命令。 用户所键入的命令作为应保存的信息将记录在文件中,这个文件就是家目录中的一…...
XC5350A 单节锂电池保护芯片 过放2.9V/2.8V/2.4V保护IC
XC5350A产品是一个高集成度的鲤离子/聚合物电池保护解决方案。XC5350A包含先进的功率MOSFET,高精度电压检测电路和延迟电路XC5350A放入一个超小型SOT23-5封装,只有一个外部元件使其成为在电池组有限的空间的理想解决方案。 XC5350A具有包括过充ÿ…...
单片机论文参考:1、基于单片机的电子琴
摘要 随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们都会抽空欣赏世界名曲,作为对精神的洗礼。本论文设计一个基于单片机的简易电子琴。电子琴是现代电子科技与音乐结合的产物,是一…...
Opencv源码解析(2)算法
目录 一,直方图均衡 1,直方图统计 2,灰度变换 3,直方图均衡 二,可分离滤波器 1,可分离滤波器的工厂 2,ocvSepFilter、sepFilter2D 3,Sobel 三,相位相关法 phase…...
让Mac菜单栏变得更加美观整洁——Bartender 5
Bartender 5是一款Mac电脑上的菜单栏图标管理软件,能够帮助您把菜单栏上的图标整理得更加美观、整洁和易于使用。如果您的菜单栏上充斥着许多图标,导致视觉上很不舒适和疲劳,那么Bartender 5就是解决这一问题的最佳选择! Bartend…...
服务器迁移:无缝过渡指南
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
安卓开发中ViewBinding的使用
在安卓开发中,ViewBing 的作用就是简化 findViewById() 代码的写法。 看看下面的替换: etbinding.text //etfindViewById(R.id.text) 下面就看看怎么用的, 首先,打开app模块的build.gradle,然后添加如下代码&…...
【初阶数据结构】树(tree)的基本概念——C语言
目录 一、树(tree) 1.1树的概念及结构 1.2树的相关概念 1.3树的表示 1.4树在实际中的运用(表示文件系统的目录树结构) 二、二叉树的概念及结构 2.1二叉树的概念 2.2现实中真正的二叉树 2.3特殊的二叉树 2.4二叉树的性质…...
二叉树知识点
1.霍夫曼编码 这位作者写的很清楚 哈夫曼编码详解——图解真能看了秒懂_已知字符集abcdef,若各字符出现的次数_Young_IT的博客-CSDN博客 2.满二叉树与完全二叉树 满二叉树是指每层数量是pow(2,n-1)个节点,总节点数是pow(2,n)-1; 而完全二叉树是指最后一层不一定…...
Day69:283. 移动零、11. 盛最多水的容器、42. 接雨水
283. 移动零 leetcode链接:https://leetcode.cn/problems/move-zeroes/ 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:…...
做网站新闻/网站关键词优化方案
又是汉诺塔~ 回顾一下汉诺塔的移动过程。 从左到右设为A,B,C 3个盘子的时候 1: No.1 A -> C 2: No.2 A -> B 3: No.1 C -> B 4: No.3 A -> C 5: No.1 B -> A 6: No.2 B -> C 7: No.1 A -> C .把第n个盘子移动到C前,第n-1个盘子要移动到…...
360免费建站永久免费/疫情二十条优化措施
时常想对工作,技术上的知识做一些总结,囿于工作繁杂,思路又常常信马由缰,总是虎头蛇尾。后来看到阮一峰老师的每周分享,感觉这种形式挺好:形式不受拘泥,题材灵活可以涉及技术生活各方面。 成功就…...
专门做钣金的网站/温州高端网站建设
我需要合并/加入包含数组的多个json字符串(也需要合并),但是我不知道实现此目的的最佳方法是什么:JSON字符串的初始数组(在下面的示例中称为$ rrDatas):Array([0] > {"asset":[1],"person":[1]}[1] > {"asset…...
给自己的网站做软件测试 步骤/优化服务内容
正题第四题:[SDOI2009]Elaxia的路线这道题好像很麻烦。。。首先我们可以知道,如果边(x,y,c)为x1到y1最短路路径上的一条边,那么它肯定满足d[x1][x]d[y][y1]cd[x][y] || d[x1][y]d[x][y1]cd[x][y]那么知道了这个东西,我…...
深圳网站搜索优化/外链网盘
2019独角兽企业重金招聘Python工程师标准>>> 1.直接从apk上获取 将apk后缀改为zip,用WinRAR打开,将META-INF/CERT.RSA解压出来,比如说解压到D:\CERT.RSA 命令行底下用 D:\android\project>keytool -printcert -file "D:\C…...
重庆交通大学官网网站/百度模拟点击软件判刑了
前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有一个线程在工作。相当于还是以前…...