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 运算符 供重载参考
Jun 11 Python
Python实现抓取网页并且解析的实例
Sep 20 Python
python基于windows平台锁定键盘输入的方法
Mar 05 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
python用户管理系统
Mar 13 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
Python代码需要缩进吗
Jul 01 Python
基于opencv实现简单画板功能
Aug 02 Python
Python网络编程之ZeroMQ知识总结
Apr 25 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
Laravel中间件实现原理详解
2016/10/09 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
Python 修改列表中的元素方法
2018/06/26 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
python制作填词游戏步骤详解
2019/05/05 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
就业表自我评价分享
2014/02/06 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
施工协议书范本
2014/04/22 职场文书
结婚保证书范文
2014/04/29 职场文书
作风建设年度心得体会
2014/10/29 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
浅谈Python 中的复数问题
2021/05/19 Python