[英]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>
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.