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三元运算符实现方法
Dec 17 Python
Python回调函数用法实例详解
Jul 02 Python
Python实现选择排序
Jun 04 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
Oct 15 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
python看某个模块的版本方法
Oct 16 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
Python实现名片管理系统
Feb 14 Python
python实现图片转换成素描和漫画格式
Aug 19 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 Python
如何利用python 读取配置文件
Jan 06 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不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
最佳JS代码编写的14条技巧
2011/01/09 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
node网页分段渲染详解
2016/09/05 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
JS合并两个数组的3种方法详解
2019/10/24 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
python轻松实现代码编码格式转换
2015/03/26 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
python中如何使用虚拟环境
2020/10/14 Python
安全检查验收制度
2014/01/12 职场文书
自主实习接收函
2014/01/13 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
python实现简单的名片管理系统
2021/04/26 Python
python基础之//、/与%的区别详解
2022/06/10 Python