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 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 和其他第三方 Python 模块一样,会在当前 python 环境下的 lib>site-package
中,只是 Django 是比较大的那种模块。并且 Django这个包呢同时会生成 django-admin.exe
在 Scripts 文件夹中,这个 exe 可执行文件是帮助我们操作 Django
项目的。
通过 cmd terminal 终端创建初始化 django 框架
django-admin startproject 【项目名称 例如:HelloDjango】
默认生成文件概述
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 配置
在 Django 中,“migrate” 是指数据库迁移的过程,用于将模型定义转化为数据库的实际表结构。当你在 Django 中修改了模型(models.py)后,你需要使用 Django 的迁移工具来更新数据库,以保持代码和数据库的一致性。
修改模型
在你的应用的 models.py 文件中修改模型定义。例如,添加一个新的字段或者修改一个现有的字段。
创建迁移文件
python manage.py makemigrations
这将为你的应用创建一个新的迁移文件,该文件描述了模型的更改。
查看迁移文件
Django 会创建一个新的迁移文件,并将其放在你的应用的migrations目录中。你可以查看该文件,以了解模型更改的具体内容。
迁移数据库
运行以下命令将模型的更改应用到数据库中:
python manage.py migrate
这将执行迁移文件中的所有操作,并将模型的更改应用到数据库中。这些步骤将帮助你在 Django 中执行数据迁移,确保代码和数据库的一致性。
请注意,在执行迁移之前,请确保你已经备份了数据库,以防意外发生。
根路由配置
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
文件中,导入 path
或 re_path
函数来定义路由的模式。导入 include
函数,以便将子路由包含在主路由配置中。
from django.urls import path, include
在 urls.py
文件中,定义你的子路由配置。你可以使用 path
或 re_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 中,您可以使用 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
参数设置为 False
,JsonResponse
将允许返回非字典数据。但是,请确保您知道您正在返回的数据类型,以避免可能的安全漏洞。
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-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 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 模型,其中包含 name
和 age
字段。最后,在视图函数中,我们使用 MyModel.objects.all()
来获取所有模型对象,并将其传递给模板进行渲染。
请注意,这只是一个简单的示例,你可以根据你的具体需求进行更复杂的操作。另外,还有其他第三方库可以用于 Django 和 MongoDB 的集成,你可以根据自己的喜好和需求选择合适的库。