Django

Eric讨论 | 贡献2023年9月16日 (六) 15:53的版本

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

了解更多 >> Django 文档:如何安装 Django


快速入门

架构

drawio: Django架构

第一个 Django 应用

创建项目

打开命令行,cd 到一个你想放置你代码的目录,然后运行以下命令:

django-admin startproject mysite

# 在当前目录下初始化mysite app,而不是再创建一个mysite目录
# django-admin startproject mysite .

了解更多 >> Django 文档:创建项目


启动简易服务器

打开命令行,cd进入到manage.py所在目录,然后运行以下命令:

python manage.py runserver

#默认监听本机内部 IP 的 8000 端口,也可以指定其他,如8002端口:
python manage.py runserver 8002

现在已经启动了Django 自带的用于开发的简易服务器。浏览器访问 https://127.0.0.1:8002/ ,就可以看到“祝贺”页面。

了解更多 >> Django 文档:用于开发的简易服务器


启动关闭脚本

启动脚本,程序后台运行,关闭终端也不会停止。

#!/bin/bash
logfile=django.log   #设置日志文件
source env/bin/activate  # 激活虚拟环境
# 后台运行
nohup python manage.py runserver 8002>$logfile 2>&1 &
tail -f $logfile  #监控日志

关闭脚本,即关闭相应端口的程序,可以使用命令kill $(lsof -t -i:8002),也可以写成脚本:

port=8002
pid=$(lsof -t -i:$port)

if [ ! -z "$pid" ]; then
  kill $pid
  echo "端口$port被占用, 结束进程$pid。"  
else
  echo "端口$port未使用。"
fi

URL 路由

URL路由在urls.py文件中配置,URL模式到视图函数的简单映射。

了解更多 >> Django 文档:URL调度器


视图函数

视图函数接收Web 请求并返回一个 Web 响应,这个响应可以是任何内容,如HTML内容、图片、重定向、404错误等。

了解更多 >> Django 文档:编写视图


模板

变量

标签

标签 描述 示例
if
for
include
extends 该模板继承了一个父模板。 两种写法:
{% extends "base.html" %}
block
{% block 块名称 %}
...
{% endblock 块名称 %}
定义一个可以被子模板覆盖的块。更多信息请参见 模板继承
url

了解更多 >> Django 文档:内置模板标签和过滤器


过滤器

内置过滤器

过滤器 描述 示例
add 变量加上参数值。这个过滤器将首先尝试将两个值强制转为整数。 {{ value|add:2}} value的值加2
{{ value1|add:value2 }}value1加value2值。

了解更多 >> Django 文档:内置模板标签和过滤器


数据模型

概览

Django提供了ORM功能,能更方便管理数据库。对象关系映射Object-Relational Mapping(ORM),是使用面向对象的方式操作数据库,映射关系如下:

数据库 编程语言
表(table) 类(class)
记录(record)或称行 对象(object)
字段(field)或称列 对象的属性(attribute)

了解更多 >> Django 文档:模型和数据库


快速上手

1.定义模型,创建一个模型即创建一个表。每个模型都是一个 Python 的类,这些类继承 django.db.models.Model。如定义了一个 Photo模型,拥有title、image 和 upload_time字段 :

# 创建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',)

2.注册app, 需要将app名称加入到配置文件settings.py的INSTALLED_APPS。

INSTALLED_APPS = [
    # ...
    "testapp",
    # ...
]

3.创建迁移文件,python manage.py makemigrations testapp。会在testapp/migrations创建一个将要执行的操作,如0001_initial.py
4.执行迁移,python manage.py migrate testapp,将迁移文件的建表或修改表应用到数据库上。

迁移

命令 描述 示例
makemigrations 基于模型的修改创建迁移。 python manage.py makemigrations testapp创建testapp所有模型的迁移文件
migrate 应用和撤销迁移。注意回滚迁移,可能会造成数据丢失。 python manage.py migrate testapp应用迁移
python manage.py migrate testapp 0001将数据库模式调整到适用指定迁移的状态。
python manage.py migrate testapp zero撤销所有迁移,到最初状态。
sqlmigrate 显示迁移使用的SQL语句。 python manage.py sqlmigrate testapp 0001显示迁移文件的SQL语句 testapp/migrations/0001_initial.py
showmigrations 显示迁移文件和迁移状态。 python manage.py showmigrations testapp
python manage.py showmigrations

了解更多 >> Django 文档:迁移


日志

概览

Django 使用 Python 内置的 logging 模块处理系统日志。将下面一个简单的日志配置放入settings.py中,它将所有来自 django 命名的记录器的日志记录写入本地文件。

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,
        },
    },
}

了解更多 >> Django 文档:日志


日志配置

名称 描述 示例
Loggers 日志系统的入口
由一个或多个logger组成,每个logger都是由名称和logger配置项组成。

logger参数:
level 配置日志级别,可选值:DEBUG:排查故障时使用的低级别系统信息。INFO:一般的系统信息。WARNING:描述系统发生了一些小问题的信息。ERROR:描述系统发生了大问题的信息。CRITICAL:描述系统发生严重问题的信息。
handlers 配置使用的handler列表,如'handlers': ['handler1', 'handler2']。
'loggers': {
    'django': {
        'handlers': ['file'],
        'level': 'DEBUG',
        'propagate': True,
    },
},
Handlers 处理logger消息
配置消息输出位置,屏幕、文件或网络 socket。和 logger 一样,handler 也有日志级别的概念。
filters 过滤器
在日志记录从 logger 传到 handler 的过程中,使用 Filter 来做额外的控制。
Formatters 文本的格式
将日志记录文本按特定格式组织。

了解更多 >> Django 文档:日志


生产部署

安全

资源

官网

相关教程

相关文章