• DAY20-Django之FileField与ImageField


    ImageField 和 FileField 可以分别对图片和文件进行上传到指定的文件夹中。

    1. 在下面的 models.py 中 :

    picture = models.ImageField(upload_to='avatars/', default="avatars/default.png",blank=True, null=True) 注:定义 ImageField 字段时必须制定参数 upload_to这个字段要写相对路径,

    这个参数会加在 settings.py 中的 MEDIA_ROOT后面, 形成一个路径, 这个路径就是上 传图片的存放位置,默认在Django项目根路径下,也就是MEDIA_ROOT默认是Django根目录

    所以要先设置好 mysite/settings.py中的 settings.py 中的 MEDIA_ROOT

    #获取文件对象
    avatar=request.FILES.get("avatar_img")    
    #插入数据,将图片对象直接赋值给字段
    UserInfo.objects.create_user(username=user,password=pwd,email=email,avatar=avatar)

    Django会在项目的根目录创建avatars文件夹,将上传文件下载到该文件夹中,avatar字段保存的是文件的相对路径。

     

    2. 在 mysite/settings.py中 :

    MEDIA_ROOT=’/home/chuangyuan/project/uploadfile’

    MEDIA_URL=’/media/’

    MEDIA_ROOT:存放 media 的路径, 这个值加上 upload_to的值就是真实存放上传图片文件位置

    MEDIA_URL:给这个属性设值之后,静态文件的链接前面会加上这个值,如果设置这个值,则UserInfo.avatar.url自动替换成:/media/avatars/default.png,可以在模板中直接调用:<img src="{{ article.user.avatar.url }}" alt="">

    如果不设置它的话,点击这个连接, url 会变成上个页面的 url 加上图片的相对路径。

     

    3.url.py:

    from django.views.static import serve
    from cnblog_s20 import settings
    
    # 添加media 配置
        url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),

     浏览器可以直接访问http://127.0.0.1:8000/media/avatars/lufei.jpg,即我们的用户上传文件 

    4.FileField 和 ImageFiled 相同。

     
     
     
     
    FileField 和 FieldFile
    当在一个model上访问一个FileField(ImageField继承自FileField,所以也适用)时,我们可以得到一个FieldFile实例,作为我们访问底层文件(即真实的那个文件)的代理(proxy)。之所以被称为代理,是因为它具有几个属性和方法,方便我们与具体的文件数据进行交互
    • FieldFile.url:返回一个只读的、用于访问文件的相对路径URL,这是通过访问底层的Storage类的url(name)方法实现的
    • FieldFile.open(mode='rb'):完全类似于python的open(),打开与当前实例相关联的文件,打开模式由mode参数指定
    • FieldFile.close():类似于python的close()方法
    • FieldFile.save(name,content,save=True):手动地将一个文件内容关联到该Field,name是调用后文件的名称,content是要关联的文件的内容,save表示该实例是否在调用完成后就执行保存到数据库。
      • 注:这里的content必须是一个django.core.files.File的实例,而不是python内置的file对象,但是可以通过用python内置的open方法获得file对象后构造一个File实例
    • FieldFile.delete(save=True):删除关联的文件。
      • 注:当model实例被删除的时候,对应的文件不会被自动删除,需要我们手动删除,或执行一条项目管理命令,比如cron
     
    File Storage
    Django将决定文件存储在哪里的权利委托给一个文件存储系统(file storage system)对象
    Django默认的文件存储系统由settings中的DEFUALT_FILE_STORAGE指定,如果我们在编程过程中不显式地指定
    我们可以编写定制的文件存储系统,当我们不想使用系统默认的storage时,比如我们想把文件保存在一个远程系统中
    在FileField和ImageField中,可以用storage参数指定要使用的storage system
  • 相关阅读:
    Strom在本地运行调试出现的错误
    能否通过六面照片构建3D模型?比如人脸,全身的多角度照片,生成3D模型。?
    怎么识别自己的眼型?眼型图片参照
    用opencv检测人眼并定位瞳孔位置
    仿射变换
    二维图像的三角形变换算法解释
    Labeled Faces in the Wild 人脸识别数据集
    【图像处理】计算Haar特征个数
    人脸识别技术大总结(1):Face Detection & Alignment
    基于Policy Gradient实现CartPole
  • 原文地址:https://www.cnblogs.com/guoyunlong666/p/9064825.html
Copyright © 2020-2023  润新知