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抓取百度首页的方法
May 19 Python
Python中的推导式使用详解
Jun 03 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python 识别图片中的文字信息方法
May 10 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
python后端接收前端回传的文件方法
Jan 02 Python
Python制作exe文件简单流程
Jan 24 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
从手册去理解分析PHP session机制
2011/07/17 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
基于jquery的滚动新闻列表
2010/06/19 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
js的2种继承方式详解
2014/03/04 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python中的ceil()方法使用教程
2015/05/14 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python中单、双下划线的区别总结
2017/12/01 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
django使用admin站点上传图片的实例
2019/07/28 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
监理资料员岗位职责
2014/01/03 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python