Как прочитать или записать загруженный файл из модели FileField в Django 3.0+?
Я новичок в python и программировании в целом. У меня есть проект по созданию простой библиотеки для добавления новых авторов и загрузки книг. Я также должен отображать детали загруженной книги (общее количество слов, наиболее распространенные слова, различные слова и т.д.), когда я открываю книгу. Теперь для этого я знаю, что сначала я должен открыть загруженную книгу в режиме чтения, но я не знаю, как получить доступ к файлу, который я загрузил.
Это мои модели:
from django.db import models
from authors.models import Author
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
book_name = models.CharField(max_length=50)
genre = models.CharField(max_length=50)
files = models.FileField(upload_to='books/files/')
def __str__(self):
return self.book_name()
Это мои формы:
from django import forms
from .models import Book
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ('book_name', 'author', 'genre', 'files')
Мои взгляды:
def create(request):
if request.method == 'POST':
form = BookForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('books:home')
elif request.method == 'GET':
form = BookForm()
return render(request, 'books/create.html', {
'form': form
})
def detail(request, pk):
book = get_object_or_404(Book, pk=pk)
return render(request, 'books/detail.html', context={'book': book})
My details.html:
{% extends 'base.html' %}
{% block title %} {{ book.book_name }} {% endblock %}
{% block content %}
<p>Book title: {{ book.book_name }}</p>
<p>Genre: {{ book.genre }}</p>
<p>Author:
<a href="{% url 'authors:detail' book.author.pk %}">{{ book.author.full_name }}</a>
</p>
<p><button type="button"><a href="{{ book.files.url }}" target="_blank">Shkarko</a></button></p>
{% endblock %}
Я хочу, чтобы он отображался в файле details.html.
Заранее спасибо!
Предполагаю, что если ваш файл является PDF, вы можете написать свой код таким образом, чтобы обеспечить читаемость. чтение файла довольно простое и вы можете обойтись этим примером !
from django.http import FileResponse
import os
def show_file(request):
filepath = os.path.join('static', 'sample.pdf')
return FileResponse(open(filepath, 'rb'), content_type='application/pdf')