知行迭代
导航
首页
最近更改
随机页面
常用
分类目录
Linux命令
Mediawiki常用
电脑技巧
工具
链入页面
相关更改
特殊页面
页面信息
登录
查看“Django”的源代码
←
Django
页面
讨论
阅读
查看源代码
查看历史
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:[
[1]
]
您可以查看和复制此页面的源代码。
Django是一个开源的Web应用框架,使用[[Python]]编程语言写成。采用了MVT的软件设计模式,即模型(Model),视图(View)和模板(Template)。Django的主要目标是简化数据库驱动的网站的开发。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don't Repeat Yourself)。 ==简介== ===时间轴=== *2005年7月21日,使用BSD许可证发布。 *2008年6月17日,Django成立基金会。 ===安装=== 使用pip安装: pip install Django {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/topics/install/ Django 文档:如何安装 Django] }} ==快速入门== === 架构 === {{#drawio:Django架构}} ===第一个 Django 应用=== ====创建项目==== 打开命令行,cd 到一个你想放置你代码的目录,然后运行以下命令: <syntaxhighlight lang="bash" > django-admin startproject mysite # 在当前目录下初始化mysite app,而不是再创建一个mysite目录 # django-admin startproject mysite . </syntaxhighlight> {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/intro/tutorial01/#creating-a-project Django 文档:创建项目] }} ====启动简易服务器==== 打开命令行,cd进入到manage.py所在目录,然后运行以下命令: <syntaxhighlight lang="bash" > python manage.py runserver #默认监听本机内部 IP 的 8000 端口,也可以指定其他,如8002端口: python manage.py runserver 8002 </syntaxhighlight> 现在已经启动了Django 自带的用于开发的简易服务器。浏览器访问 https://127.0.0.1:8002/ ,就可以看到“祝贺”页面。 {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/intro/tutorial01/#the-development-server Django 文档:用于开发的简易服务器] }} ===启动关闭脚本=== 启动脚本,程序后台运行,关闭终端也不会停止。 <syntaxhighlight lang="bash" > #!/bin/bash logfile=django.log #设置日志文件 source env/bin/activate # 激活虚拟环境 # 后台运行 nohup python manage.py runserver 8002>$logfile 2>&1 & tail -f $logfile #监控日志 </syntaxhighlight> 关闭脚本,即关闭相应端口的程序,可以使用命令<code>kill $(lsof -t -i:8002)</code>,也可以写成脚本: <syntaxhighlight lang="bash" > port=8002 pid=$(lsof -t -i:$port) if [ ! -z "$pid" ]; then kill $pid echo "端口$port被占用, 结束进程$pid。" else echo "端口$port未使用。" fi </syntaxhighlight> ==URL 路由== URL路由在urls.py文件中配置,URL模式到视图函数的简单映射。 {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/topics/http/urls/ Django 文档:URL调度器] }} ==视图函数== 视图函数接收Web 请求并返回一个 Web 响应,这个响应可以是任何内容,如HTML内容、图片、重定向、404错误等。 {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/topics/http/views/ Django 文档:编写视图] }} ==模板== === 变量 === === 标签 === {| class="wikitable" style="width: 100%; ! 标签 ! 描述 ! 示例 |- | if | | |- | for | | |- | include | 嵌入一个模板。 | |- | extends | 该模板继承了一个父模板。 两种写法: <br /> <code>{% extends "base.html" %} </code> <br /> | |- | [https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins/#block block] | <syntaxhighlight lang="django" > {% block 块名称 %} ... {% endblock 块名称 %} </syntaxhighlight> 定义一个可以被子模板覆盖的块。更多信息请参见 [https://docs.djangoproject.com/zh-hans/3.2/ref/templates/language/#template-inheritance 模板继承]。 | |- | url | | |} {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins/ Django 文档:内置模板标签和过滤器] |}} === 过滤器 === 内置过滤器 {| class="wikitable" style="width: 100%; ! 过滤器 ! 描述 ! 示例 |- | add | 变量加上参数值。这个过滤器将首先尝试将两个值强制转为整数。 | <code><nowiki>{{ value|add:2}}</nowiki></code> value的值加2 <br /><code><nowiki>{{ value1|add:value2 }}</nowiki></code>value1加value2值。 |- | | | |} {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins/#built-in-filter-reference Django 文档:内置模板标签和过滤器] |}} ==数据模型== ===概览=== Django提供了ORM功能,能更方便管理数据库。对象关系映射Object-Relational Mapping(ORM),是使用面向对象的方式操作数据库,映射关系如下: {| class="wikitable" style="width: 100%; ! 数据库 ! 编程语言 |- | 表(table) | 类(class) |- | 记录(record)或称行 | 对象(object) |- | 字段(field)或称列 | 对象的属性(attribute) |} {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/topics/db/ Django 文档:模型和数据库] }} ===快速上手=== ==== 配置数据库 ==== ==== 定义模型 ==== 创建一个模型即创建一个表。每个模型都是一个 Python 的类,这些类继承 django.db.models.Model。如定义了一个 Photo模型,拥有title、image 和 upload_time字段 : <syntaxhighlight lang="python" > # 创建app:python manage.py startapp testapp, # 位于 testapp/models.py from django.db import models class Photo(models.Model): title = models.CharField('照片标题', max_length=50) image = models.ImageField(upload_to='photo/%Y%m%d/') upload_time = models.DateTimeField(default=now) def __str__(self): return self.image.name class Meta: ordering = ('-upload_time',) </syntaxhighlight> ==== 注册app ==== 需要将app名称加入到配置文件settings.py的INSTALLED_APPS。 <syntaxhighlight lang="python" > INSTALLED_APPS = [ # ... "testapp", # ... ] </syntaxhighlight> ==== 数据迁移 ==== 创建迁移文件:<code>python manage.py makemigrations testapp</code>。会在testapp/migrations创建一个将要执行的操作,如0001_initial.py <br /> 执行迁移:<code>python manage.py migrate testapp</code>,将迁移文件的建表或修改表应用到数据库上。 ==== 增删改查 ==== ===迁移=== {| class="wikitable" |- ! 命令 ! 描述 ! 示例 |- | makemigrations | 基于模型的修改创建迁移。 | <code>python manage.py makemigrations testapp</code>创建testapp所有模型的迁移文件 |- | migrate | 应用和撤销迁移。注意回滚迁移,可能会造成数据丢失。 |<code>python manage.py migrate testapp</code>应用迁移 <br /><code>python manage.py migrate testapp 0001</code>将数据库模式调整到适用指定迁移的状态。 <br /><code>python manage.py migrate testapp zero</code>撤销所有迁移,到最初状态。 |- | sqlmigrate | 显示迁移使用的SQL语句。 | <code>python manage.py sqlmigrate testapp 0001</code>显示迁移文件的SQL语句 testapp/migrations/0001_initial.py |- | showmigrations | 显示迁移文件和迁移状态。 | <code>python manage.py showmigrations testapp</code> <br /><code>python manage.py showmigrations</code> |} {{了解更多 |[https://docs.djangoproject.com/zh-hans/4.2/topics/migrations/ Django 文档:迁移] }} ===模型字段=== ====字段类型==== ====模型关联==== {| class="wikitable" ! 名称 ! 描述 ! 示例 |- | 多对一关联 <br /><code>ForeignKey</code> | | |- | 多对多关联 <br /><code>ManyToManyField</code> | | |- | 一对一关联 <br /><code> OneToOneField</code> | | |} {{了解更多 |[https://docs.djangoproject.com/zh-hans/4.2/topics/db/examples/ Django文档:模型关联 API 用法示例] }} ==表单== ===常用表单类=== {| class="wikitable" ! 名称 ! 描述 |- | Form | 最基础的表单。示例:<syntaxhighlight lang="python" > from django import forms class NameForm(forms.Form): your_name = forms.CharField(label="你的名字", max_length=100) </syntaxhighlight> |- | ModelForm | 一个模型的表单。是在Form的基础上,与模型关联,简化操作。示例: <syntaxhighlight lang="python" > from django.forms import ModelForm from myapp.models import Order class OrderForm(ModelForm): class Meta: model = Order fields = ["order_date", "customer"] </syntaxhighlight> |- | FormSet | 一组Form的集合,用于处理提交多个相同类型的数据。使用<code>formset_factory()</code>创建。 |- | ModelFormSet | 一组ModelForm的集合,用于处理提交多个模型实例数据。使用<code>modelformset_factory()</code>创建。 |- | InlineFormSet | 用于关联模型创建表单集,通常用于处理一对多关系。使用<code>inlineformset_factory()</code>创建。<br />示例,Order账单模型和OrderDetail账单明细模型:<syntaxhighlight lang="python" > from django import forms OrderDetailFormset = forms.inlineformset_factory(Order, OrderDetail, form=OrderDetailForm, extra=1) </syntaxhighlight> |} ==日志== === 概览 === Django 使用 Python 内置的 logging 模块处理系统日志。将下面一个简单的日志配置放入<code>settings.py</code>中,它将所有来自 django 命名的记录器的日志记录写入本地文件。 <syntaxhighlight lang="python"> LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/path/to/django/debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, } </syntaxhighlight> {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/topics/logging/ Django 文档:日志] }} === 日志配置 === {| class="wikitable" style="width: 100%; ! 名称 ! 描述 ! 示例 |- | [https://docs.djangoproject.com/zh-hans/3.2/topics/logging/#loggers Loggers] | '''日志系统的入口'''<br /> 由一个或多个logger组成,每个logger都是由名称和logger配置项组成。<br /><br />logger参数:<br /><code>level</code> 配置日志级别,可选值:DEBUG:排查故障时使用的低级别系统信息。INFO:一般的系统信息。WARNING:描述系统发生了一些小问题的信息。ERROR:描述系统发生了大问题的信息。CRITICAL:描述系统发生严重问题的信息。<br /><code>handlers</code> 配置使用的handler列表,如'handlers': ['handler1', 'handler2']。 |<syntaxhighlight lang="python"> 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, </syntaxhighlight> |- | [https://docs.djangoproject.com/zh-hans/3.2/topics/logging/#handlers Handlers] | '''处理logger消息'''<br />配置消息输出位置,屏幕、文件或网络 socket。和 logger 一样,handler 也有日志级别的概念。 | |- | [https://docs.djangoproject.com/zh-hans/3.2/topics/logging/#filters filters] | '''过滤器'''<br />在日志记录从 logger 传到 handler 的过程中,使用 Filter 来做额外的控制。 | |- | [https://docs.djangoproject.com/zh-hans/3.2/topics/logging/#formatters Formatters] | '''文本的格式'''<br /> 将日志记录文本按特定格式组织。 | |} {{了解更多 |[https://docs.djangoproject.com/zh-hans/3.2/topics/logging/ Django 文档:日志] }} ==生产部署== === 生产开发的settings === 在 Django 项目中,通常会为开发环境和生产环境分别配置不同的 settings 文件,以确保在不同环境中有适当的配置。常见做法:使用 settings/dev.py 和 settings/prod.py 文件分别用于开发和生产环境,而 settings/base.py 文件包含共享的基本配置。 <syntaxhighlight lang="text" > my_project/ |-- my_project/ | |-- settings/ | |-- __init__.py | |-- base.py | |-- dev.py | |-- prod.py |-- manage.py |-- ... </syntaxhighlight> 三个设置文件base.py、dev.py和prod.py的内容: <syntaxhighlight lang="python" > # my_project/settings/base.py from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent SECRET_KEY = 'your_secret_key' DEBUG = False ALLOWED_HOSTS = [] # ... 其他共享配置 ... # my_project/settings/dev.py from .base import * DEBUG = True # 开发环境数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # 其他开发环境特有的配置 # my_project/settings/prod.py from .base import * SECRET_KEY = 'your_production_secret_key' DEBUG = False ALLOWED_HOSTS = ['your_production_domain.com'] # 生产环境数据库配置,例如使用 PostgreSQL DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'your_production_db_name', 'USER': 'your_production_db_user', 'PASSWORD': 'your_production_db_password', 'HOST': 'localhost', 'PORT': '5432', } } # 其他生产环境特有的配置 </syntaxhighlight> 在修改manage.py,设置默认配置 <syntaxhighlight lang="python" > os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings.dev') </syntaxhighlight> 在电脑设置环境变量`DJANGO_SETTINGS_MODULE`来指定使用哪个配置文件。 <syntaxhighlight lang="bash" > # 在windows上 set DJANGO_SETTINGS_MODULE=my_project.settings.dev # 在 Linux 或 macOS 上 export DJANGO_SETTINGS_MODULE=my_project.settings.dev </syntaxhighlight> ==安全== ==资源== ===官网=== *Django 官网:https://www.djangoproject.com/ *Django 文档:https://docs.djangoproject.com/zh-hans/ ===相关教程=== *[https://developer.mozilla.org/zh-CN/docs/learn/Server-side/Django MDN:Django Web 框架(python)] *[https://www.liujiangblog.com/course/django/ 刘江:Django 教程] *[https://www.runoob.com/django/django-tutorial.html 菜鸟教程:Django 教程] *[https://www.w3cschool.cn/django/ w3cschool.cn:Django 中文教程] ===相关文章=== *[https://zh.wikipedia.org/zh-cn/Django 维基百科:Django] [[分类:Web开发]]
本页使用的模板:
模板:了解更多
(
查看源代码
)
返回至“
Django
”。