目录
- 一、框架简介
- 二、MVT模型简介
- 三、Python的虚拟环境
-
- 3.1 安装virtualenv 虚拟环境
- 3.2 创建和使用虚拟环境
- 四、Django项目的搭建
-
- 4.1 安装Django包
- 4.2 创建Django项目
- 4.3 创建Django项目的应用
- 4.4 使用pycharm打开Django项目
- 4.5 注册Django项目的应用
- 4.6 启动Django项目
- 五、ORM框架
-
- 5.1 模型类的设计
- 5.2 创建模型类
- 5.3 生成迁移文件
- 5.4 执行迁移生成表
- 5.5 查看Django的默认数据库
- 5.6 通过模型类操作数据库表
-
- 1. 插入记录
- 2. 更新记录
- 3. 删除记录
- 5.7 一对多模型操作
-
- 1. 建立一对多关系模型
- 2. 生成迁移文件和执行迁移
- 3. 通过模型类操作数据库
- 4. 关系字段类型
- 5.8 后台管理
-
- 1. 本地化设置
- 2. 创建管理账号
- 3. 进入后台管理页面
- 4. 在后台管理中管理数据库
- 5. 自定义模块管理类
- 5.9 配置使用mysql数据库
-
- 1. 安装mysql驱动
- 2. 配置django项目的数据库连接
- 3. 执行迁移操作
- 5.10 常用字段类型
- 5.11 常用字段约束
- 5.12 查询集
-
- 1. 常用函数
- 2. 两大特性
- 3. 查询集的缓存
- 4.限制查询集
- 5.13 F对象查询
-
- 1. 更新字段值
- 2. 在查询中比较字段值
- 3. 在聚合操作中使用
- 5.14 Q对象查询
- 5.15 聚合函数
- 5.16 关联查询
-
- 1. 通过对象执行关联查询
- 2. 通过模型类执行关联查询
- 六、视图
-
- 6.1 定义视图处理函数
- 6.2 添加视图的url配置
- 6.3 如何在url配置中处理参数传递
-
- 1. 路径参数(Path Parameters)
- 2. 查询参数(Query Parameters)
- 6.4 常用的路径参数语法
- 七、模板
-
- 7.1 定义模板文件夹
- 7.2 定义模板文件
- 7.3 编辑视图处理函数
- 7.4 常用的模板语法
-
- 1. 变量插值
- 2. 条件语句
- 3. 循环
- 4. 包含子模板
- 八、MVT综合案例
-
- 8.1 添加url配置
- 8.2 添加视图处理函数
- 8.3 添加模板类
- 8.4 效果图
一、框架简介
Django是劳伦斯出版集团的开发人员为开发新闻内容网站而设计出来的一个软件,它遵循MVC思想,但是有自己的一个名词,叫做MVT。
Django遵循快速开发和DRY原则。Do not repeat yourself.不要自己去重复一些工作。
它提供了许多有用的工具和功能,使开发者能够轻松地构建高度可拓展、安全、高性能的 Web 应用。
以下是一些 Django 框架的主要特点:
- 强大的路由系统:Django 提供了易于配置和管理 URL 路由的功能,使开发者能够定义页面和应用程序的 URL 映射。
- 数据模型和数据库支持:Django 提供了强大的数据模型层,使用它可以轻松地定义数据库模式和对数据进行管理。它支持多个数据库后端,如 PostgreSQL、MySQL、SQLite 等。
- 表单处理:Django 提供了易于处理和验证表单数据的功能,使开发者能够轻松地创建和处理各种表单,包括用户注册、登录、数据输入等。
- 身份验证和授权:Django 内置了用户身份验证和授权系统,可轻松管理用户注册、登录和权限控制。
- 自动化管理界面:Django 自动生成管理界面,使开发者可以方便地管理网站的后台内容,如数据库记录、用户信息等。
- 丰富的工具和库:Django 拥有大量的内置工具和库,使开发过程更加高效。例如,它提供了自动化的表单验证、国际化和本地化支持、缓存管理、安全性和防护等方面的工具和库。
- 良好的可扩展性和高性能:Django 架构具有良好的可扩展性,在处理高流量和大量数据的应用程序时表现出色。
二、MVT模型简介
MVT 模型是 Django 框架中的一种设计模式,用于组织和管理 Web 应用的结构和业务逻辑。MVT 是指 Model(模型)、View(视图)、Template(模板)。
以下是 MVT 模型中的各个组件的功能和职责:
- Model(模型):模型代表数据的结构、字段和关系。在 Django 中,模型是用于定义数据表结构的 Python 类。它定义了应用程序所需的数据库模式,并提供了访问、操作和查询数据库的方法。模型通常映射到数据库表,并通过对象关系映射(ORM)来进行数据库操作。
- View(视图):视图是处理 Web 请求的代码逻辑部分,它充当了控制器的角色。负责视图接收请求,并根据业务逻辑获取(或修改)所需的数据。在 Django 中,视图通常是一个 Python 函数或类,它接收请求对象作为输入,并返回一个响应对象,可以是 HTML 内容、JSON 数据等。
- Template(模板):模板是用于呈现数据和生成最终输出的视图层。模板使用一种模板语言,结合传递给模板的数据,生成最终的输出结果。在 Django 中,模板通常是包含 HTML 和模板标记的文本文件,可以包含动态的数据、条件语句、循环等。
MVT 模型的工作流程如下:
- 当用户请求一个 URL 时,Django 的 URL 路由系统会将该请求与对应的视图函数或类匹配。
- 视图函数或类接收请求对象,并根据业务逻辑处理请求,可能会涉及到查询数据库、处理表单数据等。
- 视图函数或类将处理后的数据传递给指定的模板进行呈现。
- 模板根据接收到的数据生成最终的 HTML 内容,在服务器上生成响应。
- 服务器将响应发送给用户的浏览器,用户可以在浏览器中看到生成的 HTML 页面。
下面是一个MVT模型的交互图示例:
三、Python的虚拟环境
Python的虚拟环境是一个独立的、隔离的Python开发环境,它允许您在同一系统上同时管理多个不同的Python项目,每个项目都可以有自己的依赖包和配置。使用虚拟环境可以避免不同项目之间的包冲突,并提供了一种干净的开发环境。
通过创建虚拟环境,您可以在其中安装和管理特定于每个项目的Python包和依赖项,而不会干扰系统级Python安装和其他项目的依赖项。这样可以确保项目在不同环境下的一致性,并提供更好的隔离性和可移植性。
Python有多种工具可以创建和管理虚拟环境,最常用的是venv模块(自Python 3.3开始内置)和第三方工具如virtualenv和conda。使用这些工具,您可以在您选择的目录中创建一个独立的Python环境,并在其中安装所需的库和工具。
创建虚拟环境后,您可以激活它并在其中运行Python解释器,然后您在该环境中安装的所有软件包和依赖项都将在该环境中使用。这使得您可以在不同的项目之间切换,而无需担心包版本冲突或项目特定的配置问题。
总结来说,Python的虚拟环境是一种用于在同一系统上隔离管理多个Python项目的机制,它提供了依赖包隔离、环境隔离和更好的项目管理能力。这是Python开发中的重要工具,尤其是在大型项目或需要使用不同Python版本的项目中。
3.1 安装virtualenv 虚拟环境
(1) 在Linux系统上的安装步骤:
- sudo pip install virtualenv #安装虚拟环境
- sudo pip install virtualenvwrapper #安装虚拟环境扩展包
- mkdir ~/.virtualenvs #在home目录下创建存放虚拟环境的文件夹
- 编辑home目录下面的.bashrc文件,添加下面两行。
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
- 使用source .bashrc使其生效一下。
(2) 在Mac上的安装步骤:
- 先确认输入pip -V查看的版本和安装路径是和你所安装的python3版本一致的, 例如:
- sudo pip install virtualenv #安装虚拟环境
- sudo pip install virtualenvwrapper #安装虚拟环境扩展包
- mkdir ~/.virtualenvs #在home目录下创建存放虚拟环境的文件夹
- 编辑home目录下.bash_profile文件,添加下面两行
export WORKON_HOME=$HOME/.virtualenvs
source /Library/Frameworks/Python.framework/Versions/3.11/bin/virtualenvwrapper.sh
注意:如果您使用 pip 命令以系统管理员身份(使用 sudo)安装了 virtualenvwrapper,它通常会被安装在pip命令所在的Python版本的路径下。例如我的python3.11.4是在/Library/Frameworks/Python.framework/目录下。如果不确定pip命令安装virtualenvwrapper时的安装路径和版本可以通过下面命令查找.
查看版本:
使用pip list 或者 pip freeze, 例如:
查看路径使用pip show, 例如:
6. 使用source .bash_profile使其生效一下。
如果遇到下面的问题:
可以看到 Python 虚拟环境所用的 Python 解释器路径为 /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python,而 virtualenvwrapper.sh 文件无法从该路径中导入所需的模块。
解决这个问题的方法是,确保您的 virtualenvwrapper 是针对您所使用的 Python 版本进行安装的,并使用相应的 Python 解释器来加载 virtualenvwrapper。
我这边可以很明确的知道virtualenvwrapper是安装在python3.11.4版本下的, 因此按照错误提示,我们需要修改VIRTUALENVWRAPPER_PYTHON的环境变量,将其指定到python3.11.4的解释器上, 继续编辑~/.bash_profile文件添加下面环境变量
export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.11/bin/python3
当您在创建和管理虚拟环境时,virtualenvwrapper 会使用该环境变量中指定的 Python 解释器来运行虚拟环境。通过设置正确的 VIRTUALENVWRAPPER_PYTHON 环境变量,您可以确保 virtualenvwrapper 使用您希望的特定 Python 版本。
完成设置后,再次执行source ~/.bash_profile, 看到下面提示说明成功了.
此时会发现~/.virtualevns目录下多了很多文件,这些文件夹是 virtualenvwrapper 的一部分,用于存储关于虚拟环境的信息和自定义脚本。以下是其中一些文件和文件夹的说明:
- premkproject、postmkproject、initialize 以及其他以 premk、postmk、prerm、postrm、predeactivate、postdeactivate、preactivate、postactivate 等开头的文件:这些文件是用户自定义脚本文件,可以在创建、激活、停用等虚拟环境操作时触发执行用户定义的命令。
- get_env_details 文件:此文件包含一些有关虚拟环境的详细信息(例如名称、路径、Python 解释器等)
3.2 创建和使用虚拟环境
1.创建虚拟环境
mkvirtualenv -p python3 bj11_py3
上面的命令是使用 virtualenvwrapper 创建名为 bj11_py3 的虚拟环境,使用 Python 3 解释器的命令。
这个命令的各个部分的含义:
- mkvirtualenv:这是 virtualenvwrapper 提供的命令之一,用于创建虚拟环境(也称为虚拟 Python 环境)。
- -p python3:这是 mkvirtualenv 命令的一个选项,用于指定要用于创建虚拟环境的 Python 解释器版本。在这种情况下,python3 表示使用 Python 3 解释器。
- bj11_py3:这是要创建的虚拟环境的名称。您可以将其替换为您自己想要的任何名称。虚拟环境名称应该是唯一的,在您的开发中有意义,并具有描述性。
运行上面命令后,可以在~/.virtualenvs目录下看到创建的虚拟环境
2.进入虚拟环境
workon bj11_py3
这样就可以进入刚刚创建的Python虚拟环境了.
注意: 在激活(或进入)虚拟环境后,您可以执行的所有命令都将在该虚拟环境中执行。例如你在虚拟环境中执行which Python命令,查看当前的Python命令路径会显示为虚拟环境下的Python路径, 如下图所示:
3. 退出虚拟环境
deactivate
运行上面命令可以退出当前进入的虚拟环境
4.删除虚拟环境
rmvirtualenv bj11_py3
运行上面命令将会删除bj11_py3虚拟环境 ,同时也会删除在~/.virtualenvs目录下创建bj11_py3文件夹
5.虚拟环境下安装包
pip install 包名
注意:不能使用sudo pip install 包名,这个命令会把包安装到真实的主机环境上而不是安装到虚拟环境中。
虚拟环境下安装的包会存在虚拟环境/lib/pythonxxx/site-packages目录下
6.查看虚拟环境下所安装的包
pip list 或者 pip freeze
例如新创建的虚拟环境默认会有安装下面的包
四、Django项目的搭建
4.1 安装Django包
进入到Python的虚拟环境中执行安装, 安装的方式还是使用pip命令安装, 只是在虚拟环境下执行, 会将安装包安装到虚拟环境的对应目录下, 例如:
workon bj11_py3 # 进入bj11_py3虚拟环境
pip install django # 开始安装django
上面方式安装包会安装最新的版本(当前最新版本是4.2.4), 如果要指定安装对应的版本,可以这样
pip install django==1.8.2 # 指定安装1.8.2版本的django
注意:
安装同一个包的多个版本, 后面安装的版本会覆盖前面安装的版本.
安装完后, 就可以在虚拟环境的找到django包了
4.2 创建Django项目
使用命令:django-admin startproject [项目名] 注意:创建应用必须先进入虚拟环境。
以在2023_py3虚拟目录下创建day01项目为例, 大致步骤如下:
mkvirtualenv 2023_py3 # 创建虚拟环境
workon 2023_py3 # 切换到虚拟环境
pip install django # 在虚拟环境下安装django
django-admin startproject day01 #创建django项目
运行完上面命令后, 会在当前命令提示符所在的路径下创建一个day01的文件夹, 里面包含如下内容:
由于我们当前命令的提示符是在~(home)目录下的,所以day01其实是在home目录下的, 而不是在虚拟环境下的, 也就是说普通的shell命令还是运行在系统环境中的.
上面文件的说明如下:
- init.py:此文件是一个空文件,用于指示day01文件夹是一个Python包。
- asgi.py:这是一个ASGI(Asynchronous Server Gateway Interface)应用程序的入口点。ASGI是一种为Python Web应用程序提供异步通信的接口。
- settings.py:这个文件包含了Django项目的所有配置。您可以在这里设置数据库、静态文件路径、应用程序和中间件等。
- urls.py:这个文件定义了项目的URL映射关系,决定了请求的URL应该由哪个视图处理函数来处理。
- wsgi.py:这是一个WSGI(Web Server Gateway Interface)应用程序的入口点。WSGI是一种为Python Web应用程序提供通用接口的标准。
- manage.py:这是一个Django命令行工具,用于管理和操作Django项目。您可以使用它运行开发服务器、执行数据库迁移、创建管理员用户等。
4.3 创建Django项目的应用
在Django中,应用(App)是指一个可重用的独立模块,用于实现特定功能或提供特定服务。每个Django项目都由一个或多个应用组成,这些应用可以是您自己编写的应用,也可以是其他开发者编写的应用。
应用通常是一个具有特定功能的集合,例如用户认证、博客、论坛等。它们可以包含模型(Model)、视图(View)和模板(Template),以及其他一些文件和逻辑,用于处理相关的业务逻辑和数据操作。
使用应用的好处是可以实现模块化和重用性。您可以编写一次应用代码,并在多个项目中重复使用它。应用可以独立开发、测试和维护,使项目结构更加清晰和可扩展。
在Django中,您可以使用以下命令创建新的应用:
cd django项目的根路径
python manage.py startapp [应用的名称]
例如:
(2023_py3) chenyousheng@chenyoushengdeMac-mini ~ % cd day01
(2023_py3) chenyousheng@chenyoushengdeMac-mini day01 % ls
day01 manage.py
(2023_py3) chenyousheng@chenyoushengdeMac-mini day01 % python manage.py startapp booktest
Traceback (most recent call last):
File "/Users/chenyousheng/day01/manage.py", line 11, in main
from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/chenyousheng/day01/manage.py", line 22, in <module>
main()
File "/Users/chenyousheng/day01/manage.py", line 13, in main
raise ImportError(
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?
如果遇到上面的错误一般有2个原因:
- 你的虚拟环境没有激活, 也就是没有执行workon命令进入指定的虚拟环境
- 你的python命令关联的是系统的python路径, 并没有关联到虚拟机环境中的python命令, 由于你系统的python环境中没有安装django导致的.
我这边是因为第2个原因, 因为之前在.bash_profile中添加alias别名, 将python指定了系统的python3.11.4命令,通过在控制台中输入which python也可以发现这个问题:
可以看到python执行的路径是/usr/local/bin/python3, 这个路径并不是~/.virtualenvs开头的路径, 因为我们虚拟环境都是安装在~/.virtualenvs目录下的.
解决办法很简单, 直接把alias干掉即可. 有两种办法:
- 使用unalias命令删除别名只会在当前会话中生效,相当于临时删除别名。如果您重新启动终端或注销/登录系统,别名将会恢复。
- 如果您希望永久删除别名,请编辑相应的配置文件(例如.bashrc或.bash_profile),找到别名的设置并将其删除或注释掉。保存更改后,重新加载终端或运行source命令以使更改生效。
在Mac上,常见的位置是在~/.bash_profile文件中设置别名。您可以使用文本编辑器打开这个文件并注释或删除相关的别名行。
去掉别名后, 再执行which python命令就可以看到使用的是虚拟环境下的python了
此时, 再次在day01目录下执行下面命令:
python manage.py startapp booktest
不报错说明创建应用成功了, 然后通过tree命令可以查看应用的目录结构如下:
上面文件的说明如下:
- init.py:这是一个空的__init__.py文件,用于将目录booktest标记为Python包。
- admin.py:这个文件通常用于定义与Django后台管理相关的模型注册和配置选项。
- apps.py:这个文件是应用程序的配置文件,可以在其中进行应用程序的特定配置。
- migrations:这个目录通常用于存储Django数据库迁移的相关文件,其中的__init__.py表示该目录是一个Python包。
- models.py:这个文件通常用于定义Django模型,即数据库表的结构和字段。
- tests.py:这个文件通常用于编写Django应用程序的测试代码。
- views.py:这个文件通常用于定义Django视图,即处理HTTP请求并返回HTTP响应的函数或类。
4.4 使用pycharm打开Django项目
例如用pycharm打开~/day01的项目, 你会发现此时idea使用的python解释器还是系统之前安装版本的解释器
此时我们需要修改为我们虚拟机环境下的解释器, 可以这样操作: Preferences>Project:day01>Python Interpreter> 点击右侧齿轮按钮选择Add
然后找到虚拟环境中的Python解释器
点击OK返回就可以看到切换成功了.
然后回到pycharm左侧界面可以看到python解释器已经变成了虚拟环境下的版本了.
然后随便打开一个python文件,会看到django包需要安装,直接安装即可
4.5 注册Django项目的应用
建立应用和项目之间的联系,需要对应用进行注册。修改settings.py中的INSTALLED_APPS配置项。
4.6 启动Django项目
在当前项目根路径下执行
python manage.py runserver
出现上面界面说明启动成功了, 此时浏览器输入http://127.0.0.1:8000/可以看到下面的界面
但是你会发现上面的控制台中还出现了这个错误:
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
意思您有18个未应用的迁移。在应用程序迁移之前,您的项目可能无法正常工作:管理员、身份验证、内容类型、会话。运行"python manage.py migrate"来应用它们。
这个按照提示执行"python manage.py migrate"就可以了, 先在控制台按ctrl+c结束项目, 然后执行这条命令如下所示:
然后重新执行python manage.py runserver启动即可, 此时将不再看到有警告提示了:
python manage.py runserver命令默认在端口8000上启动开发服务器。如果您想要更改默认端口,可以在运行命令时指定不同的端口号。例如:python manage.py runserver 8080, 如下所示:
五、ORM框架
Django 的 ORM(对象关系映射)框架是 Django 提供的一个功能强大的工具,用于在 Python 代码和数据库之间进行交互。
ORM 框架的主要目标是在应用程序的数据模型和底层数据库之间建立映射关系,从而允许开发人员使用面向对象的方式操作数据库,而不是直接编写 SQL 查询。
Django 的 ORM 框架提供了一个高级 API,它使您能够使用 Python 类和方法来创建、读取、更新和删除数据库记录,而无需编写繁琐的 SQL 查询语句。
ORM 框架的常见用法包括:
- 定义模型:您可以使用 Django 的 ORM 框架通过定义 Python 类来定义数据库的数据模型。这些类将被映射到数据库的表,每个类的属性对应于表中的列。
- 进行查询:Django ORM 框架提供了一种简洁和易于使用的查询语言,使您能够执行复杂的数据库查询。您可以使用链式调用和过滤器来过滤查询结果,或者使用聚合和注释来进行数据分析。
- 进行关联:Django ORM 框架使您能够通过定义关系字段来直接在模型之间建立关联。这样,您可以在模型之间轻松地进行关联查询,例如获取一个对象的关联对象,或者反向跟踪关联对象。
- 数据库迁移:Django ORM 提供了一个迁移系统,用于跟踪和应用数据库模式的更改。通过迁移,您可以轻松地对数据库结构进行版本控制,并在开发过程中进行更新和升级。
ORM 框架的好处包括提高开发效率、提供易于维护和阅读的代码、提供数据库的平台无关性等。
使用 Django 的 ORM 框架,您可以将精力集中在应用程序的业务逻辑上,而无需过多关注底层数据库的操作。
5.1 模型类的设计
设计 Django 中的模型类主要涉及如何映射数据库表和定义模型的字段。
下面是一些设计 Django 模型类的常见步骤和注意事项:
- 寻找实体和属性:首先确定您的应用程序需要管理哪些数据实体。每个实体将对应一个模型类。然后,为每个实体确定需要存储的属性,并将它们映射到模型类的字段。
- 寻找实体之间的关系:如果您的应用程序中的实体之间存在关系,例如一对多或多对多关系,需要在模型类之间定义适当的关系字段。这些关系字段将帮助您方便地进行关联查询和获取关联实体的数据。
- 选择合适的字段类型:Django 提供了多种字段类型,用于存储不同类型的数据。根据属性的特性,选择合适的字段类型。常见的字段类型包括字符字段(CharField)、整数字段(IntegerField)、日期时间字段(DateTimeField)等。
- 添加验证和约束:根据需求,可以在模型类中添加验证和约束,以确保数据的完整性和有效性。Django 提供了多种验证器和约束选项,例如最大长度、唯一性、必填性等。
- 处理外键关系:如果模型类之间存在外键关系,可以使用ForeignKey字段来定义关联。外键字段将帮助您建立模型之间的关联,并提供方便的查询和数据访问。
- 添加特定行为和方法:您可以为模型类添加自定义方法和属性,以提供特定的行为和操作。这些方法可以对模型对象进行操作,执行业务逻辑或进行其他计算。
- 迁移和更新数据库:一旦您设计完模型类,使用 makemigrations 命令来生成迁移文件,然后使用 migrate 命令将这些迁移应用到数据库中。这将创建或更新数据库中的相应表和列。
5.2 创建模型类
如果我想在booktest应用的models.py中添加一个BookInfo类作为模型类, 可以这样定义:
from django.db import models
# Create your models here.
# 图书类
class BookInfo(models.Model):
"""图书模型类"""
# 图书的标题: btitle代表数据库表中的btitle字段,CharField说明是一个字符串,max_length指定字符串的最大长度
btitle = models.CharField(max_length=20)
# 图书的出版日期: bpub_date代表数据库中bpub_date字段,DateField说明是日期类型
bpub_date = models.DateField()
模型类中不需要指定id主键字段, 这个Django会帮我们自动生成.
5.3 生成迁移文件
有了模型类之后,我们还需要生成迁移文件, 在~/day01项目根路径下执行如下命令:
python manage.py makemigrations
成功后会看到生成的迁移文件所在的路径
对应项目的内容如下:
5.4 执行迁移生成表
在~/day01项目根路径下执行如下命令: