django模型字段是智能的。
django-smartfields的Python项目详细描述
Django模型域是智能的。
此应用程序引入了处理字段值的声明方式。可能是 当一个字段依赖于另一个字段的值时特别有用,即使 一个领域取决于它自己。一开始听起来可能没用,但是,当它转过来的时候 它是一个令人惊奇的概念,有助于编写清晰、简洁和干练的代码。
最好的描述方法是用一个简单的例子。假设有一个领域 您存储了一个自定义HTML页面,并且希望附加另一个字段 到同一个模型存储相同的页面,但是去掉了html标记,而且 您希望它在第一个字段更改其值时进行更新。一个 处理这个问题的常用方法是覆盖模型的save方法并将 所有的逻辑,对吧?如果你能给一个字段一个函数 脱衣舞和其他事情都处理好了吗?那不是很好吗, 呵呵?好吧,这是这个应用程序让你做的很多事情之一。
另一个很好的例子是django的ImageField可以更新width_field 每当图像更改时,height_field。此应用程序使用类似的概念 为了实现这个功能。但这里有一个更有力的例子 演示此应用程序的价值。假设你想让一个用户 能够以任何格式上载图像并自动添加 此图像转换为JPEG格式并缩小以适合大小为1024x768的框。在这里 是如何利用django smartfields的
fromdjango.dbimportmodelsfromsmartfieldsimportfieldsfromsmartfields.dependenciesimportFileDependencyfromsmartfields.processorsimportImageProcessorclassUser(models.Model):# ... more fields ....avatar=fields.ImageField(upload_to='avatar',dependencies=[FileDependency(attname='avatar_jpeg',processor=ImageProcessor(format='JPEG',scale={'max_width':1024,'max_height':768})),])avatar_jpeg=fields.ImageField(upload_to='avatar')# ... more fields ...
就这样。我有没有提到,当新文件 上传了?
所以,希望我说服你试试这个应用。已经满了 文档也在路上,但现在您可以查看“tests”文件夹 一些例子。
django设置
大多数功能都需要Django应用程序:
INSTALLED_APPS=['django.contrib.auth','django.contrib.sessions','django.contrib.contenttypes','django.contrib.sites','smartfields',# optional, needed for forms'crispy_forms']
其他必需设置
MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware']SITE_ID=1
依赖关系
- Django版本>;=1.7(应该也适用于2.x)
- Python Pillow-(可选)用于 图像转换/调整大小。和/或
- Wand-(可选)也用于图像处理。
- ffmpeg-(可选)用于视频转换。(可以 很容易被采用。
- BeautifulSoup4-(可选) 对于HTML剥离
- lxml-(可选)用于美化组。
- django-crispy-forms-(可选)用于 ajax上传。
- Plupload-(可选)用于ajax上传。
- Bootstrap3-(可选)用于ajax上传。
变更日志
1.1.0
1.0.7
- 添加了gis字段。
- 使lxml成为htmlprocessor的默认解析器。
1.0.6
- 添加了RenameFileProcessor
1.0.5
- 小错误修复。
1.0.4
- 切换到MIT许可证
- 已将stashed_value添加到处理器。
1.0.3
- 添加了对Wand和WandImageProcessor的支持。
- 使其与Django 1.8兼容
- 已更新编译的javascript文件。
1.0.2
- 介绍了pre_processor。
- 使UploadTo可序列化。
- 摆脱了自定义处理程序。
- 小错误修复。
1.0.0
- 初始版本