0

抱歉,如果我做的不对,我是 Web 应用程序开发的新手,我一直在使用 Django 开发一个项目,我希望我能做到以下几点:

当用户单击一个按钮时,会生成一个 Ajax 请求(我使用的是纯 Javascript)。

    const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;

    // Create new request add token 
    const generateRequest = new XMLHttpRequest();
    generateRequest.open('POST', '/generate');
    generateRequest.setRequestHeader('X-CSRFToken', csrftoken);

    generateRequest.onload = () => {
        // Get url with the midi file, see below 
    };

    // Add the motif to send with the request
    const data = new FormData();
    data.append('motif', JSON.stringify(notes));

    // Send request

此请求将一些音符发送到生成旋律的服务器(Django)。

# Generate the melody based on the seed
@require_http_methods(["POST"])
def generate(request):

# See if method was post
if request.method == "POST":
    # Get the seed and other stuff...

    # Create a melody generator
    mg = MelodyGenerator()

    melody = mg.generate_melody(encoded_seed, ...)

    mg.save_melody(melody)

    # Return the melody 
    return JsonResponse({"melody": melody}, status=200)

服务器将旋律保存在我想成为临时文件的 midi 文件中

class MelodyGenerator:
# ... do some stuff

    def save_melody(...):
        path_dir = os.path.join(settings.MEDIA_ROOT, "temp_midis")
        file_path = os.path.join(path_dir, file_name)
        midi = stream.write(format, file_path)

所以用户可以收听midi(html模板):

<midi-player
   src = "url/path/to/temporaryfile"
   sound-font visualizer = "#myVisualizer">
</midi-player>
<midi-visualizer type = "staff" id = "myVisualizer"> </midi-visualizer>

我希望这个文件是临时的,这样它就不会占用空间,也就是说,用户可以收听旋律,可以选择下载它等等,但是当他们离开页面时,文件被删除并且因而不占用更多空间。

我怎么知道这个文件的 url,我想是临时的?

4

0 回答 0