• 一.上传文件:
    • 在相应的模型里面定义`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. 计算机网络七层协议模型 “开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)

    计算机网络七层协议模型 作者:Ryan    时间:2013年10月7日 一.物理层(Physical Layer) OSI模型的最低层或第一层,规定了激活.维持.关闭通信端点之间的机械特性.电气特性 ...

  2. UVA-1153 Keep the Customer Satisfied (贪心)

    题目大意:有n件工作,做每件工作的消耗时间为s,截止时间为d,问最多能做完几件工作. 题目分析:贪心策略:优先做截止时间靠前的,一旦做不完当前工作,则从已经做过的工作中删去一件耗时最长的,用当前工作取 ...

  3. Granting and Managing Item Level Permission using SharePoint2013 Designer Workflow

    https://gnanasivamgunasekaran.wordpress.com/2015/12/29/granting-and-managing-item-level-permission-u ...

  4. hdu——1873(优先队列)

    看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. UVA 11624 Fire! bfs 难度:0

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  6. 1元抢卡巴KAV_不限量疯抢即日起至2013.10.31截止

    活动地址:http://img.kaba365.com/mail_files/kaba1yuan.html

  7. tintColor 与 UIImage.renderingMode 渲染

    在iOS7中,UIView新增了一个属性tintColor.这是一个UIColor,被使用在UIView中改变应用程序的外观的.默认tintColor的值为nil,这表示它将会运用父视图层次的颜色来进 ...

  8. python多任务的导包问题

    多线程的使用: import threading def func(x): print(x) t= threading.Thread(target=func,args=(12,)) # 线程启动 t. ...

  9. 阿里历年经典Java面试题汇总

    Volatile的特征: A.禁止指令重排(有例外) B.可见性 Volatile的内存语义: 当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存. 当读一个vol ...

  10. [QT][DEMO] QTableWidget 设置某一列禁止编辑

    例程 : 又是好风景 : http://blog.csdn.net/qiao_yihan/article/details/46413345 关键点: 1.QTableWidgetItem 的 setF ...