You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django开发用户认证页面登录报错:'module' object is not callable

Django登录功能TypeError问题解决

问题背景

首次使用Django开发用户认证页面,注册功能正常,但点击登录按钮时触发TypeError错误,应用名为authentication。

报错信息

file "C:\Users\ab\project\authentication\views.py", line 49, in signin
    user = authentication (request,username=username,password=pass1)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'module' object is not callable

相关代码

views.py

from django.shortcuts import redirect, render
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib import messages
from django.contrib.auth import login, logout
import authentication


def home(request):
    return render(request, "authentication/index.html")


def signup(request):

   if request.method == "POST":
       username = request.POST['username']
       fname = request.POST.get('fname')
       lname = request.POST.get('lname')
       email = request.POST['email']
       pass1 = request.POST['pass1']     
       pass2 = request.POST['pass2']  
       myuser = User.objects.create_user(username,email,pass1)   
       myuser.first_name = fname or ''
       myuser.last_name = lname or ''
   
       myuser.save()

       messages.success(request, "Your account has been successfully created.")

       return redirect('signin')

   return render(request, "authentication/signup.html")

def signin(request):

    if request.method == "POST":
        username = request.POST['username']
        pass1 = request.POST['pass1']

        user = authentication (request,username=username,password=pass1)

        if user is not None:
            login(request,user)
            fname = user.first_name
            return render(request,"authentication/index.html", {'fname':fname})

        else:
            messages.error(request,"Bad credentials!")
            return redirect('home')

    return render(request, "authentication/signin.html")

def signout(request):
    logout(request)
    messages.success(request, "logged out successfully!")
    return redirect('home')

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('signup/', views.signup, name='signup'),   
    path('signin/', views.signin, name='signin'),
    path('signout/', views.signout, name='signout'),
]

templates/signin.html

<!DOCTYPE html>
<html>
    
    <body>
        <h3>SignIn</h3>
        
        {% for message in messages %}
        <div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
        <strong>Message:</strong> {{ message }}
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
        </button>
        </div>
        {% endfor %}
        <form method="POST" action="{% url 'signin' %}">
            {% csrf_token %}    
            
            <label for="">Username</label>
            <input type="text" id="username" name="username" placeholder="Enter your username" Required>
            <br>

            <label for="">Password</label>
            <input type="password" id="pass1" name="pass1" placeholder="Enter your password" Required>
            <br>
 
            <button type="submit">Sign In</button> 
        </form>
    </body>
</html>

问题原因及解决方案

核心问题

代码错误导入了自身的authentication应用模块,还试图把模块当作函数调用,才触发了'module' object is not callable错误。Django官方提供的用户认证函数是authenticate,并非自定义的应用模块。

修改步骤

  1. 修正导入语句:把views.py中的import authentication替换为from django.contrib.auth import authenticate。
  2. 修正认证函数调用:把signin函数里的user = authentication(request, username=username, password=pass1)改成user = authenticate(request, username=username, password=pass1)。

修改后的views.py关键代码片段

from django.shortcuts import redirect, render
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib import messages
from django.contrib.auth import login, logout, authenticate  # 新增authenticate导入

# ... 其他函数保持不变

def signin(request):
    if request.method == "POST":
        username = request.POST['username']
        pass1 = request.POST['pass1']

        user = authenticate(request, username=username, password=pass1)  # 修正函数调用

        if user is not None:
            login(request, user)
            fname = user.first_name
            return render(request, "authentication/index.html", {'fname': fname})
        else:
            messages.error(request, "Bad credentials!")
            return redirect('home')
    return render(request, "authentication/signin.html")

验证

修改完成后重启Django服务,点击登录按钮即可正常验证用户凭证,完成登录流程。

内容的提问来源于stack exchange,提问作者Arti Bichkunde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:24:57