django-form.errors和前端上传文件
- 一.上传文件:
- 在相应的模型里面定义`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)
- 如果是使用ImageField,会需要安装一个依赖Pillow, Pillow是专门做图片处理的一个python包
- 2.需要在`settings.py`文件中指定媒体路径`MEDIA_ROOT`.
- django 中的文件存储分为两种
- 静态文件存储,一般是我们的JS、css、系统的图片文件等
- 媒体文件存储,一般是用户上传的图片、文件数据,或大的文件或视频等等
- 3.文件上传需要在HTML代码中的form表单中添加`enctype="multipart/form-data"`以及在views当中,使用`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和前端上传文件的更多相关文章
- 前端上传文件 后端PHP获取文件
<body> <form action="03-post-file.php" method="post" enctype="mult ...
- Django 练习班级管理系统八 -- 上传文件
Form表单上传文件 修改 views.py import os def upload(request): if request.method == 'GET': img_list = models. ...
- Django和Ueditor自定义存储上传文件的文件名
django台后默认上传文件名 在不使用分布式文件存储系统等第三方文件存储时,django使用默认的后台ImageField和FileField上传文件名默认使用原文件名,当出现同名时会在后面追加下随 ...
- web前端:上传文件夹(需支持多浏览器)
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...
- JAVA入门[16]-form表单,上传文件
一.如何传递参数 使用 @RequestParam 可以传递查询参数.例如:http://localhost:8092/category/detail?id=1 @RequestMapping(&qu ...
- Form实现无刷新上传文件并返回自定义值
今天开发过程中遇到了这样一个问题:需要将Excel上传至服务器进行解析,但是在文档不合适的情况下希望可以不刷新页面提示用户文档不合适.冥思苦想了半天,在网上找了不少资料最终试验成功,在此分享下处理方法 ...
- 优秀的前端上传文件插件 web uploader
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...
- H5前端上传文件的几个解决方案
目前,几个项目中用到了不同的方法,总结一下分享出来. 第一种,通过FormData来实现. 首先,添加input控件file. <input type="file" name ...
- jquery.form.js ajax提交上传文件
项目中最近有用到表单提交,是带有图片上传的表单录入,需要ajax异步提交,网上找了好多例子都是只能提交上传字段一个信息的,这里整理一下.表单里有普通文本信息字段也有图片上传字段. 1.jsp代码--引 ...
随机推荐
- a href 属性
两种用法: 页面跳转时使用 url (部分浏览器会阻止新窗口弹出页面),其他情况一律遵循 ‘结构样式行为分离’ 1. url href="#" 文档顶部 ...
- sql语句练习-基础篇
本文内容源自改编http://blog.csdn.net/ochangwen/article/details/51297893, 针对mysql数据库做了语法更改 个人觉得原版有些不合理之处,改了部分 ...
- angular 自定义指令参数详解
restrict:指令在dom中的声明形式 E(元素)A(属性)C(类名)M(注释) priority优先级:一个元素上存在两个指令,来决定那个指令被优先执行 terminal:true或false, ...
- web.xml中contextConfigLocation参数的作用
<context-param> <param-name>contextConfigLocation</param-name> <param-value> ...
- jsp登录页面,展示错误信息,刷新页面后错误依然存在解决方案
在做登录页面的时候,通常使用form表单同步提交的方法进行提交的,也就是在form表单里去写action,如果登录失败,jsp通过jstl表达式获取错误信息展示在页面上,但是有一个问题就是,即使你刷新 ...
- specialized English for automation-Lesson 1 Analog Amplifiers
要求每天阅读一篇技术文档,不需要记下来,只是能看懂就好..后发现,这就是专业英语的课程资料. ----------------------------------------------------- ...
- The record of Rf module debugging (1)
In order to improve engineering English writing ability,start from today,record my daily work of el ...
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
本篇博客比较了常见的5种开源协议的异同,大家在为自己的代码选择协议的时候可以参考.现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http ...
- Jmeter-Transaction Controller(事务控制器)
generate parent sample:生成父样本 include duration of timer and pre-post processors in generated sample:在 ...
- Mac触摸板没有弹性了
关机后,同时按启动键,空格键左边的option,command键还有p和r,听到开机声音响四声后再松开.一定要同时按!然后触摸板就可以用了. (转自知乎)