Запрещено (CSRF-токен отсутствует или неверен.): /audio
У меня есть сайт с кнопкой для загрузки аудио mp3 на пост. проблема, когда я нажимаю на кнопку, она открывает новый / (http://localhost:8000/audio) на самом деле просто http://localhost:8000. и когда я вижу terimal, есть сообщение об ошибке
Запрещено (CSRF-токен отсутствует или неверен.): /audio
в то же время на моем сайте возникает ошибка с сообщением об ошибке
Запрещено (403) Проверка CSRF не удалась. Запрос прерван.
Help Причина отказа:
CSRF-токен отсутствует или неверен. В общем, это может произойти, когда существует настоящая подделка межсайтовых запросов, или когда механизм CSRF в Django был использован неправильно. правильно. Для POST форм вам необходимо убедиться в том, что:
Ваш браузер принимает cookies. Функция view передает запрос в метод render шаблона. В шаблоне есть {% csrf_token %} внутри каждой POST-формы, которая нацелена на внутренний URL. внутренний URL. Если вы не используете CsrfViewMiddleware, то вы должны использовать csrf_protect для всех представлений, которые используют тег шаблона csrf_token, а также а также в тех, которые принимают данные POST. Форма имеет действительный CSRF токен. После входа в систему на другой вкладке браузера или нажатия кнопки назад после входа в систему, вам может потребоваться перезагрузить страницу с формой, поскольку после входа в систему маркер сменяется. Вы видите раздел справки раздел этой страницы, потому что у вас установлено DEBUG = True в вашем Django файл настроек. Измените это значение на False, и только начальное сообщение об ошибке будет отображаться только начальное сообщение об ошибке.
Вы можете настроить эту страницу, используя параметр CSRF_FAILURE_VIEW.
я хочу, чтобы я мог загрузить файл песни mp3 с помощью django без базы данных (только локально). и песня может быть определена информацией, такой как исполнитель, продолжительность, жанр, и т.д.
и вот мой код:
urls.py
from django.contrib import admin
from django.conf.urls import url
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.urls import path, re_path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^decode/$', views.decode),
url(r'^$', views.homepage),
path('audio', views.Audio_store),
]
urlpatterns += staticfiles_urlpatterns()
views.py:
from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators.csrf import ensure_csrf_cookie
from subprocess import call
from django.core.files import File
from django.views.decorators.csrf import csrf_exempt
import subprocess
from MusicLockApp.forms import AudioForm
@ensure_csrf_cookie
def homepage(request):
# return HttpResponse('homepage')
return render(request, 'homepage.html')
def decode(request):
# return HttpResponse('about')
return render(request, 'decode.html')
#@csrf_exempt
def obfuscate(request):
print("HI")
if request.method == 'GET':
return HttpResponse("Hi")
if request.method == 'POST':
print("files: " + str(request.FILES))
print("posts: " + str(request.POST))
if len(request.POST) > 0:
handle_uploaded_file(request.FILES['audio_file'])
return HttpResponse("The form was valid!")
def handle_uploaded_file(f):
with open('temp.mp3', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
subprocess.check_call("ffmpeg -y -i temp.mp3 temp.wav", shell=True)
def Audio_store(request):
if request.method == 'POST':
form = AudioForm(request.POST, request.FILES or None)
if form.is_valid():
form.save()
return HttpResponse('SUKSES BRUH')
else:
form = AudioForm()
return render(request, 'homepage.html', {'form' : form})
models.py:
from django import forms
from django.db import models
class Audio_store(models.Model):
record=models.FileField(upload_to='media/mp3')
class Meta:
db_table='Audio_store'
forms.py:
from django import forms
from MusicLockApp.models import *
class AudioForm(forms.ModelForm):
class Meta:
model=Audio_store
fields=['record']
добавьте settings.py:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'assets'),
)
MEDIA_URL = '/mp3/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'mp3')
сценарий домашней страницы.html:
<script>
var file = undefined;
var audio_formats = ["mp3"];
// using jQuery
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function fileAdded() {
var x = document.getElementById("audio-file");
file = x.files[0];
var msg = document.getElementById("message");
if (file != undefined) {
x = file.name.split(".");
var ext = x[x.length - 1];
if (audio_formats.indexOf(ext) == -1) {
msg.innerHTML = ext + " is not an audio file!";
} else {
msg.innerHTML = file.name + " has been successfully added!";
}
} else {
msg.innerHTML = "Please select an audio file to obfuscate!";
}
}
function obfuscate() {
if (file == undefined)
alert("Choose an audio file!");
else {
var obfuscateButton = document.getElementById("obfuscate-button");
obfuscateButton.innerHTML = "Proccessing...";
var xhr = new XMLHttpRequest();
var url = "http://127.0.0.1:8000/obfuscator/obfuscate/";
var method = 'POST';
xhr.onreadystatechange = function() {
if(xhr.readyState === 4 && xhr.status === 200) {
obfuscateButton.innerHTML = "Done!"
}
}
xhr.open(method, url, true);
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
var formData = new FormData();
formData.append("audio_file", file);
formData.append("file_name", file.name)
xhr.send(formData);
}
}
</script>
.dsnupload {
background-color: #fbc786;
color: white;
text-align: center;
font-weight: bold;
padding: 20px;
}
.dsnupload:hover {
background-color: #c88f5c;
color: white;
font-weight: bold;
text-align: center;
}
<div class="row" style="margin-right: 10px;">
<form action="audio" method="post" enctype="multipart/form-data">
{% csrf_token %^}
{{ form }}
<button type="submit" class="dsnupload" id="audio-file" onchange="fileAdded()">
<i class="large material-icons" style="font-size: 50pt; margin-top: 10px;">audiotrack</i>
<p style="font-weight: bold; color: white;">Insert file audio (mp3)</p>
</button>
<p id="message"></p>
</form>
</div>