django-attachments是一个通用的Django应用,可以将文件(附件)附加到任何模型。
项目描述
django-attachments
django-attachments是一组通用的模板标签,可以将任何类型的文件附加到模型。
安装
将attachments添加到您的django项目的settings.py中的INSTALLED_APPS
INSTALLED_APPS = ( ... 'attachments', )
将附件urlpattern添加到您的urls.py
url(r'^attachments/', include('attachments.urls', namespace='attachments')),
迁移您的数据库
./manage.py migrate
授予用户一些权限
对于添加附件,授予用户(或组)attachments.add_attachment权限。
对于删除附件,授予用户(或组)attachments.delete_attachment权限。这允许用户仅删除自己的附件。
为了删除其他用户的附件,请授予用户“attachments.delete_foreign_attachments”的权限。
如果要在删除附件对象时从磁盘上删除文件,请将DELETE_ATTACHMENTS_FROM_DISK设置为True!
配置FILE_UPLOAD_MAX_SIZE(可选)。这是在引发表单验证错误之前的最大字节大小。如果未设置,则不对文件大小进行限制。
请注意,您需要提供文件服务!
django-attachments将文件存储在您的site_media目录中,并不对其进行修改。例如,如果用户上传了一个.html文件,您的Web服务器可能将其显示为HTML。将这些文件作为纯文本提供是一个好主意。在Apache2配置中,这看起来像
<Location /site_media/attachments>
AddType text/plain .html .htm .shtml .php .php5 .php4 .pl .cgi
</Location>
维护
django-attachments提供了delete_stale_attachments管理命令。它将删除所有相关对象不再存在的相关附件!系统管理员可以执行以下操作:
./manage.py delete_stale_attachments
您也可以通过cron执行此操作。
本地开发
使用pipenv安装本地开发环境。它为您创建一个虚拟环境,并从.env加载正确的ENV变量。
# pip install pipenv $ pipenv install Loading .env environment variables... Installing dependencies from Pipfile.lock (a053bc)... To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run.
测试
在本地环境中使用pipenv运行测试套件。
$ cd django-attachments/
$ pipenv install --dev
$ pipenv run pytest attachments/
或者使用tox针对不同的Django和Python版本进行测试
$ tox -r
您也可以通过调用带有测试应用设置的django-admin工具来调用测试套件或其他“manage.py”命令。
$ cd django-attachments/
$ pipenv install --dev
$ pipenv run test
$ pipenv run django-admin.py runserver
$ pipenv run django-admin makemigrations --dry-run
构建新版本
$ git tag $ change version in setup.cfg $ pip install -U setuptools $ python setup.py sdist && python setup.py bdist_wheel --universal $ twine upload --sign dist/*
用法
在contrib.admin
django-attachments为您的admin应用中任何类型的模型提供内联对象,以添加附件列表。
只需将AttachmentInlines添加到您的模型的admin选项中。示例
from django.contrib import admin
from attachments.admin import AttachmentInlines
class MyEntryOptions(admin.ModelAdmin):
inlines = (AttachmentInlines,)
在您的前端模板中
首先,在每个您想要使用它的模板中加载attachments_tags
{% load attachments_tags %}
django-attachments附带了一些templatetags,可以在前端为您的模型对象添加或删除附件。
get_attachments_for [object]:获取给定模型实例的附件。您可以可选地定义一个变量名,其中在模板上下文中存储附件列表(这在Django 1.8中是必需的)。如果不定义变量名,则直接打印结果。
{% get_attachments_for entry as attachments_list %}
attachments_count [object]:计算给定模型实例的附件数量并返回一个整数
{% attachments_count entry %}
attachment_form:渲染一个上传表单以添加给定模型实例的附件。示例
{% attachment_form [object] %}
如果当前用户未登录,则返回一个空字符串。
attachment_delete_link:渲染一个指向给定附件的删除视图的链接。示例
{% for att in attachments_list %} {{ att }} {% attachment_delete_link att %} {% endfor %}
此标签自动检查权限。如果给定附件的创建者是当前登录用户或用户具有delete_foreign_attachments权限,则返回一个HTML链接。
快速示例
{% load attachments_tags %}
{% get_attachments_for entry as my_entry_attachments %}
<span>Object has {% attachments_count entry %} attachments</span>
{% if my_entry_attachments %}
<ul>
{% for attachment in my_entry_attachments %}
<li>
<a href="{{ attachment.attachment_file.url }}">{{ attachment.filename }}</a>
{% attachment_delete_link attachment %}
</li>
{% endfor %}
</ul>
{% endif %}
{% attachment_form entry %}
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
{{ message }}
</li>
{% endfor %}
</ul>
{% endif %}
设置
DELETE_ATTACHMENTS_FROM_DISK将在删除附件模型时删除附件文件。默认为False!
FILE_UPLOAD_MAX_SIZE以字节为单位。拒绝超过此值的文件上传。默认未定义。
AppConfig.attachment_validators - 一系列自定义表单验证函数,将针对上传的文件执行。如果其中任何一个引发ValidationError,则拒绝上传。默认为空。有关示例,请参阅attachments/tests/testapp/apps.py。
变更日志
v1.11 (2023-04-20)
当存在 X-Return-Form-Errors 请求头时,从 add_attachment() 视图中以 JSON 格式返回表单错误。响应代码是 400 - 错误请求,因为这属于客户端错误。
v1.10 (2023-04-14)
通过 AppConfig.attachment_validators 支持自定义表单验证器
移除“attachment_list”中的引号(Aaron C. de Bruyn)
添加一个 URL 以匹配具有 UUID4 主键的对象。修复 问题 #94(Aaron C. de Bruyn)
记录 django-attachments 支持的设置
记录如何发布新版本。关闭 问题 #78
开始使用 GitHub Actions 进行测试
停止使用 Django 的过时版本进行测试
添加对 Django 4.0 和 4.1 以及 Python 3.9 和 3.10 的测试,并将默认的 Python 版本切换到 3.10
添加对 Python 3.11 的测试 - 目前仅在 Django 4.1 上受支持
v1.9.1 (2021-04-30)
重建上一个版本,但不发送遗留的迁移文件
v1.9 (2021-04-29) – 已从 PyPI 中移除
为 Django 3.2+ 显式配置 PK 为 AutoField,请参阅 https://docs.django.ac.cn/en/3.2/releases/3.2/#customizing-type-of-auto-created-primary-keys
开始使用 Django 3.2 进行测试
修复 README 中的拼写错误(Jesaja Everling)
在 README 中启用语法高亮(Basil S)
v1.8 (2020-09-03)
将 object_id 从 TextField() 更改为 CharField(max_length=64),并保留 db_index 参数。这解决了 MariaDB/MySQL 上的问题。
v1.7 (2020-08-31) - 在 MariaDB/MySQL 上损坏
为 object_id、created 和 modified 字段添加 DB 索引。
添加 delete_stale_attachments 命令以删除对应对象已删除的附件。
添加 Attachment.attach_to() 方法以在不同对象之间移动附件。
Django 3.1 兼容性和测试。
v1.6 (2020-08-17)
支持相关对象的整数以外的主键(例如 UUIDs)。
v1.5 (2019-12-08)
放弃对 Python 3.4 的支持。
添加了对 Python 3.8 的支持。
Django 3.0 兼容性和测试。
Django 2.2 兼容性和测试。
v1.4.1 (2019-07-22)
templatetags 现在允许可选的 next 参数。
v1.4 (2019-02-14)
放弃对 Django <=1.10 的支持。
修复了‘next’ URL 参数重定向。
v1.3.1 (2019-01-24)
Django 2.1 和 Python 3.7 支持。
通用代码清理。
v1.3 (2018-01-09)
添加了缺失的数据库迁移。
添加了新的模板标签 attachments_count。
添加了新的设置 DELETE_ATTACHMENTS_FROM_DISK,如果附件模型被删除,则删除附件文件。
添加了新的设置 FILE_UPLOAD_MAX_SIZE,以拒绝超过此值的文件上传。
v1.2 (2017-12-15)
Django 1.11 和 2.0 兼容性和测试。
v1.1 (2017-03-18)
Django 1.10 兼容性和测试。
Python 3.6 兼容性和测试。
修复了模型具有除“id”之外名称的外键的问题。
v1.0.1 (2016-06-12)
添加了芬兰语翻译。
对测试套件进行了小的改进。
v1.0 (2016-03-19)
对代码进行了通用清理,以保持与最新 Django(目前为 1.8 及以上版本)的兼容性,以及与 Python3 的兼容性。引入了完整的测试套件。
向后不兼容:附件视图现在使用 URL 模式 namespace,因此您需要调整 URL 模式
url(r'^attachments/', include('attachments.urls', namespace='attachments')),
- 向后不兼容:必须删除围绕 as 变量名的引号
-
{% get_attachments_for entry as "my_entry_attachments" %} becomes {% get_attachments_for entry as my_entry_attachments %}
- 可能向后不兼容:旧版本中存在关于
权限尚未在所有地方强制执行。从现在起,相关权限 add_attachment 和 delete_attachment 必须应用于所有相关用户。
v0.3.1 (2009-07-29)
在README中添加了一条说明,建议您保护您的静态文件。
v0.3 (2009-07-22)
本版本增加了对用户权限的更细粒度控制。您需要明确将权限添加到应能上传、删除或删除外部附件的用户。
这可能是不兼容的,因为您之前不需要分配添加/删除权限!
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
散列值 for django_attachments-1.11-py2.py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | 876f1da6ac8ef24d9c572874cc5176300a4fb654106705f9def1d2f52834e6ef |
|
MD5 | 443b16c069b4216a3a6627bd562a54b6 |
|
BLAKE2b-256 | b8ae7b564358a6f5a9a3b9edcbd8c0a9c65d8c3757f2efd890f0851b118bfcb0 |