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 11 Python
python登录豆瓣并发帖的方法
Jul 08 Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
对numpy中轴与维度的理解
Apr 18 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
Sep 23 Python
python not运算符的实例用法
Jun 30 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 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之字符串变相相减的代码
2007/03/19 PHP
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
Js apply方法详解
2017/02/16 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
python学习之编写查询ip程序
2016/02/27 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
用Python解数独的方法示例
2019/10/24 Python
python单例设计模式实现解析
2020/01/07 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
中青班党性分析材料
2014/02/16 职场文书
英文推荐信格式范文
2014/05/09 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
申报材料格式
2014/12/30 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
法律进社区活动总结
2015/05/07 职场文书