{"id":20525778,"url":"https://github.com/chanmo/django-simple-attachments","last_synced_at":"2025-05-09T11:30:34.342Z","repository":{"id":40050507,"uuid":"255878840","full_name":"ChanMo/django-simple-attachments","owner":"ChanMo","description":"图片附件统一管理模块","archived":false,"fork":false,"pushed_at":"2023-01-06T13:19:45.000Z","size":4918,"stargazers_count":2,"open_issues_count":17,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-15T16:36:54.403Z","etag":null,"topics":["attachments","django","image","media","thunbmail"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ChanMo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-15T10:11:07.000Z","updated_at":"2022-05-11T06:53:25.000Z","dependencies_parsed_at":"2023-02-06T04:15:34.079Z","dependency_job_id":null,"html_url":"https://github.com/ChanMo/django-simple-attachments","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChanMo%2Fdjango-simple-attachments","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChanMo%2Fdjango-simple-attachments/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChanMo%2Fdjango-simple-attachments/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChanMo%2Fdjango-simple-attachments/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ChanMo","download_url":"https://codeload.github.com/ChanMo/django-simple-attachments/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224855006,"owners_count":17380959,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["attachments","django","image","media","thunbmail"],"created_at":"2024-11-15T23:09:29.717Z","updated_at":"2024-11-15T23:09:30.667Z","avatar_url":"https://github.com/ChanMo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Django Simple Attachments\n\n基于Django的图片储存模块\n\n## Requirements\n\n* `sorl-thumbnail` 生成缓存图片\n* `django-taggit` 图片标签\n* `djangorestframework` API\n* `django-extra-fields` base64字段上传\n\n\n## Getting Started\n\n### Install Packages\n\n```\n$ pip install sorl-thumbnail\n$ pip install django-taggit\n$ pip install django-extra-fields\n$ pip install djangorestframework\n$ pip install django-simple-attachments\n```\n\n### Update `settings.py`\n\n```\nINSTALLED_APPS = [\n    ...\n    'sorl.thumbnail',\n    'taggit',\n    'rest_framework',\n    'attachments',\n    ...\n]\n```\n\n### Update `urls.py`\n\n```\nfrom attachments.views import media_view\n\nurlpatterns = [\n    ...\n    path('api/attachments/', include('attachments.urls')),\n    re_path(r'^media/attachments/(?P\u003cpath\u003e.*)(/?)?', media_view),\n    ...\n]\n```\n\n## URL使用\n\n支持`url`中对图片进行裁剪等操作, 模仿[unslash](https://unsplash.com)\n\n```\n\u003cimg src=\"/media/attachments/0001.png?width=100\u0026height=100\" /\u003e\n```\n\n### 参数说明\n\n详细缩略图生成说明请参考`Pillow`\n\n1. `width`, 图片最大宽度\n2. `height`, 图片最大高度\n3. `crop`, 裁剪形式\n4. `quality`, 质量\n\n\n## Fields\n\n\n### ImagePickerField\n\n单张图片选择字段, 需使用webpack打包js文件\n\n```\nfrom attachments.fields import ImagePickerField\n\nclass Brand(models.Model):\n    name = models.CharField(max_length=200)\n    logo = ImagePickerField(blank=True, null=True)\n```\n\n### MultipleImageField\n\n多张图片选择字段, 需使用webpack打包js文件, 支持拖拽排序, ** 字段基于postgres的ArrayField, 所以必须使用postgres数据库 **\n\n```\nfrom attachments.fields import MultipleImageField\n\nclass Product(models.Model):\n    name = models.CharField(max_length=200)\n    images = MultipleImageField(size=4, blank=True, default=list)\n```\n\n![字段效果](./multiple_image.png)\n![图片选择](./choices.png)\n\n### RichTextField\n\n基于`tinymce`的富文本编辑器, 支持图片上传\n\n使用前请下载`tinymce`\n\n```\n$ cd static\n$ bower install tinymce\n```\n\n使用\n\n```\nfrom attachments.fields import RichTextField\n\nclass Blog(models.Model):\n    title = models.CharField(max_length=200)\n    content = RichTextField(blank=True, null=True)\n\n```\n\n## Webpack\n\n```javascript\nmodule.exports = {\n  entry: {\n    image_picker: './attachments/components/image_picker.js',\n    multiple_image: './attachments/components/multiple_image.js'\n  },\n  output: {\n    path: path.resolve('./static/dist/'),\n    filename: '[name].bundle.js'\n  },\n  module: {\n    rules: [\n      {test:/\\.js$/, exclude:/node_modules/, use:{\n        loader: 'babel-loader',\n        options: {\n          presets: [['@babel/preset-env', {'targets':{'node':10}}], '@babel/preset-react']\n        }\n      }}\n    ]\n  },\n}\n```\n\n## Next\n\n* [x] 实时图片裁剪\n* [x] 搜索\n* [x] 标签筛选\n* [x] 删除\n* [x] 权限\n* [ ] 图片自动标签\n* [ ] 实时图片格式转换\n* [ ] 自动清理\n\n\n## Version\n\n* `0.2.0` 优化图片选择操作, 增加右侧实时查看并编辑图片基础信息, 增加搜索, 标签筛选\n* `0.1.0` 增加fields功能, 增加实时编辑功能\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchanmo%2Fdjango-simple-attachments","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchanmo%2Fdjango-simple-attachments","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchanmo%2Fdjango-simple-attachments/lists"}