• 【Python百日进阶-WEB开发】Day171 - Django案例:03配置工程日志


    八、配置工程日志

    8.1 目的和原因

    1. 目的:使用日志记录网站输出信息
    2. 目前终端输出的信息在程序重新启动后会消失,我们无法记录输出信息的历史
    3. 项目部署后,是在后台运行程序的,没有终端实时显示输出信息
    4. 日志如果能够收集,将来可以通过日志分析用户的行为。

    8.2 配置工程日志的步骤

    8.2.1 配置工程日志

    开发环境配置文件dev.py末尾填加

    """
    配置工程日志
    """
    # 定义三种日志输出格式
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                      '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    
    # log配置字典
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {'format': standard_format},
            'simple': {'format': simple_format},
        },
        'filters': {    # 对日志进行过滤
            'require_debug_true': {     # django在debug模式下才输出日志
                '()': 'django.utils.log.RequireDebugTrue',
            },
        },
        'handlers': {
            #打印到终端的日志,日志级别等级:CRITICAL > ERROR > WARNING > INFO > DEBUG
            'console': {
                'level': 'INFO',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',  # 打印到屏幕
                'formatter': 'simple'
            },
            #打印到文件的日志,收集info及以上的日志
            'file': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                'formatter': 'verbose',
                'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs/meiduo.log'),  # 日志文件
                'maxBytes': 1024*1024*50,  # 日志大小 50M
                'backupCount': 100,
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
        },
        'loggers': {    # 日志器
            #logging.getLogger(__name__)拿到的logger配置
            'django': {     # 定义一个名为django的日志器
                'handlers': ['console', 'file'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                'level': 'INFO',
                'propagate': True,  # 向上(更高level的logger)传递
            },
        },
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    8.2.2 准备日志文件目录

    meiduo_mall工程Base目录创建logs文件夹
    在这里插入图片描述

    8.2.3 日志器记录器的使用

    在这里插入图片描述
    在这里插入图片描述

    8.2.4 Git管理工程日志

    Gitee只需要管理到 logs 目录,保证程序能够正常运行,具体的log文件不需要推送到gitee。
    忽略掉所有的 log 文件后, logs就是空目录,git默认拒绝管理空目录,需要在 logs 中建立一个 .gitkeep 的文件

    九、配置前端静态文件

    9.1 准备静态文件

    项目主目录meiduo_mall中新建static文件夹,其中包括css、images、js等3个文件夹

    9.2 指定静态文件的加载路径

    STATICFILES_DIRS = [os.path.join(BASE_DIR, ‘static’)]

    十、相关文档

    django1.11文档:https://docs.djangoproject.com/en/1.11/
    django2.2文档:https://docs.djangoproject.com/en/2.2/
    django3.2文档:https://docs.djangoproject.com/en/3.2/
    Django 文档¶
    你需要知道的关于 Django 的一切。

    第一步¶
    您是 Django 新手还是编程新手?这是开始的地方!

    从头开始: 概述| 安装
    教程: 第 1 部分:请求和响应| 第 2 部分:模型和管理站点| 第 3 部分:视图和模板| 第 4 部分:表单和通用视图| 第 5 部分:测试| 第 6 部分:静态文件| 第 7 部分:自定义管理站点
    高级教程: 如何编写可重用的应用程序| 为 Django 编写你的第一个补丁
    获得帮助¶
    遇到麻烦?我们愿意提供帮助!

    试试常见问题解答- 它有许多常见问题的答案。
    寻找具体信息?尝试索引、模块索引或详细目录。
    什么都没找到?有关获得支持和向社区提问的信息,请参阅常见问题解答:获得帮助。
    在我们的票务跟踪器中报告 Django 的错误。
    文档的组织方式¶
    Django 有很多文档。对其组织方式的高级概述将帮助您了解在哪里查找某些内容:

    教程将引导您通过一系列步骤来创建 Web 应用程序。如果您不熟悉 Django 或 Web 应用程序开发,请从这里开始。另请查看“第一步”。
    主题指南在相当高的水平上讨论关键主题和概念,并提供有用的背景信息和解释。
    参考指南包含 API 和 Django 机器其他方面的技术参考。他们描述了它的工作原理以及如何使用它,但假设您对关键概念有基本的了解。
    操作指南是食谱。它们指导您完成解决关键问题和用例所涉及的步骤。它们比教程更高级,并假设您了解 Django 的工作原理。
    模型层¶
    Django 提供了一个抽象层(“模型”)来构建和操作 Web 应用程序的数据。在下面了解更多信息:

    模型:模型 介绍| 字段类型| 索引| 元选项| 模型类
    QuerySets: 进行查询| QuerySet 方法参考| 查找表达式
    模型实例: 实例方法| 访问相关对象
    迁移:迁移 简介| 操作参考| 模式编辑器| 编写迁移
    高级: 经理| 原始 SQL | 交易| 聚合| 搜索| 自定义字段| 多个数据库| 自定义查找| 查询表达式| 条件表达式| 数据库函数
    其他: 支持的数据库| 旧数据库| 提供初始数据| 优化数据库访问| PostgreSQL 特定功能
    视图层¶
    Django 有“视图”的概念来封装负责处理用户请求和返回响应的逻辑。通过以下链接查找您需要了解的有关视图的所有信息:

    基础知识: URLconfs | 查看功能| 捷径| 装饰器| 异步支持
    参考: 内置视图| 请求/响应对象| 模板响应对象
    文件上传: 概述| 文件对象| 存储 API | 管理文件| 自定义存储
    基于类的视图: 概述| 内置显示视图| 内置编辑视图| 使用混合| API 参考| 扁平化索引
    高级: 生成 CSV | 生成 PDF
    中间件: 概述| 内置中间件类
    模板层¶
    模板层提供了一种设计人员友好的语法,用于呈现要呈现给用户的信息。了解设计人员如何使用此语法以及程序员如何对其进行扩展:

    基础知识: 概述
    对于设计师: 语言概述| 内置标签和过滤器| 人性化
    对于程序员: 模板 API | 自定义标签和过滤器| 自定义模板后端
    表格¶
    Django 提供了一个丰富的框架来促进表单的创建和表单数据的操作。

    基础知识: 概述| 表单 API | 内置字段| 内置小部件
    高级: 模型表格| 整合媒体| 表单集| 自定义验证
    开发过程¶
    了解可帮助您开发和测试 Django 应用程序的各种组件和工具:

    设置: 概览| 设置的完整列表
    应用: 概述
    例外: 概述
    django-admin 和 manage.py: 概述| 添加自定义命令
    测试: 简介| 编写和运行测试| 包含的测试工具| 高级主题
    部署: 概述| WSGI 服务器| ASGI 服务器| 部署静态文件| 通过电子邮件跟踪代码错误| 部署清单
    管理员¶
    查找有关自动化管理界面的所有信息,这是 Django 最受欢迎的功能之一:

    管理网站
    管理员操作
    管理员文档生成器
    安全¶
    安全性是 Web 应用程序开发中最重要的话题,Django 提供了多种保护工具和机制:

    安全概述
    在 Django 中公开的安全问题
    点击劫持保护
    跨站点请求伪造保护
    加密签名
    安全中间件
    国际化和本地化¶
    Django 提供了一个强大的国际化和本地化框架来帮助您开发多语言和世界区域的应用程序:

    概述| 国际化| 本地化| 本地化的 Web UI 格式和表单输入
    时区
    性能和优化¶
    有多种技术和工具可以帮助您的代码更高效地运行——更快,使用更少的系统资源。

    性能和优化概述
    地理框架¶
    GeoDjango旨在成为一个世界级的地理 Web 框架。其目标是尽可能轻松地构建 GIS Web 应用程序并利用空间数据的力量。

    常用 Web 应用工具¶
    Django 提供了 Web 应用程序开发中常用的多种工具:

    身份验证: 概述| 使用认证系统| 密码管理| 自定义身份验证| API 参考
    缓存
    日志记录
    发送电子邮件
    联合提要 (RSS/Atom)
    分页
    消息框架
    序列化
    会话
    站点地图
    静态文件管理
    数据验证
    其他核心功能¶
    了解 Django 框架的其他一些核心功能:

    条件内容处理
    内容类型和通用关系
    平面页面
    重定向
    信号
    系统检查框架
    网站框架
    Django中的Unicode
    Django 开源项目¶
    了解 Django 项目本身的开发过程以及如何做出贡献:

    社区: 如何参与| 发布流程| 团队组织| Django 源代码库| 安全政策| 邮件列表
    设计理念: 概述
    文档: 关于本文档
    第三方发行版: 概述
    Django 随着时间的推移: API 稳定性| 发行说明和升级说明| 弃用时间表

    编写你的第一个 Django 应用,第 1 部分¶
    让我们通过例子来学习。

    在本教程中,我们将引导您创建一个基本的投票应用程序。

    它将由两部分组成:

    一个允许人们查看民意调查并在其中投票的公共网站。
    一个管理站点,可让您添加、更改和删除投票。
    我们假设您已经安装了 Django。您可以通过在 shell 提示符(由 $ 前缀指示)中运行以下命令来判断 Django 已安装以及哪个版本:

    / 
    $ python -m django --version
    如果安装了 Django,您应该会看到安装的版本。如果不是,你会得到一个错误提示“No module named django”。

    本教程是为支持 Python 3.6 及更高版本的 Django 3.2 编写的。如果 Django 版本不匹配,您可以使用本页右下角的版本切换器参考您的 Django 版本的教程,或者将 Django 更新到最新版本。如果您使用的是旧版本的 Python,请查看我可以在 Django 中使用哪个 Python 版本?找到兼容版本的 Django。

    有关如何删除旧版本 Django 并安装新版本的建议,请参阅如何安装 Django。

    在哪里获得帮助:

    如果您在阅读本教程时遇到问题,请前往常见问题解答的“获取帮助”部分。

    创建项目¶
    如果这是您第一次使用 Django,您将不得不进行一些初始设置。也就是说,您需要自动生成一些代码来建立一个 Django项目——一个 Django 实例的设置集合,包括数据库配置、特定于 Django 的选项和特定于应用程序的设置。

    从命令行,cd进入您要存储代码的目录,然后运行以下命令:

    / 
    $ django-admin startproject mysite
    这将在您的当前目录中创建一个mysite目录。如果它不起作用,请参阅运行 django-admin 的问题。

    笔记

    您需要避免在内置 Python 或 Django 组件之后命名项目。特别是,这意味着您应该避免使用 django(这将与 Django 本身冲突)或test(与内置 Python 包冲突)之类的名称。

    这段代码应该放在哪里?

    如果您的背景是简单的旧 PHP(没有使用现代框架),您可能习惯于将代码放在 Web 服务器的文档根目录下(在诸如 的位置/var/www)。使用 Django,您不会那样做。将任何这些 Python 代码放在 Web 服务器的文档根目录中并不是一个好主意,因为它有可能使人们能够通过 Web 查看您的代码。这对安全不利。

    将您的代码放在文档根目录之外的某个目录中,例如 /home/mycode.

    让我们看看startproject创建了什么:

    mysite/
    manage.py
    mysite/
    init.py
    settings.py
    urls.py
    asgi.py
    wsgi.py
    这些文件是:

    外部mysite/根目录是您项目的容器。它的名字对 Django 无关紧要。您可以将其重命名为您喜欢的任何名称。
    manage.py:一个命令行实用程序,可让您以各种方式与此 Django 项目进行交互。您可以阅读 django-admin 和 manage.pymanage.py中的所有详细信息。
    内部mysite/目录是您项目的实际 Python 包。它的名称是 Python 包名称,您需要使用它来导入其中的任何内容(例如mysite.urls)。
    mysite/init.py: 一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。如果您是 Python 初学者,请阅读官方 Python 文档中有关包的更多信息。
    mysite/settings.py:此 Django 项目的设置/配置。 Django 设置会告诉你设置是如何工作的。
    mysite/urls.py:这个 Django 项目的 URL 声明;由 Django 驱动的站点的“目录”。您可以在URL dispatcher中阅读有关 URL 的更多信息。
    mysite/asgi.py:为您的项目提供服务的兼容 ASGI 的 Web 服务器的入口点。有关更多详细信息,请参阅如何使用 ASGI进行部署。
    mysite/wsgi.py: 为您的项目提供服务的 WSGI 兼容 Web 服务器的入口点。有关更多详细信息,请参阅如何使用 WSGI进行部署。
    开发服务器¶
    让我们验证您的 Django 项目是否有效。切换到外部mysite目录(如果还没有的话),然后运行以下命令:

    / 
    $ python manage.py runserver
    您将在命令行上看到以下输出:

    正在执行系统检查…

    系统检查未发现任何问题(0 静音)。

    您有未应用的迁移;在应用之前,您的应用程序可能无法正常运行。
    运行“python manage.py migrate”以应用它们。

    2022 年 2 月 2 日 - 15:50:53
    Django 3.2 版,使用设置“mysite.settings”在http://127.0.0.1:8000/
    启动开发服务器
    使用 CONTROL-C 退出服务器。
    笔记

    暂时忽略未应用的数据库迁移的警告;我们将很快处理数据库。

    您已经启动了 Django 开发服务器,这是一个纯粹用 Python 编写的轻量级 Web 服务器。我们已经将它包含在 Django 中,因此您可以快速开发事物,而无需处理配置生产服务器(例如 Apache),直到您准备好进行生产。

    现在是注意的好时机:不要在任何类似于生产环境的环境中使用此服务器。它仅供开发时使用。(我们的业务是制作 Web 框架,而不是 Web 服务器。)

    现在服务器正在运行,使用您的 Web 浏览器访问http://127.0.0.1:8000/ 。您会看到“恭喜!” 页面,火箭起飞。有效!

    更改端口

    默认情况下,该runserver命令在内部 IP 的 8000 端口上启动开发服务器。

    如果要更改服务器的端口,请将其作为命令行参数传递。例如,此命令在端口 8080 上启动服务器:

    / 
    $ python manage.py runserver 8080
    如果要更改服务器的 IP,请将其与端口一起传递。例如,要监听所有可用的公共 IP(如果您正在运行 Vagrant 或想在网络上的其他计算机上炫耀您的工作,这很有用),请使用:

    / 
    $ python manage.py runserver 0:8000
    0是0.0.0.0的快捷方式。开发服务器的完整文档可以在runserver参考中找到。

    自动重新加载runserver

    开发服务器会根据需要自动为每个请求重新加载 Python 代码。您无需重新启动服务器即可使代码更改生效。但是,添加文件等某些操作不会触发重新启动,因此在这些情况下您必须重新启动服务器。

    创建投票应用程序¶
    现在您的环境(一个“项目”)已经设置好,您可以开始工作了。

    您在 Django 中编写的每个应用程序都包含一个遵循特定约定的 Python 包。Django 带有一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。

    项目与应用

    项目和应用程序有什么区别?应用程序是做某事的 Web 应用程序——例如,Weblog 系统、公共记录数据库或小型投票应用程序。项目是特定网站的配置和应用程序的集合。一个项目可以包含多个应用程序。一个应用程序可以在多个项目中。

    您的应用程序可以存在于Python 路径上的任何位置。在本教程中,我们将在与您的文件相同的目录中创建我们的投票应用程序, manage.py以便可以将其作为自己的顶级模块导入,而不是mysite.

    要创建您的应用程序,请确保您在同一目录中manage.py 并键入以下命令:

    / 
    $ python manage.py startapp polls
    这将创建一个目录polls,其布局如下:

    polls/
    init.py
    admin.py
    apps.py
    migrations/
    init.py
    models.py
    tests.py
    views.py
    此目录结构将容纳民意调查应用程序。

    写你的第一个视图¶
    让我们写第一个视图。打开文件polls/views.py 并将以下 Python 代码放入其中:

    民意调查/views.py ¶

    from django.http import HttpResponse
    
    
    def index(request):
        return HttpResponse("Hello, world. You're at the polls index.")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这是 Django 中最简单的视图。要调用视图,我们需要将它映射到一个 URL - 为此我们需要一个 URLconf。

    要在 polls 目录中创建 URLconf,请创建一个名为urls.py. 您的应用程序目录现在应该如下所示:

    polls/
    init.py
    admin.py
    apps.py
    migrations/
    init.py
    models.py
    tests.py
    urls.py
    views.py
    在polls/urls.py文件中包含以下代码:

    民意调查/urls.py ¶

    from django.urls import path
    
    from . import views
    
    urlpatterns = [
        path('', views.index, name='index'),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    下一步是将根 URLconf 指向polls.urls模块。在 mysite/urls.py中,添加一个导入并在列表中django.urls.include插入一个 ,这样您就有:

    include()urlpatterns
    
    mysite/urls.py ¶
    from django.contrib import admin
    from django.urls import include, path
    
    urlpatterns = [
        path('polls/', include('polls.urls')),
        path('admin/', admin.site.urls),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    该include()函数允许引用其他 URLconfs。每当 Django 遇到 时include(),它都会切断与该点匹配的 URL 的任何部分,并将剩余的字符串发送到包含的 URLconf 以进行进一步处理。

    背后的想法include()是让即插即用 URL 变得容易。由于投票在它们自己的 URLconf ( polls/urls.py) 中,它们可以放在“/polls/”下,或“/fun_polls/”下,或“/content/polls/”下,或任何其他路径根目录下,应用程序仍将工作。

    何时使用include()

    include()当您包含其他 URL 模式时, 您应该始终使用。admin.site.urls是唯一的例外。

    您现在已将index视图连接到 URLconf。验证它是否使用以下命令:

    / 
    $ python manage.py runserver
    在浏览器中访问http://localhost:8000/polls/,您应该会看到文本“ Hello, world. 你在民意调查索引。”,您在 index视图中定义。

    找不到网页?

    如果您在此处收到错误页面,请检查您是否要访问 http://localhost:8000/polls/而不是http://localhost:8000/。

    该path()函数传递了四个参数,两个是必需的: routeand view,两个可选的:kwargs和name。在这一点上,值得回顾一下这些论点的用途。

    path()论据:route¶
    route是一个包含 URL 模式的字符串。当处理一个请求时,Django 从第一个模式开始urlpatterns并沿着列表向下移动,将请求的 URL 与每个模式进行比较,直到找到匹配的一个。

    模式不搜索 GET 和 POST 参数或域名。例如,在对 的请求中https://www.example.com/myapp/,URLconf 将查找 myapp/. 在对 的请求中https://www.example.com/myapp/?page=3,URLconf 也会查找myapp/.

    path()论据:view¶
    当 Django 找到匹配的模式时,它会调用指定的视图函数,并将HttpRequest对象作为第一个参数,并将路由中任何“捕获”的值作为关键字参数。我们稍后会给出一个例子。

    path()论据:kwargs¶
    任意关键字参数可以在字典中传递给目标视图。我们不会在教程中使用 Django 的这个特性。

    path()论据:name¶
    命名你的 URL 可以让你从 Django 的其他地方明确地引用它,尤其是在模板中。这个强大的功能允许您对项目的 URL 模式进行全局更改,而只需触摸一个文件。

    当您对基本的请求和响应流程感到满意时,请阅读 本教程的第 2 部分以开始使用数据库。

  • 相关阅读:
    Linux上搭建ElasticSearch-8.x集群以及安装Kibana(保姆级安装教程)
    AR人脸道具SDK,打造极致用户体验
    如何实现自有App上的小程序第三方微信授权登陆?
    MotoSimEG-VRC软件:安川机器人用户坐标系介绍与标定方法
    Linux扩展篇之Shell编程二(运算符和条件判断)
    Typora + PicGo + 腾讯云COS 配置图床
    SpringBoot:集成Swagger 上
    Vue3理解(9)
    EXCEL——计算数据分散程度的相关函数
    Rabbitmq 的管理配置
  • 原文地址:https://blog.csdn.net/yuetaope/article/details/123004681