zoukankan      html  css  js  c++  java
  • 上传文件

    前端HTML代码:  

    • 需要填入一个 form 标签,然后在这个 form 标签中指定 enctype="multipart/form-data" ,不然就不能上传文件。
    • 在 form 标签中添加一个 input 标签,然后指定标签的 name ,以及 type="file" 。

    后端代码:

    • 接收文件。然后存储文件。接收文件的方式跟接收 POST 的方式是一样的,只不过是通过 FILES 来实现。
    • 可以给存储文件的字段指定为 FileField ,可以传递一个 upload_to 参数,用来指定上传上来的文件保存到哪里。
    • 也可指定 MEDIA_ROOT ,就不需要指定 upload_to ,他会自动的将文件上传到 MEDIA_ROOT 的目录下。两个同时指定会将文件上传到 MEDIA_ROOT 下的 upload_to 文件夹中。

    settings.py文件中的目录及URL设置:

    1 # 添加在settings.py文件最后
    2 # root:上传的文件存储在‘media’目录下,有upload_to的为下级目录;
    3 # url:可通过‘/media/’链接访问,如:http://127.0.0.1/media/xxx.txt;
    4 
    5 MEDIA_ROOT = os.path.join(BASE_DIR,'media')
    6 MEDIA_URL = '/media/'

    urls.py文件:

    1 from django.urls import path
    2 from . import views
    3 from django.conf.urls.static import static
    4 from django.conf import settings
    5 
    6 app_name = 'front'
    7 urlpatterns = [
    8     path('',views.IndexView.as_view())
    9 ] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

    models.py文件:

     1 from django.db import models
     2 from django.core import validators
     3 
     4 class Article(models.Model):
     5     title = models.CharField(max_length=100)
     6     content = models.TextField()
     7     # 限制只能上传TXT格式的文件
     8     # upload_to:也可根据当前日期创建目录;
     9     # thumbnail = models.FileField(upload_to="%Y/%m/%d",validators=[validators.FileExtensionValidator(['txt'])])
    10     # 传图片格式
    11     thumbnail = models.ImageField(upload_to="%Y/%m/%d")

    forms.py文件:

     1 from django import forms
     2 from .models import Article
     3 
     4 class ArticleForm(forms.ModelForm):
     5     class Meta:
     6         model = Article
     7         fields = '__all__'
     8         error_messages = {
     9             # 'thumbnail':{
    10             #     'invalid_extension':'只能上传TXT格式的文件'
    11             # },
    12             'thumbnail':{
    13                 'invalid_image':'请输入正确格式的图片。'
    14             }
    15         }

    views.py文件:

     1 from django.shortcuts import render
     2 from django.http import HttpResponse
     3 from django.views.generic import View
     4 from .models import Article
     5 from .forms import ArticleForm
     6 
     7 
     8 class IndexView(View):
     9     def get(self,request):
    10         return render(request,'index.html')
    11 
    12     # 将上传的文件插入数据库中;
    13     # def post(self,request):
    14     #     title = request.POST.get('title')
    15     #     content = request.POST.get('content')
    16     #     file = request.FILES.get('file')
    17     #     Article.objects.create(title=title,content=content,file=file)
    18     #     return HttpResponse('success')
    19 
    20     # request.POST:验证title与content;
    21     # request.FILES:验证file;
    22     def post(self,request):
    23         form = ArticleForm(request.POST,request.FILES)
    24         if form.is_valid():
    25             form.save()
    26             return HttpResponse('success')
    27         else:
    28             print(form.errors.get_json_data())
    29             return HttpResponse('fail')

    index.html文件:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8 <form action="" method="post" enctype="multipart/form-data">
     9     <input type="text" name="title">
    10     <input type="text" name="content">
    11     <input type="file" name="thumbnail">
    12     <input type="submit" value="提交">
    13 </form>
    14 </body>
    15 </html>
  • 相关阅读:
    id设置为10000开始
    关于mysql显示1000条以上找不到的情况
    localhost进入首页css路径出错
    Unknown column 'a.root_id' in 'where clause'解决方法
    curd 里url传输汉字验证错误问题解决方法
    如何同时添加多条数据
    如何在已建好的表格中添加字段?
    sql一个表中两个字段合并求和
    三表联查,这是我目前写过的最长的sql语句,嗯嗯,果然遇到问题才能让我更快成长,更复杂的语句也有了一些心得了
    sql时间查询的问题
  • 原文地址:https://www.cnblogs.com/liqiongming/p/10674139.html
Copyright © 2011-2022 走看看