python中Django文件上传方法详解


Posted in Python onAugust 05, 2020

Django上传文件最简单最官方的方法

1.配置media路径

在settings.py中添加如下代码:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

2.定义数据表

import os
from django.db import models
from django.utils.timezone import now as timezone_now
def upload_to(instance, filename):
    now = timezone_now()
    base, ext = os.path.splitext(filename)
    ext = ext.lower()
    return f'quotes/{now:%Y/%m/%Y%m%d%H%M%S}{ext}'
class Quote(models.Model):
    class Meta:
        verbose_name = 'quote'
        verbose_name_plural = verbose_name
    author = models.CharField('author', max_length=200)
    quote = models.TextField('quote')
    picture = models.ImageField('picture', upload_to=upload_to, blank=True, null=True)
    def __str__(self):
        return self.quote

这里的upload_to函数会自动把文件的名称修改为日期型的名称,不会重名。

相关推荐:《Python视频教程》

python中Django文件上传方法详解

3.添加form表单

forms.py文件

from django import forms
from .models import Quote
class QuoteForm(forms.ModelForm):
    class Meta:
        model = Quote
        fields = '__all__'

4.编写视图代码

from django.shortcuts import render, redirect
from .forms import QuoteForm
def add_quote(request):
    form = QuoteForm()
    if request.method == 'POST':
        form = QuoteForm(
            data=request.POST,
            files=request.FILES
        )
        if form.is_valid():
            form.save()
            return redirect('quote:add_quote')
    else:
        return render(request, 'quotes/add_quote.html', {
            'form': form
        })

5.编写模板html代码

<form action="{% url 'quote:add_quote' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">save</button>
</form>

6.添加url映射

在app的目录的urls.py添加
from django.urls import path
from quotes.views import add_quote
app_name = 'quote'
urlpatterns = [
    path('add/', add_quote, name='add_quote')
]

在项目目录的urls.py文件添加

from django.urls import path, include
urlpatterns = [
    path('quotes/', include('quotes.urls', namespace='quote'))
]

效果图

python中Django文件上传方法详解

知识点扩展:

最简单的文件下载功能的实现

将文件流放入HttpResponse对象即可,如

def file_download(request):
 # do something...
 with open('file_name.txt') as f:
  c = f.read()
 return HttpResponse(c)

到此这篇关于python中Django文件上传方法详解的文章就介绍到这了,更多相关Django文件上传方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
Python使用sorted排序的方法小结
Jul 28 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
Python hashlib常见摘要算法详解
Jan 13 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
使用PyQt5实现图片查看器的示例代码
Apr 21 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
Python如何在循环内使用list.remove()
Jun 01 Python
python如何从键盘获取输入实例
Jun 18 Python
python Tkinter的简单入门教程
Apr 11 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 #Python
Python如何将将模块分割成多个文件
Aug 04 #Python
Python 保存加载mat格式文件的示例代码
Aug 04 #Python
python中判断文件结束符的具体方法
Aug 04 #Python
python字典key不能是可以是啥类型
Aug 04 #Python
Python延迟绑定问题原理及解决方案
Aug 04 #Python
Python 使用生成器代替线程的方法
Aug 04 #Python
You might like
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
Document 对象的常用方法
2009/07/31 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
JS获取时间的方法
2015/01/21 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
python在控制台输出进度条的方法
2015/06/20 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
详解python tcp编程
2020/08/24 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
方正Java笔试题
2014/07/03 面试题
设计毕业生简历中的自我评价
2013/10/01 职场文书
个人自我剖析材料
2014/02/07 职场文书
产品售后服务承诺书
2014/05/21 职场文书
教师专业自荐信
2014/05/31 职场文书
趣味运动会简讯
2015/07/20 职场文书
中秋节感想
2015/08/10 职场文书
2016大一新生军训感言
2015/12/08 职场文书
js 数组 fill() 填充方法
2021/11/02 Javascript