Djangoは最もシンプルで公式の方法ファイルをアップロード

1.メディアパス構成

中には、settings.py次のコードを追加します。

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

2.データシートを定義します

import os

from django.db import models
from django.utils.timezone import now as timezone_now

def upload_to(instance, filename):
    now = timezone_now()
    base, ext = os.path.splitext(filename)
    ext = ext.lower()
    return f'quotes/{now:%Y/%m/%Y%m%d%H%M%S}{ext}'


class Quote(models.Model):
    class Meta:
        verbose_name = 'quote'
        verbose_name_plural = verbose_name

    author = models.CharField('author', max_length=200)
    quote = models.TextField('quote')
    picture = models.ImageField('picture', upload_to=upload_to, blank=True, null=True)

    def __str__(self):
        return self.quote

ここupload_to機能は自動的に同じ名前ではありません、ファイル名、日付型の名前を変更します。

3.フォームのフォームを追加します。

forms.pyファイル

from django import forms

from .models import Quote


class QuoteForm(forms.ModelForm):
    class Meta:
        model = Quote
        fields = '__all__'

ビューコードの4の調製

from django.shortcuts import render, redirect

from .forms import QuoteForm

def add_quote(request):
    form = QuoteForm()
    if request.method == 'POST':
        form = QuoteForm(
            data=request.POST,
            files=request.FILES
        )
        if form.is_valid():
            form.save()
            return redirect('quote:add_quote')
    else:
        return render(request, 'quotes/add_quote.html', {
            'form': form
        })

5.コードのHTMLテンプレートを書きます

<form action="{% url 'quote:add_quote' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">save</button>
</form>

6. URLマッピングを追加します。

アプリのカタログにurls.py追加します

from django.urls import path

from quotes.views import add_quote

app_name = 'quote'
urlpatterns = [
    path('add/', add_quote, name='add_quote')
]

プロジェクトディレクトリ内のurls.pyファイルを追加します。

from django.urls import path, include

urlpatterns = [
    path('quotes/', include('quotes.urls', namespace='quote'))
]

レンダリング

おすすめ

転載: www.cnblogs.com/PyKK2019/p/11119574.html