Django框架的丝滑轮廓
django-silk的Python项目详细描述
#silk
=====
*silk现在已经转移到[爵士乐队](https://jazzband.co/)组织,并正在寻找贡献者-如果您认为您可以提供帮助,请与我们联系!*
[![Travisci构建](https://img.shields.io/travis/jazzband/django silk/master.svg)(https://travis ci.org/jazzband/django silk)
[![pypi下载](https://img.shields.io/pypi/v/django silk.svg)(https://pypi.python.org/pypi/django silk)
[![pypi python版本](https://img.shields.io/pypi/pyversions/django silk.svg)(https://pypi.python.org/pypi/django silk)
[![爵士乐队](https://jazzband.co/static/img/badge.svg)(https://jazzband.co/)
silk是django框架的实时评测和检查工具。silk截取并存储http请求和数据库查询,然后将它们显示在用户界面中以供进一步检查:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/1.png"width="720px"/>;
**安全说明:*因为silk存储了http请求和数据库查询所有http请求以明文形式进入数据库,它将请求的敏感信息以明文形式(如用户密码)存储到数据库中。。这是一个巨大的安全问题。为此[此处](https://github.com/jazzband/django silk/issues/305)创建了一个问题。
*[认证/授权](认证授权)
*[请求/响应机构](请求-响应机构)
*[元分析](元分析)
*[记录一部分请求](记录一部分请求)
*[限制请求/响应]数据](限制请求响应数据)
*[清除记录的数据](清除记录的数据)
*[贡献](贡献)
*[开发环境](开发环境)
要求
silk已通过以下测试:
*django:1.11、2.0、2.1,2.2
*python:2.7、3.4、3.5、3.6、3.7、3.7
`` bash
``bash
pip install django silk
```````
`` python
`` python
`` python
```````````````
```````````````````丝织品',
…
]
已安装的应用程序=(
…
"silk"
)
````
**注意:**中间件的放置是敏感的。如果"silk.middleware.silkymiddleware"之前的中间件从"process_request"返回,那么"silkymiddleware"将永远无法执行。因此,您必须确保放在前面的任何中间件都不会返回"process_request"中的任何内容。有关详细信息,请参阅[django docs](https://docs.djangoproject.com/en/dev/topics/http/middleware/process request)。
**注意:**如果您使用的是"django.middleware.gzip.gzipmiddleware",请将其放在**"silk.middleware.silkymiddleware"之前,否则将得到一个编码错误。
如果要使用自定义中间件,例如,开发了"silk.middleware.silkymiddleware"的子类,因此,您可以使用以下设置组合:
``python
Silky_中间件类,
…
]
```
manage.py makemigrations
python manage.py migrate
`````
silk将自动开始拦截请求,您可以继续添加分析
如果需要。用户可以通过[github标签](https://github.com/jazzband/django silk/releases)访问`/silk/`
\pip安装https://github.com/jazzband/silk/archive/<;version>;.tar.gz
```
但请注意,master
中的版本可能不适用于[需求](需求)中指定的所有版本
``bash
pip install-e git+https://github.com/jazzband/django silk.git egg=silk
```
features
silk主要包括:
*用于拦截请求/响应的中间件上面的。
img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/1.png"width="720px"/>;
它记录如下内容:
*所用时间
*查询数
*查询时间
*请求/响应头
*请求/响应主体
等等。
单击相关请求也可以获得有关每个请求的详细信息:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/2.png"width="720px"/>;
我们可以在潜水前获得有关
所涉及的表、连接数和执行时间(可以通过单击列标题对表进行排序):
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/3.png"width="720px"/>;
进入堆栈跟踪以确定此请求的来源:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/5.png"width="720px"/>;
剖析器。每个请求都将被单独分析,并且分析程序的输出将在silk ui中的请求分析页面上可用。
``python
`silky python\u profiler=true
````
如下:
``python
silky_python_profiler_binary=true
```
启用时,使用[gprof2dot](https://github.com/jrfonseca/gprof2dot)和[viz.js](https://github.com/almende/vis)生成的图形可视化显示在配置文件详细信息页:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/10.png"width="720px"/>;
自定义存储类可用于保存的生成的二进制`.prof`文件:
``python
silky_storage_class='path.to.storageclass'
````
选择。您必须确保指定的目录存在。
`` python
`如果未设置此项,则将使用媒体根目录。
silky_python_profiler_result_path='/path/to/profiles/'
````
对于每个请求,下载按钮都将与二进制`.prof`文件一起可用。此文件可用于使用[SnakeViz](https://github.com/jiffyclub/snakeViz)或其他CProfile工具进行进一步分析
Silk还可用于分析特定代码块/函数。为此,它提供了一个decorator和一个上下文
管理器。
例如:silk.profiling.profiler imp中的
``python
sort silk_profile
@silk_profile(name='view blog post')
def post(请求,post_id):
p=post.objects.get(pk=post_id)
return render_to_response('post.html',{
"post":p
}
```
但也以与请求相同的方式收集块内执行的SQL查询:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/8.png"width="720px"/>;
post-id:
p=post.objects.get(pk=post-id)
返回render-to-u响应('post.html',{
'post':p
})
=post.objects.get(pk=post_id)
返回render_to_响应('post.html',{
"post":p
}
```
post_id):
使用silk_配置文件(name='view blog post%d'%self.pk):
p=post.objects.get(pk=post_id)
返回render_to_response('post.html',{
"post":p
}
```
例如,如果我们想要分析一个只具有只读访问权限的依赖项中的函数(例如,根拥有的系统python库),我们可以将以下内容添加到"settings.py"中,以便在运行时应用decorator:
``python
'路径.to.module',
"函数":myclass.bar
}
```
可能性:
`` python
""
>动态函数装饰器
""
>平滑的动态配置文件=[{
‘module':'path.to.module',
‘function':'foo'
}]
大致相当于
@silk椆profile()
def foo():
pass
"
动态方法装饰器
""
silky椆动态配置=[{
‘module':'path.to.module',
‘function':'myclass.bar'
}]
……大致相当于
类myclass(object):
@silk\u profile()
def bar(self):
pass
"
动态代码块评测
""
silky\u动态评测=[{
‘module':‘path.to.module’,
‘function':‘foo’,
‘行号与函数相对应,而不是它所在的文件
"start_line":1,
"end_line":2,
"name":"slow foo"
}]
大致相当于
def foo():
使用silk_profile(name='slow foo'):
print(1)
print(2)
print(3)
print(4)
`````
请注意,动态评测的行为方式与python模拟框架相似,我们修改了函数就位,例如:
``python
`my.module""
如果我们要将动态配置文件应用到函数源模块"another.module.foo"中,请选择"another.module.foo":
```python
不会触发任何分析。
\r代码生成
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/9.png"width="720px"/>;
两者都用于重放请求。curl命令可以通过命令行进行回放,python代码可以在django单元测试中使用,也可以作为一个独立的脚本使用。
'/丝绸/ '.要启用django
身份验证后端,请将以下内容放在"settings.py"中:
``python
`silky`u authentication=true`用户必须登录
`silky`u authorization=true`用户必须具有权限
```
默认情况下,silk将只授权"is-staff"属性设置为"true"的用户。
=我的"自定义"烫发默认情况下也可以使用"lambda"。
```python
silk将为每个请求节省请求和响应主体,以便将来查看
无论请求和响应主体有多大。如果丝绸在大体积、大体积的生产中使用,这会对空间/时间性能产生巨大影响。此行为可以配置以下选项:
`` python
silky_max_request_body_size=-1 silk接受任何<;0作为无限制值
silky_max_response_body_size=1024如果response body>;1024字节,忽略
```
为此,请在"settings.py"中添加以下内容:
``python
silky meta=true
```
silk将记录每次请求结束时将所有内容保存到数据库所需的时间:
<;img src="https://raw.githubusercontent.com/jazzband/django silk/master/screenshots/meta.png"/>;
请注意,在上述截图中,这意味着请求需要29毫秒(django的22毫秒,silk的7毫秒)
\设置与silky_u intercept懔func互斥。
`` python
silky懔u intercept懔u percent=50懔log only 50%的请求
```
请求。为此,请在"settings.py"中添加以下内容:
只有会话启用了录制。
```
当然silky垃圾收集旧的请求/响应数据,可以设置一个配置变量来限制它存储的请求/响应行的数量。ky_max_recorded_requests=10**4
````
可以使用以下配置对其进行调整:
`` python
silky_max_recorded_check_percent=10
````
##贡献
[![爵士乐队](https://jazzband.co/static/img/jazzband.svg)(https://jazzband.co/)
这是一个[爵士乐队](https://jazzband.co/)项目。通过贡献,您同意遵守[贡献者行为准则](https://jazzband.co/about/conduct)并遵循[准则](https://jazzband.co/about/guidelines)。
`发展。它有"silk"代码符号链接,因此
您可以同时处理示例"project"和"silk"包。
为了设置本地开发,您应该首先安装测试"project"的所有依赖项。从"project"目录的
根目录:
``bash
pip install-r test requirements.txt
````
从git存储库的根目录来看:
``bash
pip install-r requirements.txt
````
此时,虚拟环境应该具备成功运行示例"project"和
`silk所需的所有功能。
必须设置"db"和"db-name"环境变量:
``bash
export db=sqlite3
export db-name=db.sqlite3
````
检查[`.travis.yml`](../.travis.yml)。
--noinput
```
=====
*silk现在已经转移到[爵士乐队](https://jazzband.co/)组织,并正在寻找贡献者-如果您认为您可以提供帮助,请与我们联系!*
[![Travisci构建](https://img.shields.io/travis/jazzband/django silk/master.svg)(https://travis ci.org/jazzband/django silk)
[![pypi下载](https://img.shields.io/pypi/v/django silk.svg)(https://pypi.python.org/pypi/django silk)
[![pypi python版本](https://img.shields.io/pypi/pyversions/django silk.svg)(https://pypi.python.org/pypi/django silk)
[![爵士乐队](https://jazzband.co/static/img/badge.svg)(https://jazzband.co/)
silk是django框架的实时评测和检查工具。silk截取并存储http请求和数据库查询,然后将它们显示在用户界面中以供进一步检查:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/1.png"width="720px"/>;
**安全说明:*因为silk存储了http请求和数据库查询所有http请求以明文形式进入数据库,它将请求的敏感信息以明文形式(如用户密码)存储到数据库中。。这是一个巨大的安全问题。为此[此处](https://github.com/jazzband/django silk/issues/305)创建了一个问题。
*[认证/授权](认证授权)
*[请求/响应机构](请求-响应机构)
*[元分析](元分析)
*[记录一部分请求](记录一部分请求)
*[限制请求/响应]数据](限制请求响应数据)
*[清除记录的数据](清除记录的数据)
*[贡献](贡献)
*[开发环境](开发环境)
要求
silk已通过以下测试:
*django:1.11、2.0、2.1,2.2
*python:2.7、3.4、3.5、3.6、3.7、3.7
`` bash
``bash
pip install django silk
```````
`` python
`` python
`` python
```````````````
```````````````````丝织品',
…
]
已安装的应用程序=(
…
"silk"
)
````
**注意:**中间件的放置是敏感的。如果"silk.middleware.silkymiddleware"之前的中间件从"process_request"返回,那么"silkymiddleware"将永远无法执行。因此,您必须确保放在前面的任何中间件都不会返回"process_request"中的任何内容。有关详细信息,请参阅[django docs](https://docs.djangoproject.com/en/dev/topics/http/middleware/process request)。
**注意:**如果您使用的是"django.middleware.gzip.gzipmiddleware",请将其放在**"silk.middleware.silkymiddleware"之前,否则将得到一个编码错误。
如果要使用自定义中间件,例如,开发了"silk.middleware.silkymiddleware"的子类,因此,您可以使用以下设置组合:
``python
Silky_中间件类,
…
]
```
manage.py makemigrations
python manage.py migrate
silk将自动开始拦截请求,您可以继续添加分析
如果需要。用户可以通过[github标签](https://github.com/jazzband/django silk/releases)访问`/silk/`
\pip安装https://github.com/jazzband/silk/archive/<;version>;.tar.gz
```
但请注意,master
中的版本可能不适用于[需求](需求)中指定的所有版本
``bash
pip install-e git+https://github.com/jazzband/django silk.git egg=silk
```
features
silk主要包括:
*用于拦截请求/响应的中间件上面的。
img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/1.png"width="720px"/>;
它记录如下内容:
*所用时间
*查询数
*查询时间
*请求/响应头
*请求/响应主体
等等。
单击相关请求也可以获得有关每个请求的详细信息:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/2.png"width="720px"/>;
我们可以在潜水前获得有关
所涉及的表、连接数和执行时间(可以通过单击列标题对表进行排序):
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/3.png"width="720px"/>;
进入堆栈跟踪以确定此请求的来源:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/5.png"width="720px"/>;
剖析器。每个请求都将被单独分析,并且分析程序的输出将在silk ui中的请求分析页面上可用。
``python
`silky python\u profiler=true
````
如下:
``python
silky_python_profiler_binary=true
```
启用时,使用[gprof2dot](https://github.com/jrfonseca/gprof2dot)和[viz.js](https://github.com/almende/vis)生成的图形可视化显示在配置文件详细信息页:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/10.png"width="720px"/>;
自定义存储类可用于保存的生成的二进制`.prof`文件:
``python
silky_storage_class='path.to.storageclass'
````
选择。您必须确保指定的目录存在。
`` python
`如果未设置此项,则将使用媒体根目录。
silky_python_profiler_result_path='/path/to/profiles/'
````
对于每个请求,下载按钮都将与二进制`.prof`文件一起可用。此文件可用于使用[SnakeViz](https://github.com/jiffyclub/snakeViz)或其他CProfile工具进行进一步分析
Silk还可用于分析特定代码块/函数。为此,它提供了一个decorator和一个上下文
管理器。
例如:silk.profiling.profiler imp中的
``python
sort silk_profile
@silk_profile(name='view blog post')
def post(请求,post_id):
p=post.objects.get(pk=post_id)
return render_to_response('post.html',{
"post":p
}
```
但也以与请求相同的方式收集块内执行的SQL查询:
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/8.png"width="720px"/>;
post-id:
p=post.objects.get(pk=post-id)
返回render-to-u响应('post.html',{
'post':p
})
=post.objects.get(pk=post_id)
返回render_to_响应('post.html',{
"post":p
}
```
post_id):
使用silk_配置文件(name='view blog post%d'%self.pk):
p=post.objects.get(pk=post_id)
返回render_to_response('post.html',{
"post":p
}
```
例如,如果我们想要分析一个只具有只读访问权限的依赖项中的函数(例如,根拥有的系统python库),我们可以将以下内容添加到"settings.py"中,以便在运行时应用decorator:
``python
'路径.to.module',
"函数":myclass.bar
}
```
可能性:
`` python
""
>动态函数装饰器
""
>平滑的动态配置文件=[{
‘module':'path.to.module',
‘function':'foo'
}]
大致相当于
@silk椆profile()
def foo():
pass
"
动态方法装饰器
""
silky椆动态配置=[{
‘module':'path.to.module',
‘function':'myclass.bar'
}]
……大致相当于
类myclass(object):
@silk\u profile()
def bar(self):
pass
"
动态代码块评测
""
silky\u动态评测=[{
‘module':‘path.to.module’,
‘function':‘foo’,
‘行号与函数相对应,而不是它所在的文件
"start_line":1,
"end_line":2,
"name":"slow foo"
}]
大致相当于
def foo():
使用silk_profile(name='slow foo'):
print(1)
print(2)
print(3)
print(4)
`````
请注意,动态评测的行为方式与python模拟框架相似,我们修改了函数就位,例如:
``python
`my.module""
如果我们要将动态配置文件应用到函数源模块"another.module.foo"中,请选择"another.module.foo":
```python
不会触发任何分析。
\r代码生成
<;img src="https://raw.githubusercontent.com/jazzband/django-silk/master/screenshots/9.png"width="720px"/>;
两者都用于重放请求。curl命令可以通过命令行进行回放,python代码可以在django单元测试中使用,也可以作为一个独立的脚本使用。
'/丝绸/ '.要启用django
身份验证后端,请将以下内容放在"settings.py"中:
``python
`silky`u authentication=true`用户必须登录
`silky`u authorization=true`用户必须具有权限
```
默认情况下,silk将只授权"is-staff"属性设置为"true"的用户。
=我的"自定义"烫发默认情况下也可以使用"lambda"。
```python
silk将为每个请求节省请求和响应主体,以便将来查看
无论请求和响应主体有多大。如果丝绸在大体积、大体积的生产中使用,这会对空间/时间性能产生巨大影响。此行为可以配置以下选项:
`` python
silky_max_request_body_size=-1 silk接受任何<;0作为无限制值
silky_max_response_body_size=1024如果response body>;1024字节,忽略
```
为此,请在"settings.py"中添加以下内容:
``python
silky meta=true
```
silk将记录每次请求结束时将所有内容保存到数据库所需的时间:
<;img src="https://raw.githubusercontent.com/jazzband/django silk/master/screenshots/meta.png"/>;
请注意,在上述截图中,这意味着请求需要29毫秒(django的22毫秒,silk的7毫秒)
\设置与silky_u intercept懔func互斥。
`` python
silky懔u intercept懔u percent=50懔log only 50%的请求
```
请求。为此,请在"settings.py"中添加以下内容:
只有会话启用了录制。
```
当然silky垃圾收集旧的请求/响应数据,可以设置一个配置变量来限制它存储的请求/响应行的数量。ky_max_recorded_requests=10**4
````
可以使用以下配置对其进行调整:
`` python
silky_max_recorded_check_percent=10
````
##贡献
[![爵士乐队](https://jazzband.co/static/img/jazzband.svg)(https://jazzband.co/)
这是一个[爵士乐队](https://jazzband.co/)项目。通过贡献,您同意遵守[贡献者行为准则](https://jazzband.co/about/conduct)并遵循[准则](https://jazzband.co/about/guidelines)。
`发展。它有"silk"代码符号链接,因此
您可以同时处理示例"project"和"silk"包。
为了设置本地开发,您应该首先安装测试"project"的所有依赖项。从"project"目录的
根目录:
``bash
pip install-r test requirements.txt
````
从git存储库的根目录来看:
``bash
pip install-r requirements.txt
````
此时,虚拟环境应该具备成功运行示例"project"和
`silk所需的所有功能。
必须设置"db"和"db-name"环境变量:
``bash
export db=sqlite3
export db-name=db.sqlite3
````
检查[`.travis.yml`](../.travis.yml)。
--noinput
```