Django

Eric讨论 | 贡献2023年8月20日 (日) 04:58的版本

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

了解更多 >> 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 文档:编写视图


模板

内置模板标签

标签 写法 描述 示例
block
{% block 块名称 %}
...
{% endblock 块名称 %}
定义一个可以被子模板覆盖的块。更多信息请参见 模板继承
include
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,将迁移文件的建表或修改表应用到数据库上。

迁移

日志

概览

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 文档:日志


生产部署

安全

资源

官网

相关教程

相关文章