Как сделать файлы доступными для скачивания в Django - PullRequest
0 голосов
/ 08 мая 2018

Это моя модель

class UploadAssignment(models.Model):
    doc=models.FileField()
    assignment = models.ForeignKey(AssignAssignment, on_delete=models.CASCADE)
    student= models.ForeignKey(Student, on_delete=models.CASCADE)

Это мой вид для загрузки.

def upload_assignment(request,pk):
student = get_object_or_404(Student,user_id=request.user)
assign = get_object_or_404(AssignAssignment, pk=pk)
if request.method == 'POST':
    form = AssignmentUpload(request.POST, request.FILES)
    if form.is_valid():
        m=form.save(commit=False)
        m.student_id=student.user_id
        m.assignment_id=assign.pk
        print(m)
        m.save()
        messages.success(request, 'Assignment upload is successful')
        return redirect('home')
else:
    form = AssignmentUpload()
return render(request, 'accounts/students/uploadassignments.html', {
    'form': form
})

Я хотел бы написать для лектора функцию просмотра для загрузки этих файлов с первичным ключом назначения загрузки. У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 08 мая 2018

На основе похожих вопросов ( это и это ) и документы вы можете попробовать:

def download_file(request, pk):
    obj = get_object_or_404(UploadAssignment, pk=pk)

    response = HttpResponse(
        obj.doc,
        content_type='application/whatever-the-correct-type-is')
    response['Content-Disposition'] = 'attachment; filename="foo.xls"'
    return response

Типы содержимого и файлРасширения всегда сложная часть с файлами, отправленными пользователями, так как существует множество идей, которые могут пойти не так или быть направлениями атаки.Подробнее: django user-uploaded-content-security .

Вы также можете заглянуть в специальный FileResponse класс.

...