Django隐私担忧报告应用
项目描述
# django-concerns
该app的一个很好的用途是在包含去标识化患者信息的web应用中
## 安装
```bash
pip install django-concerns
```
## 设置
将`concerns`添加到`INSTALLED_APPS`中,并包含以下Django contrib应用
```python
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'concerns',
...
)
```
至少必须安装以下中间件
```python
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
)
```
将`concerns.urls`包含在`ROOT_URLCONF`中
```python
from django.conf.urls import url, patterns, include
urlpatterns = patterns('',
url(r'^concerns/', include('concerns.urls')),
...
)
```
## 设置
- `CONCERN_EMAIL_SUBJECT` - 发送给管理员的电子邮件的主题行。默认为`{site}的担忧报告`,其中`{site}`是当前站点的名称字符串格式变量,例如`example.com的担忧报告`
- `CONCERN_RESOLVERS` - 与`ADMINS`和`MANAGERS`相同的结构列表或元组,表示在报告担忧时应接收电子邮件的用户。
- `CONCERN_STATUSES` - 在审查期间担忧可能处于的状态列表。列表中的第一个状态用作新担忧的默认值。默认状态是`新`、`审查中`、`重复`和`关闭`。
## 模板
django-concerns提供的模板功能齐全,但_非常_简单。
- `concerns/concern_list.html` - 渲染有关关注点的列表,并提供链接到它们的详细页面
- 上下文已接收
- `concerns` - `Concern` 查询集
- `concerns/concern_detail.html`
- 上下文已接收
- `concern` - `Concern` 实例
- `form` - 解决关注点的最小表单。
- `concerns/report_concern.html`
- 上下文已接收
- `form` - 报告关注点的最小表单。
还提供了一个电子邮件模板,也可以进行自定义
- `concerns/concern_email.txt`
- 上下文已接收
- `protocol` - 网站的协议,用于构造关注点详细页面的永久链接,可以是 `http` 或 `https`。
- `site` - 包含用于构造永久链接的域的 `site` 对象。
- `concern` - 关注点实例本身,用于包含关于关注点的详细信息或获取绝对URL。
## 使用方法
在您的应用程序中公开“报告关注”表单的推荐方法是有一个按钮,该按钮打开一个页面内的模态/对话框来填写关注点的详细信息。很可能会发现他们关注的是他们当前正在查看页面上的某个内容,因此将他们引导到单独的页面填写表单通常不是一个好主意,因为他们将失去页面的确切状态(如果页面不是静态的)。
`Concern` 模型有一个字段 `document`,用于在报告关注点时存储捕获的HTML。可以使用JavaScript捕获当前状态的HTML。我们建议使用[jquery.freeze](http://cbmi.github.io/jquery.freeze/),它使得冻结DOM的当前状态变得非常简单。请注意,如果使用模态,在冻结DOM之前应该隐藏模态,否则在报告关注点时HTML中会可见。
```javascript
// 绑定到按钮或监听事件,冻结DOM并发送
// 一个POST请求以记录文档。服务器端可以将数据
// 写入HTML文件以供以后查看。
$('#freezer').click(function(event) {
event.preventDefault();
$.post('/screenlog/', $.param({document: $.freeze()}));
});
```
### 示例:Bootstrap的模态框
此示例假设使用[Bootstrap 2.3.2](https://bootstrap.ac.cn/2.3.2/)(版本3需要一些小的修改)以及上面推荐的jquery.freeze.js。
**模态框HTML标记**
```html
<div id="report-concern-modal" class="modal hide">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>报告关注</h3>
</div>
<div class="modal-body">
<p>当您点击“提交关注”时,该网页的副本将被发送给管理员。请提供有关我们可能无法在页面上看到的关注点的任何其他详细信息。</p>
<textarea class="input-block-level" rows="4" placeholder="请描述关注点的性质(可选)"></textarea>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">取消</button>
<button data-submit="modal" data-url="/concerns/report/" class="btn btn-primary">提交关注</button>
</div>
</div>
```
**打开模态框的锚点/按钮**
```html
<a id="report-concern-toggle" href="#report-concern-modal" role="button" class="btn" data-toggle="modal">报告关注</a>
```
**包含提交逻辑的JavaScript**
```javascript
// 相关元素
var concernButton = $('#report-concern-toggle'),
concernModal = $('#report-concern-modal'),
concernComment = concernModal.find('textarea'),
concernSubmit = concernModal.find('[data-submit]');
// 在不太可能的情况下,如果POST失败,显示一个包含
// 和用户可以直接联系电子邮件地址的备用消息。
var fallbackMessage = '<p class="text-error">遗憾的是提交 \
失败了。请联系我们,邮箱为 <a href="mailto:foo@example.com">foo@example.com</a> \
并提供有关关注点性质的尽可能多的详细信息。谢谢。</p>'
// 绑定到提交按钮的点击事件
concernSubmit.on('click', function(event) {
event.preventDefault();
在冻结DOM之前隐藏模态框
concernModal.modal('hide');
var data = $.param({
document: $.freeze(),
comment: concernComment.val(),
});
$.ajax({
type: 'POST',
data: data,
url: concernSubmit.data('url'),
success: function(resp) {
清除评论框,在按钮上暂时显示'谢谢'信息
concernComment.val('');
var buttonText = concernButton.text();
concernButton.addClass('btn-success').text('已提交。谢谢!')
setTimeout(function() {
concernButton.removeClass('btn-success').text(buttonText);
}, 3000);
},
error: function(xhr, code, error) {
重新打开模态框,显示备用信息
concernModal.modal('open');
concernComment.before(fallbackMessage);
}
});
});
```
该app的一个很好的用途是在包含去标识化患者信息的web应用中
## 安装
```bash
pip install django-concerns
```
## 设置
将`concerns`添加到`INSTALLED_APPS`中,并包含以下Django contrib应用
```python
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'concerns',
...
)
```
至少必须安装以下中间件
```python
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
)
```
将`concerns.urls`包含在`ROOT_URLCONF`中
```python
from django.conf.urls import url, patterns, include
urlpatterns = patterns('',
url(r'^concerns/', include('concerns.urls')),
...
)
```
## 设置
- `CONCERN_EMAIL_SUBJECT` - 发送给管理员的电子邮件的主题行。默认为`{site}的担忧报告`,其中`{site}`是当前站点的名称字符串格式变量,例如`example.com的担忧报告`
- `CONCERN_RESOLVERS` - 与`ADMINS`和`MANAGERS`相同的结构列表或元组,表示在报告担忧时应接收电子邮件的用户。
- `CONCERN_STATUSES` - 在审查期间担忧可能处于的状态列表。列表中的第一个状态用作新担忧的默认值。默认状态是`新`、`审查中`、`重复`和`关闭`。
## 模板
django-concerns提供的模板功能齐全,但_非常_简单。
- `concerns/concern_list.html` - 渲染有关关注点的列表,并提供链接到它们的详细页面
- 上下文已接收
- `concerns` - `Concern` 查询集
- `concerns/concern_detail.html`
- 上下文已接收
- `concern` - `Concern` 实例
- `form` - 解决关注点的最小表单。
- `concerns/report_concern.html`
- 上下文已接收
- `form` - 报告关注点的最小表单。
还提供了一个电子邮件模板,也可以进行自定义
- `concerns/concern_email.txt`
- 上下文已接收
- `protocol` - 网站的协议,用于构造关注点详细页面的永久链接,可以是 `http` 或 `https`。
- `site` - 包含用于构造永久链接的域的 `site` 对象。
- `concern` - 关注点实例本身,用于包含关于关注点的详细信息或获取绝对URL。
## 使用方法
在您的应用程序中公开“报告关注”表单的推荐方法是有一个按钮,该按钮打开一个页面内的模态/对话框来填写关注点的详细信息。很可能会发现他们关注的是他们当前正在查看页面上的某个内容,因此将他们引导到单独的页面填写表单通常不是一个好主意,因为他们将失去页面的确切状态(如果页面不是静态的)。
`Concern` 模型有一个字段 `document`,用于在报告关注点时存储捕获的HTML。可以使用JavaScript捕获当前状态的HTML。我们建议使用[jquery.freeze](http://cbmi.github.io/jquery.freeze/),它使得冻结DOM的当前状态变得非常简单。请注意,如果使用模态,在冻结DOM之前应该隐藏模态,否则在报告关注点时HTML中会可见。
```javascript
// 绑定到按钮或监听事件,冻结DOM并发送
// 一个POST请求以记录文档。服务器端可以将数据
// 写入HTML文件以供以后查看。
$('#freezer').click(function(event) {
event.preventDefault();
$.post('/screenlog/', $.param({document: $.freeze()}));
});
```
### 示例:Bootstrap的模态框
此示例假设使用[Bootstrap 2.3.2](https://bootstrap.ac.cn/2.3.2/)(版本3需要一些小的修改)以及上面推荐的jquery.freeze.js。
**模态框HTML标记**
```html
<div id="report-concern-modal" class="modal hide">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>报告关注</h3>
</div>
<div class="modal-body">
<p>当您点击“提交关注”时,该网页的副本将被发送给管理员。请提供有关我们可能无法在页面上看到的关注点的任何其他详细信息。</p>
<textarea class="input-block-level" rows="4" placeholder="请描述关注点的性质(可选)"></textarea>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">取消</button>
<button data-submit="modal" data-url="/concerns/report/" class="btn btn-primary">提交关注</button>
</div>
</div>
```
**打开模态框的锚点/按钮**
```html
<a id="report-concern-toggle" href="#report-concern-modal" role="button" class="btn" data-toggle="modal">报告关注</a>
```
**包含提交逻辑的JavaScript**
```javascript
// 相关元素
var concernButton = $('#report-concern-toggle'),
concernModal = $('#report-concern-modal'),
concernComment = concernModal.find('textarea'),
concernSubmit = concernModal.find('[data-submit]');
// 在不太可能的情况下,如果POST失败,显示一个包含
// 和用户可以直接联系电子邮件地址的备用消息。
var fallbackMessage = '<p class="text-error">遗憾的是提交 \
失败了。请联系我们,邮箱为 <a href="mailto:foo@example.com">foo@example.com</a> \
并提供有关关注点性质的尽可能多的详细信息。谢谢。</p>'
// 绑定到提交按钮的点击事件
concernSubmit.on('click', function(event) {
event.preventDefault();
在冻结DOM之前隐藏模态框
concernModal.modal('hide');
var data = $.param({
document: $.freeze(),
comment: concernComment.val(),
});
$.ajax({
type: 'POST',
data: data,
url: concernSubmit.data('url'),
success: function(resp) {
清除评论框,在按钮上暂时显示'谢谢'信息
concernComment.val('');
var buttonText = concernButton.text();
concernButton.addClass('btn-success').text('已提交。谢谢!')
setTimeout(function() {
concernButton.removeClass('btn-success').text(buttonText);
}, 3000);
},
error: function(xhr, code, error) {
重新打开模态框,显示备用信息
concernModal.modal('open');
concernComment.before(fallbackMessage);
}
});
});
```
项目详情
关闭
django-concerns-0.1.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aca5c43234d4d9e52047ab1530023ee765d872532da3c29b7af7995b051d6283 |
|
MD5 | 373af652c546d864a755a8b2b253bb04 |
|
BLAKE2b-256 | 6970e3befb79d3200532cf11ac57d21b6d0392cfa45dc337eea0bca1ff3b60ea |