python - 无法在我的应用中登录
问题描述
在我的应用程序中无法登录。我在views.py中写道
from django.shortcuts import render,redirect
from django.urls import reverse
from app.forms import RegisterForm,LoginForm
from app.models import Data
from app.forms import DataForm
from django.db.models import Q
def index(request):
data = Data.objects.order_by('-created_at')
form = RegisterForm()
loginform = LoginForm()
dataform = DataForm()
return render(request, 'index.html',{'data':data,'form':form,'loginform':loginform,'dataform':dataform,'user': request.user})
在 index.html 中
<section id="top">
{% if user and not user.is_anonymous %}
<p>Hello</p>
<h3>{{ user.username }}</h3>
{% else %}
<form action="{% url 'app:index' %}" method="POST">
{{ loginform.non_field_errors }}
{% for field in loginform %}
{{ field }}
{{ field.errors }}
{% endfor %}
<button type="submit">LOGIN</button>
{% csrf_token %}
</form>
{% endif %}
</section>
在forms.py中
from django import forms
from django.contrib.auth.forms import (
AuthenticationForm
)
class LoginForm(AuthenticationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
field.widget.attrs['class'] = 'form-control'
field.widget.attrs['placeholder'] = field.label
在孩子的应用程序的 urls.py
from django.urls import include, path
from . import views
from django.contrib.auth.views import login
app_name = 'app'
urlpatterns = [
path('index', views.index,name='index'),
]
在父应用的 urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('app/',include('app.urls') ),
]
当我从loginform登录时,if语句{% if user and not user.is_anonymous %}
没有变为true。但是当我登录管理站点时,语句变为true。当我按下LOGIN按钮时,没有发生错误。我真的不明白出了什么问题。我应该如何解决这个问题?
解决方案
提交请求时,您的index
视图不会做任何事情。POST
它只是初始化空表单并返回它们。您需要实际处理提交的数据,验证用户并调用login
方法:
def index(request):
if request.method == 'POST':
loginform = LoginForm(request, data=request.POST)
if loginform.is_valid(): # this authenticates the user
user = loginform.get_user()
# redirect to success view or just render index.html
return render(request, 'index.html', {'user': user})
# else not needed, we go to the end and return the form with errors
else: # request method is 'GET'
loginform = LoginForm()
dataform = ...
...
return render(request, 'index.html',{'data':data,'form':form,'loginform':loginform,'dataform':dataform,'user': request.user})
推荐阅读
- clockify - TimeIntervalDto 对象中的持续时间数据类型
- python - 有没有办法使用 Compute Engine API + NodeJS 修改 Compute Engine 虚拟机中的文件
- mongodb - 当 mongodb 实例作为 SECONDARY 添加到副本集时,本地用户和角色会发生什么?
- javascript - 如何通过过滤其中一个属性来找到对象内部的对象?
- sql-server - 使用 OpenXML 分解 XML
- reactjs - gatsby-image 获取组件中未定义的道具
- indexeddb - 如何在 indexedDB 中引用多字段索引
- python - 如何在 Windows 上通过 Anaconda 安装 OpenCV?
- sql - Postgres 阻止了 AccessShareLock
- javascript - 执行 TestCafe 断言的正确方法是什么