Djangoはどうやってファイルのアップロードを実現しますか?
1.はじめに
皆さん、こんにちは。
ファイルのアップロード、ダウンロードは基礎機能として、Webプロジェクトの中でとても普遍的で、Djangoプロジェクトはどのようにファイルアップロードのダウンロードを実現しますか?
この文章はみんなを連れて5分でファイルアップロードのダウンロード機能を実現します。
2.実戦してください
詳細な実装手順は以下の通りです(9ステップ)
2-1 仮想環境に入り、プロジェクトとアプリを作成します。
index Appでtemplatesフォルダを作成し、プロジェクトプロファイルsettings.pyにAppとテンプレートディレクトリを設定します。
デフォルトのsqliteを例にとって、index Appの下のmodels.pyで代表ファイルのモデルをカスタマイズします。
モデルは3つのフィールドを含みます。ファイル名 ファイル保存経路 アップロード時間
indexアプリでフォームファイルforms.pyを作成します。
フォームクラスを内部でカスタマイズし、次の forms.Form
アップロード、ダウンロード機能のためにルートURLを追加します。
index Appのテンプレートフォルダに簡単なテンプレートファイルを作成します。 upload.
そのうち formは、ビュー関数を表すフォームエンティティオブジェクト を表しています。 form.as_pは、フィールド形式ですべてのフォーム要素をレンダリングする を表しています。
index Appのviews.pyでアップロード機能を作成するビュー関数
注意したいのは、プロジェクトのルートディレクトリにアップロードされたファイルを保存するためのアップロードフォルダを作成する必要があります。
次に、ダウンロード機能を作成するためのビュー関数
プロジェクトを実行し、下記のアドレスにアクセスし、ファイルをアップロードします。
Pycharmを使ってsqliteデータベースを開けたら、ファイルレコードの挿入に成功し、ファイルもupladフォルダの下にアップロードされました。
次に下記のアドレスにアクセスしてファイルダウンロード機能を実現します。IDはファイルのID値を表します。」
http://127.0.0.1:8000/download/file_id。
3.最後に
文章は簡単な例を通して、ファイルのアップロード、ダウンロード機能を実現し、ファイルをデータベースに記録します。
実際のプロジェクトには、ファイルリスト、ファイル削除などの機能が含まれていますが、これらの機能はデータベースと組み合わせて削除して変更すれば大丈夫です。
コードアドレス:https://github.com/xingag/python_web
以上はDjangoがどのようにファイルアップロードのダウンロードの詳細を実現しますか?
皆さん、こんにちは。
ファイルのアップロード、ダウンロードは基礎機能として、Webプロジェクトの中でとても普遍的で、Djangoプロジェクトはどのようにファイルアップロードのダウンロードを実現しますか?
この文章はみんなを連れて5分でファイルアップロードのダウンロード機能を実現します。
2.実戦してください
詳細な実装手順は以下の通りです(9ステップ)
2-1 仮想環境に入り、プロジェクトとアプリを作成します。
workon django3
#
django-admin startproject file_up_and_down_demo
#
cd file_up_and_down_demo/
# App
django-admin startapp index
2-2 テンプレートディレクトリを作成し、settings.pyを設定します。index Appでtemplatesフォルダを作成し、プロジェクトプロファイルsettings.pyにAppとテンプレートディレクトリを設定します。
# settings.py
# App
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'index',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
#
os.path.join(BASE_DIR, 'index/templates')
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
2-3 ファイルモデルを作成し、データベースにマップします。デフォルトのsqliteを例にとって、index Appの下のmodels.pyで代表ファイルのモデルをカスタマイズします。
モデルは3つのフィールドを含みます。
# index App models.py
from django.db import models
from django.utils import timezone
#
class FileModel(models.Model):
#
name = models.CharField(max_length=50)
#
path = models.CharField(max_length=100)
#
upload_time = models.DateTimeField(default=timezone.now)
次に、プロジェクトのルートディレクトリで次の2つのコマンドを実行して、モデル構造をデータベースにマッピングします。
#
Python3 manage.py makemigrations
python3 manage.py migrate
2-4 フォームのコントロールをカスタマイズindexアプリでフォームファイルforms.pyを作成します。
フォームクラスを内部でカスタマイズし、次の forms.Form
# index App forms.py
from django import forms
class FileForm(forms.Form):
file = forms.FileField(
#
widget=forms.ClearableFileInput(attrs={'multiple': True}),
label=' ',
)
2-5 アップロード、ダウンロードルートのURLを追加します。アップロード、ダウンロード機能のためにルートURLを追加します。
# urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('index.urls'))
]
# index App urls.py
from django.urls import path
from .views import *
urlpatterns = [
#
path('', index_view, name='index'),
#
path('download/<id>', download_view, name='download')
]
2-6 テンプレートファイルを作成index Appのテンプレートフォルダに簡単なテンプレートファイルを作成します。 upload.
そのうち
# index App upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> - </title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value=" ">
</form>
</body>
</html>
2-7 ビュー関数をアップロードindex Appのviews.pyでアップロード機能を作成するビュー関数
注意したいのは、プロジェクトのルートディレクトリにアップロードされたファイルを保存するためのアップロードフォルダを作成する必要があります。
# index App views.py
def index_view(request):
"""
:param request:
:return:
"""
if request.method == 'POST':
form = FileForm(request.POST, request.FILES)
if form.is_valid():
#
files = request.FILES.getlist('file')
#
for file in files:
#
file_model = FileModel(name=file.name, path=os.path.join('./upload', file.name))
file_model.save()
#
destination = open(os.path.join("./upload", file.name), 'wb+')
for chunk in file.chunks():
destination.write(chunk)
destination.close()
#
return HttpResponse(' !')
else:
form = FileForm()
return render(request, 'upload.html', locals())
2-8 ビュー関数をダウンロード次に、ダウンロード機能を作成するためのビュー関数
# index App views.py
def download_view(request, id):
"""
:param request:
:param id: id
:return:
"""
file_result = FileModel.objects.filter(id=id)
# ,
if file_result:
file = list(file_result)[0]
#
name = file.name
path = file.path
#
file = open(path, 'rb')
response = FileResponse(file)
# urlquote
response['Content-Disposition'] = 'attachment;filename="%s"' % urlquote(name)
return response
else:
return HttpResponse(' !')
2-9 実行とテストプロジェクトを実行し、下記のアドレスにアクセスし、ファイルをアップロードします。
Pycharmを使ってsqliteデータベースを開けたら、ファイルレコードの挿入に成功し、ファイルもupladフォルダの下にアップロードされました。
次に下記のアドレスにアクセスしてファイルダウンロード機能を実現します。IDはファイルのID値を表します。」
http://127.0.0.1:8000/download/file_id。
3.最後に
文章は簡単な例を通して、ファイルのアップロード、ダウンロード機能を実現し、ファイルをデータベースに記録します。
実際のプロジェクトには、ファイルリスト、ファイル削除などの機能が含まれていますが、これらの機能はデータベースと組み合わせて削除して変更すれば大丈夫です。
コードアドレス:https://github.com/xingag/python_web
以上はDjangoがどのようにファイルアップロードのダウンロードの詳細を実現しますか?