Запрещено (CSRF-токен отсутствует или неверен.): /
Я хочу сделать форму модели для загрузки файла mp3. Я скопировал код с сайта, но вдруг он выдает ошибку. Вот сообщение об ошибке на сайте :
Запрещено (403) Проверка CSRF не удалась. Запрос прерван.
Help Причина отказа:
CSRF token missing or incorrect. In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been usedкорректно. Для POST-форм вам необходимо убедиться в том, что:
Ваш браузер принимает cookies. Функция view передает запрос в метод render шаблона. В шаблоне имеется {% csrf_token %} внутри каждой POST-формы, которая нацелена на внутренний URL. внутренний URL. Если вы не используете CsrfViewMiddleware, то вы должны использовать csrf_protect на всех представлениях, которые используют тег шаблона csrf_token, а также а также в тех, которые принимают данные POST. Форма имеет действительный CSRF токен. После входа в систему на другой вкладке браузера или нажатия кнопки назад после входа в систему, вам может потребоваться перезагрузить страницу с формой, поскольку после входа в систему маркер сменяется. Вы видите раздел справки раздел этой страницы, потому что у вас установлено DEBUG = True в вашем Django файл настроек. Измените это значение на False, и только начальное сообщение об ошибке будет отображаться только начальное сообщение об ошибке.
Вы можете настроить эту страницу, используя параметр CSRF_FAILURE_VIEW.
и на моем терминале появляется сообщение об ошибке :
[12/May/2022 14:19:43] "GET / HTTP/1.1" 200 8824 Forbidden (CSRF token отсутствует или неверен): / [12/May/2022 14:19:46] "POST / HTTP/1.1" 403 2513
пожалуйста, помогите мне исправить это. я дам свой код :
views.py:
from django.shortcuts import render, redirect
from django.views.decorators.csrf import ensure_csrf_cookie
from .forms import AudioForm
from .models import Audio_store
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')
def upload(request):
if request.method == "POST":
form = AudioForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect("main:upload")
form = AudioForm()
audio = Audio_store.objects.all()
return render(request=request, template_name="homepage.html", context={'form':form, 'audio':audio})
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
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^decode/$', views.decode),
url(r'^$', views.homepage),
path('audio', views.Audio_store),
]
urlpatterns += staticfiles_urlpatterns()
models.py:
from django.db import models
class Audio_store(models.Model):
record=models.FileField(upload_to='media/mp3')
forms.py:
from django import forms
from .models import Audio_store
class AudioForm(forms.ModelForm):
class Meta:
model = Audio_store
fields=['record']
добавить settings.py:
INSTALLED_APPS = [
'MusicLockApp',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'crispy_forms',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'assets'),
)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
что я хочу = когда я нажимаю кнопку вставить аудио файл, мы можем выбрать файл из локальной папки и когда нажимаю кнопку скрыть его, он будет загружать его в локальную папку.
В вашем шаблоне внутри тега {% csrf_token %} стоит символ " ^ ". На данный момент ваш тег csrf выглядит следующим образом:
{% csrf_token %^}
Попробуйте удалить " ^ " и это будет выглядеть так:
{% csrf_token %}
Протестируйте его снова, чтобы проверить, будет ли он работать.