• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

使用Django form或api上传图片

Python框架 彭东稳 6年前 (2017-11-27) 31734次浏览 已收录 0个评论

对于Web应用程序,以便能够上传文件(资料图片,歌曲,PDF格式,文字……),它通常是很有用的。下面来看看如何使用Django上传图片。在开始开发图片上传之前,请确保Python的图像库(PIL)已经安装。现在来说明上传图片,我们这里使用Django form结合models的形式上传图片,实现以下几个功能:

  • Model和ModelForm创建表单
  • POST上传图片

一、使用ModelForm上传图片

  • 编写Models

首先创建Model,保存上传资料:

正如你所看到的,这里的主要区别仅仅是models.ImageField。ImageField字段将确保上传的文件是一个图像。如果不是,格式验证将失败。ImageField使用强制性参数upload_to,这表示硬盘驱动器,图像保存所在的地方。注意,该参数将被添加到settings.py文件中定义的MEDIA_ROOT选项中。

model中定义的image的参数upload_to=’photos’,上传的图片将保存至/tmp/photos/目录下。

然后记得要migrate数据库:

  • 编写Forms

接着建立表单,我们这里使用ModelForm,使模型跟表单紧密关联。

  • 编写Views

现在我们有表单和模型,让我们来创建视图:

视图逻辑大概的意思可以参考:Django上传下载文件

  • 编写urls

url分为两个部分,如下:

  • 编写templates

views.py中需要的两个html文件放在mysite/templates/polls/目录下。Form要支持上传图片,需要在form中设置enctype=”multipart/form-data”,不设置的话文件不支持上传。

upload.html

success.html

到此为止代码都完成了,只需要开启Django server即可。

  • 上传测试

正常情况下,访问http://127.0.0.1:8000/polls/可以看见如下页面:

使用Django form或api上传图片

上传成功后可以在/tmp/photos目录下看见图片,并且在数据库中可以查看到相关信息,其中就包括了图片路径。

二、使用Form类上传图片

上面创建表单是一种比较简洁的方式,直接使用Django提供的ModelForm类;如果不想所有字段保存到数据库,可以使用Form类,属于另一种方式:

  • 编写Forms

  • 编写Views

整个例子对于处理文件上传也是一样的,只需要改变一些数据类型即可。

另外整个例子涉及的Django基础知识还是挺多,比如views、urls、models、templates、forms、modelform等;这里都没细说,可以看Django官网。

三、通过API上传图片

可以通过Django REST framework框架编写API,然后可以通过API来上传图片。

首先需要配置Django静态目录,然后把文件上传到静态目录,不然应该不能直接访问到图片。

修改settings文件,记得注释MEDIA_ROOT配置。

然后对于model的配置就要把图片上传到静态目录了,配置应该如下:

下面就是添加djangoframework相关配置了,首先要安装Djangoframework,具体看:Django REST framework快速入门

首先在polls应用下创建一个api目录,然后编写serializers.py文件:

然后提供views.py文件:

最后添加一些urls路由,如下:

都完成之后,就可以通过http://127.0.0.1:8000/polls/api/接口进行访问,上传图片了。

然后也可以通过curl命令上传,其格式如下:

<参考>

http://www.imooc.com/article/20932

http://www.jianshu.com/p/32e5abda158f


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (3)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!