django 12、实现文件上传

一、实现文件上传

1定义模型

#上传作品表:作品名称,用户名
class Upload(models.Model):
    #注意这里的用户名是FileField类型
    name = models.FileField(upload_to = './upload/')
    username = models.CharField(max_length = 20)

    def __str__(self):
        return self.name


 

2定义模版

    <form method="post" enctype="multipart/form-data" >
        {{uf.as_p}}
        <input type="submit" value="上传"/>
    </form>


 


 

3定义视图

def user(request):
    print "user"
    if request.method == "POST":
        uf = UploadFileForm(request.POST,request.FILES)
        if uf.is_valid():
            #获取表单信息
            #username = uf.cleaned_data['username']
            headImg = uf.cleaned_data['headImg']
            print str(headImg)
            #写入数据库
            upload = Upload()
            upload.name = headImg
            upload.username = request.user.username
            upload.save()
            return HttpResponse('upload ok!')
        else:
            return HttpResponse("表单验证失败")
    else:
        uf = UploadFileForm()
        return render_to_response('user.html',{'uf':uf , "user":request.user})


 

4配置url

 url(r'^user/$' , 'account.views.user'),


这样就实现了文件上传功能

二、展示上传的文件

(例如图片等)

 

根据django官方文档的说明:https://docs.djangoproject.com/en/1.7/topics/files/#using-files-in-models

我们定义的模型中一个字段name是文件字段,但是其实存储的是上传的图片或文件的路径

name = models.FileField(upload_to = './upload/')

我们需要配置upload上传路径

1在settings.py中添加

MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
MEDIA_URL = '/upload/'


2在url中配置路径:

达成的效果是: 让 MEDIA_URL 等同于 MEDIAA_ROOT

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # Examples:

    url(r'^admin/', include(admin.site.urls)),

) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


注意:在 patterns(....)后面加上 static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

3在模板中设置图片或文件路径

 

<body>
    {% if upload %}
        <!--在你的字段中获取url属性进行展示-->
        <img src="{{upload.name.url}}" />
    {% endif %}
</body>


关键在于: 比如你从后台获取查询的数据叫做upload , upload.name是FileField的字段,只需要获取其url属性进行展示即可

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值