Как прочитать или записать загруженный файл из модели 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')
Вернуться на верх