首页 > 解决方案 > 无法在我的应用中登录

问题描述

在我的应用程序中无法登录。我在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按钮时,没有发生错误。我真的不明白出了什么问题。我应该如何解决这个问题?

标签: pythondjango

解决方案


提交请求时,您的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})

推荐阅读