繁体   English   中英

AttributeError: 'LoginForm' 对象没有属性 'get' 并且 response.get('X-Frame-Options') 不是 None

[英]AttributeError: 'LoginForm' object has no attribute 'get' and response.get('X-Frame-Options') is not None

无论我以何种方式实现表单,我都会收到以下错误。 当我转到表单的 URL 时会发生这种情况。 当我转到仪表板时,我需要先登录,然后显示错误,这是我的控制台服务器

    Internal Server Error: /login/
Traceback (most recent call last):
  File "D:\Monthly Deposite System\mds\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "D:\Monthly Deposite System\mds\env\lib\site-packages\django\utils\deprecation.py", line 96, in __call__
    response = self.process_response(request, response)
  File "D:\Monthly Deposite System\mds\env\lib\site-packages\django\middleware\clickjacking.py", line 26, in process_response
    if response.get('X-Frame-Options') is not None:
AttributeError: 'LoginForm' object has no attribute 'get'
[01/Mar/2020 00:17:54] "GET /login/?next=/dashboard/ HTTP/1.1" 500 65477
Internal Server Error: /login/
Traceback (most recent call last):
  File "D:\Monthly Deposite System\mds\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "D:\Monthly Deposite System\mds\env\lib\site-packages\django\utils\deprecation.py", line 96, in __call__
    response = self.process_response(request, response)
  File "D:\Monthly Deposite System\mds\env\lib\site-packages\django\middleware\clickjacking.py", line 26, in process_response
    if response.get('X-Frame-Options') is not None:
AttributeError: 'LoginForm' object has no attribute 'get'
[01/Mar/2020 00:17:55] "GET /login/?next=/dashboard/ HTTP/1.1" 500 64940

表格.py

class LoginForm(forms.Form):
username = forms.CharField(
    widget=forms.TextInput(
        attrs={
            "placeholder" : "Username",                
            "class"       : "form-control form-control-lg"
        }
    ))
password = forms.CharField(
    widget=forms.PasswordInput(
        attrs={
            "placeholder" : "Password",                
            "class"       : "form-control form-control-lg"
        }
    ))

def clean(self, *args, **kwargs):
    username = self.cleaned_data.get('username')
    password = self.cleaned_data.get('password')
    if username and password:
        user = authenticate(username=username, password=password)
        if not user:
            raise forms.ValidationError("You do not have permission to get this page!")
        if not user.check_password(password):
            raise forms.ValidationError("Incorrect Password!")
        if not user.is_active:
            raise forms.ValidationError("This user is not active!")
        return super(LoginForm, self).clean(*args, **kwargs)

视图.py

def login_view(request):
msg = None
next_page = request.GET.get('next')
if request.method == "POST":
    form = LoginForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get("password")
        user = authenticate(username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect(next_page)
        else:    
            msg = 'Invalid credentials'    
    else:
        msg = 'Error validating the form'    
else:
    form = LoginForm()
return render(request, "dashboard/accounts/login.html", {"form": form, "msg" : msg})

网址.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import include,url
from .core.urls import urlpatterns as core_urls
from .dashboard.urls import urlpatterns as dashboard_urls
from .authentication.urls import urlpatterns as authentication_urls
from .authentication.views import LoginForm
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r"^",include(core_urls)),
    path('login/', LoginForm),
    url(r"^dashboard/", include((dashboard_urls, "dashboard"), namespace="dashboard")),
]

仪表板/ urls.py

from django.conf.urls import include, url
from django.views.generic.base import TemplateView
from mds.dashboard import views as core_views
urlpatterns = [
    url(r"^$", core_views.index, name="index"),
]

仪表板/视图.py

from django.shortcuts import render
from django.template.response import TemplateResponse
from django.contrib.auth.decorators import login_required
from django.contrib.admin.views.decorators import (
    staff_member_required as _staff_member_required,
    user_passes_test,
)
@login_required(login_url="/login/")
def index(request):
    return TemplateResponse(request, "dashboard/index.html")

仪表板/帐户/login.html

{% extends "dashboard/layouts/base-site.html" %}

{% block title %} Login {% endblock %} 

<!-- Specific Page CSS goes HERE  -->
{% block stylesheets %}{% endblock stylesheets %}

{% block content %}

    <div class="main-content-container container-fluid px-4">
      <!-- Page Header -->
      <div class="page-header row no-gutters py-4">
        <div class="col-12 col-sm-4 text-center text-sm-left mb-0">
          <h3 class="page-title">Login</h3>
        </div>
      </div>
      <!-- End Page Header -->
      <!-- Default Light Table -->
      <div class="row">

        <div class="col-lg-8">
          <div class="card card-small mb-4">
            <div class="card-header border-bottom">
              <h6 class="m-0">

                {% if msg %}
                  {{ msg | safe }}
                {% else %}
                  Use default credentials: test / ApS12_ZZs8
                  <br />
                  OR <a href={% url 'register' %} >create your own user</a>
                {% endif %}  

              </h6>
            </div>
            <ul class="list-group list-group-flush">
              <li class="list-group-item p-3">
                <div class="row">
                  <div class="col">

                    <form role="form" method="post" action="" class="pt-3">

                      {% csrf_token %} 

                      <div class="form-row">
                        <div class="form-group col-md-6">
                          <label for="feFirstName">Username</label>
                          {{ form.username }}
                        </div>
                      </div>
                      <div class="form-row">
                        <div class="form-group col-md-6">
                          <label for="feEmailAddress">Password</label>
                          {{ form.password }}
                        </div>
                      </div>
                      <button type="submit" name="login" class="btn btn-accent">Login</button>
                       &nbsp; &nbsp; 
                       Don't have an account? <a href={% url 'register' %} class="text-primary">Register</a>
                    </form>

                  </div>
                </div>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </div>

{% endblock content %}
{% block javascripts %}{% endblock javascripts %}

提前致谢!

在您的urls.py您确实将表单称为视图:

from django.contrib import admin
from django.urls import path
from django.conf.urls import include,url
from .core.urls import urlpatterns as core_urls
from .dashboard.urls import urlpatterns as dashboard_urls
from .authentication.urls import urlpatterns as authentication_urls
from .authentication.views import LoginForm

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r"^",include(core_urls)),
    path('login/', LoginForm),
    url(r"^dashboard/", include((dashboard_urls, "dashboard"), namespace="dashboard")),
]

但是一个Form不能用作视图,需要参考login_view

from django.contrib import admin
from django.urls import path
from django.conf.urls import include,url
from .core.urls import urlpatterns as core_urls
from .dashboard.urls import urlpatterns as dashboard_urls
from .authentication.urls import urlpatterns as authentication_urls
from .authentication.views import login_view

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r"^",include(core_urls)),
    path('login/', login_view),
    url(r"^dashboard/", include((dashboard_urls, "dashboard"), namespace="dashboard")),
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM