【django学习-27】media介绍与文件上传

news/2024/9/20 0:36:01
  • 前言:django开发过程中,有2个文件夹(也即:目录)比较特殊:static文件夹(目录)、media文件夹(目录)。

    • static目录:我们项目自己用到的文件(css、js、项目图片、插件),建议放在static目录下。
    • media目录:用户自己上传的文件等资源,建议放在media目录下。要想用media目录,必须先配置启用它。
  • 1.media的配置

    • 1.1:在项目的同级目录下新建文件夹media
    • 1.2:在setting中配置
import os
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
  • 1.3:urls中配置
from django.urls import path, re_path
from django.views.static import serve
from django.conf import settingsurlpatterns = [re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]
  • 2.上传混合数据(Form)
from django import forms
from app01.utils.bootstrap import BootStrapFormclass UpForm(BootStrapForm): bootstrap_exclude_fields = ['img']     # img字段去除bootstrap样式name = forms.CharField(label="姓名")age = forms.IntegerField(label="年龄")img = forms.FileField(label="头像")def upload_form(request):title = "Form上传"if request.method == "GET":form = UpForm()return render(request, 'upload_form.html', {"form": form, "title": title})form = UpForm(data=request.POST, files=request.FILES)if form.is_valid():# {'name': 'xwl', 'age': 123, 'img': <InMemoryUploadedFile: 图片 1.png (image/png)>}# 1.读取图片内容,写入到文件夹中并获取文件的路径。image_object = form.cleaned_data.get("img")# media_path = os.path.join(settings.MEDIA_ROOT, image_object.name)media_path = os.path.join("media", image_object.name)f = open(media_path, mode='wb')for chunk in image_object.chunks():f.write(chunk)f.close()# 2.将图片文件路径写入到数据库models.Boss.objects.create(name=form.cleaned_data['name'],age=form.cleaned_data['age'],img=media_path,)return HttpResponse("...")return render(request, 'upload_form.html', {"form": form, "title": title})
  • 3.上传混合数据(ModalForm)
    • 3.1.models.py
class City(models.Model):""" 城市 """name = models.CharField(verbose_name="名称", max_length=32)count = models.IntegerField(verbose_name="人口")# 本质上数据库也是CharField,自动保存数据。img = models.FileField(verbose_name="Logo", max_length=128, upload_to='city/')
  • 3.2:定义ModelForm
from app01.utils.bootstrap import BootStrapModelFormclass UpModelForm(BootStrapModelForm):bootstrap_exclude_fields = ['img']class Meta:model = models.Cityfields = "__all__"
  • 3.3:视图函数
def upload_modal_form(request):""" 上传文件和数据(modelForm)"""title = "ModelForm上传文件"if request.method == "GET":form = UpModelForm()return render(request, 'upload_form.html', {"form": form, 'title': title})form = UpModelForm(data=request.POST, files=request.FILES)if form.is_valid():# 对于文件:自动保存;# 字段 + 上传路径写入到数据库form.save()return HttpResponse("成功")return render(request, 'upload_form.html', {"form": form, 'title': title})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

ElasticJob控制台

进入ElasticJob官网 ElasticJob官网 点击 下载mac启动 打开 iterm,进入下载的包目录,运行 chomod +x ./start.sh ./start.sh启动后,会显示日志文件路径 cat 日志文件路径端口 8088,本地访问地址 http://localhost:8088账号密码都是 root 登录后,添加注册中心(zookeeper地…

VMWare Workstation 17命令行自动化测试高级用法详解

命令行自动化测试 VMWare Workstation 17 高级用法详解VMware Workstation 是一个强大的桌面虚拟化解决方案,允许用户在同一台物理机上运行多个虚拟机。虽然 VMware Workstation 主要提供图形用户界面 (GUI) 来管理虚拟机,但它也支持命令行工具来执行一些高级任务和自动化操作…

墨刀的特点和使用方法

墨刀是一款专业的原型设计工具,具有以下特点:简单易用:墨刀拥有直观的操作界面,用户可以轻松地创建原型设计,并且无需编程知识。多平台支持:墨刀可以在多个平台上使用,包括Web、iOS和Android,用户可以随时随地进行设计工作。实时协作:墨刀支持团队实时协作,多人可以同…

【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码

问题描述 对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢? 问题解答 当然可以,Azure Portal上操作的所有资源都是通过REST API来实现的,所以只要找到正确的API,就可以通过浏览器中…

【django学习-26】图片验证码

1.我们在登录的时候,经常看到输入用户名、密码之外。还需要输入验证码。这个验证码是怎么实现的呢?2.前端{% load static %} <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title>&…

mac指定虚拟网卡访问某个域名

通过 ifconfig 命令,一般会显示很多个虚拟网卡(冒号左边的就是网卡名)。 有些情况下,只能特定的网卡才能访问网站,所以需要指定网卡去访问。 指定网卡访问的命令(新增路由表) sudo route add -host 目标地址 -interface 网卡名删除指定网卡访问网站命令 sudo route del …

【django学习-25】登录及使用中间件进行登录校验

1.登录功能实现1.1:管理员表from django.db import modelsclass Admin(models.Model):""" 管理员 """username = models.CharField(verbose_name="用户名", max_length=32)password = models.CharField(verbose_name="密码"…

树链剖分[学习笔记]

树链剖分 壹. 树剖,就是树链剖分,将一棵树剖分成一堆链 (如说 \(\dots\) ) 本文主要介绍重链剖分。 树剖成链之后一段重链上的 \(dfs\) 序是连续的,那么我们就可以对 \(dfs\) 序使用一些数据结构(树状数组、线段树等)\(1\).一些变量及意义\(fa[x]\) \(x\) 的父节点 \(depth[…