Django: 'TypeError: 'HttpResponseForbidden' object is not callable
Я создаю портал для вакансий. Я столкнулся с ошибкой в заголовке. Я попробовал все предложенные решения. Ошибка держит меня в заложниках последние 48 часов. При попытке войти в систему, администрировать, зарегистрироваться или зайти на любую страницу я получаю
.'TypeError: 'HttpResponseForbidden' object is not callable
.Здесь представлена модель, представления и шаблоны:
модель_1
#models
from django.db import models
from django.contrib.auth.models import User
from django.db.models.deletion import CASCADE
from PIL import Image
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pic')
def __str__(self):
return f'{self.user.username} Profile'
def save(self):
super().save()
img = Image.open(self.image.path)
if img.height > 300 and img.width > 300:
output_size=(300,300)
img.thumbnail(output_size)
img.save(self.image.path)
Виды_1
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth import authenticate
from django.http import request, HttpResponse
from django.contrib import messages
from .forms import *
from .models import *
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
# Create your views here.
def register(request):
if request.method == 'POST':
form = CompRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
return redirect('Login')
else:
form = CompRegisterForm()
return render(request, 'Users/register.html', {'form': form})
@login_required
def profile(request):
if request.method == 'POST':
u_form = CompUpdateForm(request.POST, instance=request.user)
p_form = ProfilePicForm(request.POST,
request.FILES,
instance=request.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(request, f'Your account has been updated!')
return redirect('Profile_Page')
else:
u_form = CompUpdateForm(instance=request.user)
p_form = ProfilePicForm(instance=request.user.profile)
context = {
'u_form': u_form,
'p_form': p_form
}
return render(request, 'Users/profile.html', context)
Шаблоны
{% extends "../Job/base.html"%}
{% load crispy_forms_tags %}
{% block content%}
{% load bootstrap %}
<div class="container">
<form method ="POST", enctype="multipart/form-data">
{%csrf_token%}
<fieldset>
<legend class="border-bottom mb-4">Login</legend>
{{form|bootstrap}}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="Submit">Login </button>
</div>
</form>
<div class="border-top pt-3">
<small class= "text-muted">
Need an account ? <a class= 'ml-2' href="{% url 'Register' %}"> Sign up </a>
</small>
<small>
Forgot Password ? <a class = 'ml-2' href="{% url 'password_reset'%}">Reset Password</a>
</small>
</div>
</div>
{% endblock content %}
Урлы
from typing import Pattern
from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
from django.conf import settings
from django.conf.urls.static import static
from Users import views as user_views
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('Job.urls')),
path('register/', user_views.register, name="Register"),
path('login/', auth_views.LoginView.as_view(template_name='Users/login.html'), name='Login'),
path('Logout/', auth_views.LogoutView.as_view(template_name='Users/index.html'), name='Logout'),
path('profile/', user_views.Profile, name="Profile_Page"),
path('Password-reset/', auth_views.PasswordResetView.as_view(
template_name='Users/password_reset.html'), name='password_reset'),
path('Password-reset/done/', auth_views.PasswordResetDoneView.as_view(
template_name='Users/password_reset_done.html'), name='password_reset_done'),
path('Password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(
template_name='Users/password_reset_confirm.html'), name='password_reset_confirm'),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
Ошибка
Traceback (most recent call last):
File "/home/tito/wira_Proj/wira_env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
TypeError: 'HttpResponseForbidden' object is not callable
[31/Aug/2021 06:59:12] "GET /profile/ HTTP/1.1" 500 58968
Internal Server Error: /favicon.ico
Traceback (most recent call last):
File "/home/tito/wira_Proj/wira_env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
TypeError: 'HttpResponseForbidden' object is not callable
Your assistance will be highly appreciated
в ваших представлениях попробуйте следующее
def profile(request):
if request.method == 'POST':
u_form = CompUpdateForm(request.POST, instance=request.user)
p_form = ProfilePicForm(request.POST,
request.FILES,
instance=request.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(request, f'Your account has been updated!')
return redirect('Profile_Page')
else:
u_form = CompUpdateForm()
p_form = ProfilePicForm()
context = {
'u_form': u_form,
'p_form': p_form
}
return render(request, 'Users/profile.html', context)
Наконец, я нашел решение: Проверьте следующее в вашем файле settings.py и удалите/удалите их
- CSRF_COOKIE_DOMAIN:Домен, который будет использоваться при установке CSRF cookie. Это может быть полезно для того, чтобы легко позволить исключить межподдоменные запросы из обычной защиты от подделки межсайтовых запросов. Он должен быть установлен в строку типа ".example.com", чтобы позволить POST-запросу от формы на одном поддомене быть принятым представлением, обслуживаемым с другого поддомена.
- CSRF_COOKIE_SECURE: При значении true cookie будет помечен как "безопасный", что означает, что браузеры могут гарантировать, что cookie будет отправлен только при HTTPS-соединении. И помните, что вы работаете на локальном хосте .
- django.views.csrf.csrf_failure