Django图片管理的表单类详解

一 编辑mysite/image/forms.py文件

from django import forms
from django.core.files.base import ContentFile
from slugify import slugify
from urllib import request

from .models import Image

class ImageForm(forms.ModelForm):
    class Meta:
        model = Image
        fields = ('title', 'url', 'description')
    # 主要是处理某个字段,函数的命名规定是clean_<fieldname>,其中fieldname就是
    # 数据模型类中字段名称
    def clean_url(self):
        # 获取url字段的值
        url = self.cleaned_data['url']
        # 图像的扩展类型
        valid_extensions = ['jpg', 'jpeg', 'png']
        # 过滤得到扩展类型
        extension = url.rsplit('.', 1)[1].lower()
        if extension not in valid_extensions:
            raise forms.ValidationError("不是图像.")
        # 返回url的地址
        return url

    def save(self, force_insert=False, force_update=False, commit=True):
        # 将表单的数据保存到image对象
        image = super(ImageForm, self).save(commit=False)
        # 获取图像的url地址
        image_url = self.cleaned_data['url']
        # 要保存的图像名称
        image_name = '{0}.{1}'.format(slugify(image.title), image_url.rsplit('.', 1)[1].lower())
        # 返回要保存图像的数据
        response = request.urlopen(image_url)
        # 返回的结果保存到本地,并按照约定名称给图片命名
        image.image.save(image_name, ContentFile(response.read()), save=False)
        if commit:
            image.save()

        return image

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值