龙空技术网

Sentry处理Django项目中的异常解决方案源码

Python小白分享师 45

前言:

现时各位老铁们对“python警告未激活”大约比较珍视,大家都需要知道一些“python警告未激活”的相关内容。那么小编在网摘上搜集了一些关于“python警告未激活””的相关知识,希望朋友们能喜欢,咱们一起来了解一下吧!

随着时间的流逝,使用Django构建的Web应用程序可能变得非常复杂,这就是集中式错误处理非常重要的原因之一。本教程将指导您向新的Django项目添加免费的基本Sentry配置。

完成后,您将可以在Sentry仪表板中查看集中式错误报告,如以下屏幕截图所示:

教程要求

在本教程中,我们将使用以下依赖项,稍后将安装它们。确保您的环境中还安装了Python 3, 最好是3.7或更高版本:

我们将使用以下依赖关系来完成本教程:

Django web framework, version 3.1sentry-sdk, version 0.16.5

此文章中的所有代码都可以免费获取。如果您需要的话可以对于您自己的项目,请根据需要使用源代码。

开发环境配置

转到保存Python虚拟环境的目录 。使用以下命令为此项目创建一个新的virtualenv。

使用以下命令通过创建新的虚拟环境来启动Django项目 。我建议使用单独的目录,例如~/venvs/(波浪号是用户home 目录的快捷方式),以便您始终知道所有virtualenv的位置。

python3 -m venv〜/ venvs / djsentry

使用activateshell脚本激活virtualenv :

source ~/venvs/djsentry/bin/activate

执行上述命令后,命令提示符将发生更改,因此virtualenv的名称将以原始命令提示符格式开头,因此,如果您的提示符为simple $,则现在看起来将如下所示:

(djsentry) $

请记住,您必须在每个要在virtualenv中使用依赖项的新终端窗口中激活您的virtualenv。

现在,我们可以将Django 软件包安装到已激活但为空的virtualenv中。

pip install django==3.1 sentry-sdk==0.16.5

查找类似于以下内容的输出,以确认从PyPI正确安装了相应的软件包。

(djsentry) $ pip install django==3.1 sentry-sdk==0.16.5Collecting django  Downloading  (7.8MB)    100% |████████████████████████████████| 7.8MB 6.3MB/s Collecting sentry-sdk  Downloading  (113kB)    100% |████████████████████████████████| 122kB 33.7MB/s Collecting asgiref~=3.2.10 (from django)  Using cached  sqlparse>=0.2.2 (from django)  Using cached  pytz (from django)  Using cached  urllib3>=1.10.0 (from sentry-sdk)  Using cached  certifi (from sentry-sdk)  Using cached  collected packages: asgiref, sqlparse, pytz, django, urllib3, certifi, sentry-sdkSuccessfully installed asgiref-3.2.10 certifi-2020.6.20 django-3.1 pytz-2020.1 sentry-sdk-0.16.5 sqlparse-0.3.1 urllib3-1.25.10

现在,我们已经安装了所有必需的依赖项,就可以开始对应用程序进行编码。

编码初始应用

我们拥有开始构建应用程序所需的一切。

我们可以使用Django django-admin工具创建样板代码结构来开始我们的项目。转到开发应用程序的目录。例如,我通常将/Users/matt/devel/py/所有Python项目都使用。然后运行以下命令以启动一个名为的Django项目djsentry

django-admin.py startproject djsentry

请注意,在本教程中,我们为virtualenv和Django项目目录使用了相同的名称,但是如果您希望使用它们来组织自己的项目,则可以使用不同的名称。

如果您以前使用过Django,该django-admin命令会创建一个名为目录的目录djsentry以及几个子目录。

将目录更改为新项目。

cd djsentry

在中创建一个新的Django应用djsentry

python manage.py startapp errors

Django将生成一个以errors该项目命名的新文件夹。我们应该更新URL,以便在编写views.py代码之前可以访问该应用程序。

打开djsentry/djsentry/urls.py。添加突出显示的行,以便URL解析器将检查errors应用程序是否有其他路由,以与该Django应用程序请求的URL匹配。

from django.conf.urls import includefrom django.contrib import adminfrom django.urls import pathurlpatterns = [    path('', include('errors.urls')),    path('admin/', admin.site.urls),]

保存djsentry/djsentry/urls.py并打开 djsentry/djsentry/settings.py。通过插入突出显示的形式将errors应用添加到settings.py

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'errors',]

在将任何代码部署到生产环境之前,请确保更改默认值DEBUG和中的SECRET_KEYsettings.py。使用Django生产部署清单中的信息正确保护您的应用程序, 以免将项目添加到网络上被黑客入侵的应用程序列表中。

保存并关闭settings.py

接下来转到djsentry/errors目录。创建一个名为urls.py包含errors应用程序路由的新文件。

将所有这些行添加到空djsentry/errors/urls.py 文件。

from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^$', views.errors_index, name="index"),]

保存djsentry/errors/urls.py。打开 djsentry/errors/views.py以添加以下两行突出显示的行。您可以保留样板注释“#在此处创建视图”。或许像平常一样删除。

from django.shortcuts import renderdef errors_index(request):    return render(request, 'index.html', {})

接下来,为您的模板文件创建一个目录,该目录templatesdjmaps/mapsapp目录下命名。

mkdir templates

创建一个名为一个新的文件index.htmldjsentry/errors/templates,包含以下Django的模板语言标记。

<html>  <head>    <title>First step for errors</title>  </head>  <body>   <h1>Hello, world!</h1>  </body></html>

我们可以测试此静态页面,以确保在开始向项目添加功能之前,我们所有的代码都是正确的。转到manage.py文件所在的Django项目的基本目录。使用以下命令执行开发服务器:

python manage.py runserver

Django开发服务器应该启动,除了未应用的迁移警告外没有其他问题。

Watching for file changes with StatReloaderPerforming system checks...System check identified no issues (0 silenced).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.August 15, 2020 - 17:26:57Django version 3.1, using settings 'djsentry.settings'Starting development server at  the server with CONTROL-C.

打开浏览器,然后转到localhost:8000

我们的代码可以运行,但是肯定不会做很多。让我们添加sentry-sdk,以便我们了解其工作原理。

添加Sentry和sentry-sdk库

现在,我们可以添加Sentry并对其进行一系列错误测试,以确保其正常运行。

Sentry可以是自托管的,也可以通过Sentry.io用作云服务。在本教程中,我们将使用云托管版本,因为它比设置您自己的服务器更快,并且对于较小的项目免费。

转到Sentry.io的主页。

登录您的帐户或注册一个新的免费帐户。登录或完成Sentry注册过程后,您将进入主帐户仪表板。

由于我们尚未将帐户连接到Django项目,因此,在帐户信息中心上尚未记录任何错误,这与预期的一样。

单击左侧边栏中的“项目”以为此项目创建一个新的Sentry项目,以转到“项目”页面。

在“项目”页面上,单击页面右上角的“创建项目”按钮。

您可以选择“ Django”或“ Python”。如果我还不知道我将使用什么框架来构建应用程序,我通常会选择“ Python”。接下来,给您的新项目起一个名字,然后按“创建项目”按钮。我们的新项目已准备好与我们的Python代码集成。

我们需要帐户和项目的唯一标识符来授权我们的Python代码将错误发送到此Sentry实例。获得所需信息的最简单方法是转到 Python + Django文档页面 并阅读如何配置SDK。

复制该init方法的字符串参数,并将其设置为环境变量, 而不是在项目代码中公开它。

export SENTRY_DSN=';

确保用您自己的唯一标识符替换“ yourkeygoeshere”,并用与您刚创建的项目匹配的ID替换“ project-number”。

SENTRY_DSN使用以下echo 命令检查shell中的设置是否正确:

echo $SENTRY_DSN

接下来,settings.py使用以下突出显示的新行进行更新:

import osimport sentry_sdkfrom pathlib import Pathfrom sentry_sdk.integrations.django import DjangoIntegrationBASE_DIR = Path(__file__).resolve(strict=True).parent.parent

在的行之后,在文件底部STATIC_URL,添加Sentry配置:

sentry_sdk.init(    dsn=os.getenv('SENTRY_DSN'),    integrations=[DjangoIntegration()],    # 如果您希望将用户与错误相关联(假设您正在使用    #django.contrib.auth),则可以启用发送PII数据。    send_default_pii=True)

现在我们已经有了适当的配置,我们可以故意使一些错误发生,以测试与Sentry服务的连接。

测试哨兵的错误捕获

我们将更改一些现有代码以故意引发异常,以确保一切正常。

首先errors/views.py用一个新的突出显示的行打开并更新它,该行将在调用此函数时自动引发通用异常。

from django.shortcuts import renderdef errors_index(request):    raise Exception('testing exception')    return render(request, 'index.html', {})

localhost:8000在浏览器中转到,运行开发服务器时,您将立即获得此异常页面:

我们还可以尝试一些代码,这些代码不仅会引发异常,而且在执行时肯定会创建一个异常,例如此除以零的操作:

from django.shortcuts import renderdef errors_index(request):    division_by_zero = 1 / 0    return render(request, 'index.html', {})

如果这些异常都以这种方式出现在Sentry仪表板中,则说明一切就绪:

上面的例外只是几种通用方法,用于测试一切正常,以便将错误信息发送到Sentry。此配置还将处理 在构建其余Django项目时可能会看到的 许多其他Django异常

标签: #python警告未激活