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
Подробнее от django Crosssite Forgery
Вернуться на верх