• 一.上传文件:
    • 在相应的模型里面定义`FileField`或者是`ImageField`类型的字段,并且1.设置好`upload_to`参数来指定上传的路径.
    • class User(models.Model):
      """ 用户表 """
      username = models.CharField(max_length=12, verbose_name="用户名")
      _password = models.CharField(max_length=50, verbose_name="密码")
      headshot = models.ImageField(u'头像', upload_to='upload/%Y/%m/%d', null=True)
    headshot = models.ImageField(u'头像', upload_to="upload/%Y/%m/%d")  # 上传的路径,django自己创建路径
 
  • 如果是使用ImageField,会需要安装一个依赖Pillow, Pillow是专门做图片处理的一个python包
 
pip install Pillow
 
 
  • 2.需要在`settings.py`文件中指定媒体路径`MEDIA_ROOT`.
 MEDIA_URL = '/media/'  
MEDIA_ROOT = os.path.join(BASE_DIR, ''media')
 ps: 这里是媒体文件,它也是一种静态文件,在django中,这一块的内容是要跟其它静态文件分开处理的
 
  • django 中的文件存储分为两种
    • 静态文件存储,一般是我们的JS、css、系统的图片文件等
    • 媒体文件存储,一般是用户上传的图片、文件数据,或大的文件或视频等等
 
  • 3.文件上传需要在HTML代码中的form表单中添加`enctype="multipart/form-data"`以及在views当中,使用`request.FILES`来接收文件.
 
form = LoginUserForm(request.POST, request.FILES)
 
  • 文件只有在保存时才会处理,数据库保存的是文件的路径,不会保存文件本身.
  • 3.1 前端通过input type='file' 传文件。后端通过request.FILES.get('name') 取得
try:
file_content = request.FILES.get('upfile')
sysfile = os.path.abspath('.') + '/' + 'media'
file_save_path = os.path.join(sysfile, file_content.name)
with open(file_save_path, 'wb') as f:
for chunk in file_content.chunks():
f.write(chunk)
# build_absolute_uri 自动返回服务器的地址
url = request.build_absolute_uri(settings.MEDIA_URL+file_content.name)
return restful.result(data={'url': url})
except:
return restful.params_error('识别不了该文件')
  • 4 设置url,访问保存的文件
from django.urls import include, path
from django.conf.urls.static import static
from django.conf import settings # settings是配置文件settings.py
urlpatterns = [
path("", include("apps.app.urls")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # 配置的媒体路径
  • 二.表单错误消息:
    • 表单验证没有通过后,表单会产生一个`errors`属性,这个属性包括所有的验证错误信息。
    • 通过`form.errors`即可访问。
    • 通过`form.erros.属性名`访问对应的错误
    • 通过`form.errors.as_json()`可以将错误消息转换成json数据。
    • 自定义错误消息:在`Field`中添加一个`error_messages`的`dict`类型的参数,然后根据`属性名`设置对应的`message`,例如以下代码:
    • 必须要执行完is_valid函数,否则errors是不会包含错误
  • 表单自定义错误消息:
    • 在表单中,重写方法`clean_field`(field是一个属性名),可以自定义针对某一个`field`的验证机制,如果出现错误
  • 如果某个`field`出现验证错误,通过`add_error`方法给指定的field添加错误消息。
  • 直接抛出一个`raise ValidationError(message, code="属性名")`就可以了。
  • 重写`clean`方法会在先完成`django`默认的验证后,再重新执行`clean`方法的验证
  • 如果验证完成成功了,则直接返回当前值

    def clean_password(self):
password = self.cleaned_data.get('password',None)
if len(password) < 6:
raise forms.ValidationError(u'password at least 6 length',code='min_length')
return password

django-form.errors和前端上传文件的更多相关文章

  1. 前端上传文件 后端PHP获取文件

    <body> <form action="03-post-file.php" method="post" enctype="mult ...

  2. Django 练习班级管理系统八 -- 上传文件

    Form表单上传文件 修改 views.py import os def upload(request): if request.method == 'GET': img_list = models. ...

  3. Django和Ueditor自定义存储上传文件的文件名

    django台后默认上传文件名 在不使用分布式文件存储系统等第三方文件存储时,django使用默认的后台ImageField和FileField上传文件名默认使用原文件名,当出现同名时会在后面追加下随 ...

  4. web前端:上传文件夹(需支持多浏览器)

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  5. JAVA入门[16]-form表单,上传文件

    一.如何传递参数 使用 @RequestParam 可以传递查询参数.例如:http://localhost:8092/category/detail?id=1 @RequestMapping(&qu ...

  6. Form实现无刷新上传文件并返回自定义值

    今天开发过程中遇到了这样一个问题:需要将Excel上传至服务器进行解析,但是在文档不合适的情况下希望可以不刷新页面提示用户文档不合适.冥思苦想了半天,在网上找了不少资料最终试验成功,在此分享下处理方法 ...

  7. 优秀的前端上传文件插件 web uploader

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  8. H5前端上传文件的几个解决方案

    目前,几个项目中用到了不同的方法,总结一下分享出来. 第一种,通过FormData来实现. 首先,添加input控件file. <input type="file" name ...

  9. jquery.form.js ajax提交上传文件

    项目中最近有用到表单提交,是带有图片上传的表单录入,需要ajax异步提交,网上找了好多例子都是只能提交上传字段一个信息的,这里整理一下.表单里有普通文本信息字段也有图片上传字段. 1.jsp代码--引 ...

随机推荐

  1. Android------Button 添加声音效果(两种方式)

    我在先前的案例<Android 的底部导航栏 BottomNavigationBar>中添加以底部 的4个按钮切换添加声音 下来看看案例效果图 使用添加依赖 compile 'com.as ...

  2. UVA-1515 Pool construction (最小割)

    题目大意:有一块地,分成nxm块.有的块上长着草,有的块上是荒地.将任何一块长着草的块上的草拔掉都需要花费d个力气,往任何一块荒地上种上草都需要花费f个力气,在草和荒地之间架一个篱笆需要花费b个力气, ...

  3. UVALive-3645 Objective: Berlin (最大流:时序模型)

    题目大意:有n个城市,m条航班.已知每条航班的起点和终点,还有每条航班的载客量.出发时间.到达时间.并且要求在任何一个城市(起点.终点除外)都至少要有30分钟的中转时间,求起点到终点的最大客流量. 题 ...

  4. c#在winform中用DataGridView实现分页效果

    public partial class Form11 : Form { public Form11() { InitializeComponent(); } private int Inum = 1 ...

  5. wikioi 1028 花店橱窗布置 最大权匹配

    中文题意不描述. 链接:http://wikioi.com/problem/1028/ 这题一开始很裸的最大权二分匹配.但是原来没有接触过,KM的这个最大权不大会.然后一开始以为用最大费用最大流直接就 ...

  6. TCP报文格式和三次握手——三次握手三个tcp包(header+data),此外,TCP 报文段中的数据部分是可选的,在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。

    from:https://blog.csdn.net/mary19920410/article/details/58030147 TCP报文是TCP层传输的数据单元,也叫报文段. 1.端口号:用来标识 ...

  7. 创建Vue.js对象:我的第一个Vue.js输出信息

    <!DOCTYPE html><html><head><meta charset=”utf-8″><title>Vue第一条信息</t ...

  8. FireFox和IE下使用Date来构造新Date对象的BUG

    正常方式 我们都知道可以使用new Date()来创建一个Date对象. new Date();//Date {Mon Jun 15 2015 15:53:16 GMT+0800} 也可以用new D ...

  9. Android listview自定义分割线宽度

    代码很简单防止以后忘记 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:an ...

  10. Ubuntu用户管理

    本文主要介绍Ubuntu的用户管理,包括建立和删除用户,用户授权等 ================== 创建用户并授权================== sudo adduser xxx 会在ho ...