ファイルのアップロードとダウンロードを学ぶ16.Django

その6つのステップをアップロード!

まず、

設定のコンフィギュレーションファイルがあります

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace('\\', '/')#media即为图片上传的根路径

II。

URLルーティングの設定

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index,name='index'),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #如果单纯的是上传,文件并不用来显示或者读取,就不用加这个

III。

models.pyファイルが書き込まれます

class Book(models.Model):

    name = models.CharField(max_length=32)
    date1 = models.DateTimeField(auto_now=True,null=True)
    date2 = models.DateTimeField(auto_now_add=True,null=True)
    img = models.ImageField(upload_to='img',null=True) #写上upload_to,后面指定一个路径,那么将来上传的文件会直接生成到配置文件中的那个medias文件夹中的img文件夹中,不需要我们自己写读取文件内容写入本地文件的操作,django内部帮我们自动处理了

IV。

ビューは、文言で機能を表示し、写真をアップロードします。

def index(request):

    if request.method == 'POST':
        print(request.POST)
        username = request.POST.get('username')
        print('files',request.FILES)
        file_obj = request.FILES.get('file')
        models.Book.objects.create(
            name=username,
            img=file_obj,
        )  #自动就会将文件上传到我们配置的img文件夹中
        return render(request,'index.html')

第五に、

唯一のデータベースファイルそのフィールドに格納されているパスを更新しますが、以前にアップロードしたファイルは自動的に削除されていない、我々は削除またはカバーされる必要があるため、書き込みロジックの前に、自分の障害をアップロードする必要があることを更新しましたアップロードしたファイル(ノートファイル。そこには、ファイル名が同じでアップロードされている場合、ファイル名がアップロードを競合するため、データベースのファイル名で、この分野での背後にあるパスは、8頭のランダム悪いのランダムな文字列から表示されますでしょう、あなたは、ファイル名の外観を変更、この競合を解決するジャンゴ。)

obj = models.Book.objects.get(name='chao2')
obj.img=file_obj
obj.save()

#下面的update方法是不能更新正确更新保存的文件路径的,除非我们自己手动拼接文件路径,然后img=路径来进行update更新
models.Book.objects.filter(name='chao2').update(img=file_obj)

VI。

すでにアップロードされたファイルを表示します(私たちは、設定ファイル内の上記の設定の助けとURLの設定が必要になります)

views.pyビュー機能文言:

def index(request):
        objs = models.Book.objects.all()
        return render(request,'index.html',{'objs':objs})

書面でのindex.htmlファイル:

<div>
    {% for obj in objs %}
        <img src="/media/{{ obj.img }}" alt="">
    {% endfor %}

</div>
<div>
    {% for obj in objs %}
        <img src="/media/{{ obj.img }}" alt="">
        <!--<img src="/media/{{ obj.img.name }}" alt="">-->
    {% endfor %}

</div>

ダウンロード

実際のプロジェクトでは、多くの場合、あなたは、nginxのように、ここではジャンゴでダウンロードしたファイルを導入し、ダウンロードするために使用することができるように、あなたは自分のWebサーバリソースを構築するためにサービスを利用することができ、もちろんガイドエクセル、PDFファイルやダウンロードなどのダウンロード機能を使用する必要があります。

ここでは、シンプルなDjangoは、高度なファイルのダウンロード方法の数を完了するために、第三の方法を使用してファイルをダウンロードして、書き込みの3種類をご紹介します

index.htmlには、以下の

<div>
    <a href="{% url 'download' %}">文件下载</a>
</div>

次のようにurls.py文書が読み取ります。

urlpatterns = [

    url(r'^index/', views.index,name='index'),
    url(r'^download/', views.download,name='download'),

]

ビュービュー機能は、次の3つの方法でについて書かれています:

モード1:

from django.shortcuts import HttpResponse
def download(request):
  file = open('crm/models.py', 'rb') #打开指定的文件
  response = HttpResponse(file)   #将文件句柄给HttpResponse对象
  response['Content-Type'] = 'application/octet-stream' #设置头信息,告诉浏览器这是个文件
  response['Content-Disposition'] = 'attachment;filename="models.py"' #这是文件的简单描述,注意写法就是这个固定的写法
  return response

  注:HttpResponseに直接イテレータオブジェクト、コンテンツストレージ市のStringイテレータオブジェクトを使用して、メモリを解放しながら、クライアントに返します。大きなファイルには、これは非常に時間のかかるプロセスとメモリであることがわかりますとき。そしてStreamingHttpResponseコンテンツファイルストリーミングされ、データ量は、このメソッドを使用することができます

オプション2:

from django.http import StreamingHttpResponse #
def download(request):
  file=open('crm/models.py','rb')
  response =StreamingHttpResponse(file)
  response['Content-Type']='application/octet-stream'
  response['Content-Disposition']='attachment;filename="models.py"'
  return response

モード3:

from django.http import FileResponse
def download(request):
  file=open('crm/models.py','rb')
  response =FileResponse(file)
  response['Content-Type']='application/octet-stream'
  response['Content-Disposition']='attachment;filename="models.py"'
  return response

三種類

ジャンゴ公式サイトでHTTPレスポンスオブジェクトの3種類の入り口を導入してい:. Https://docs.djangoproject.com/en/1.11/ref/request-response/

FileResponseは、ソースから、推奨FileResponse BE StreamingHttpResponseサブクラスイテレータの内部データをストリーミング見ることができます。

おすすめ

転載: www.cnblogs.com/changxin7/p/12026953.html