You need to enable JavaScript to run this app. Django开发中点击登录按钮无法触发user_login视图执行的求助
优惠活动
大模型
产品
解决方案
定价
更多

Django开发中点击登录按钮无法触发user_login视图执行的求助

导致登录按钮点击后无法触发user_login的核心原因
  • 未在路由配置中注册user_login视图:当前urls.py的urlpatterns列表仅注册了首页index的路由,Django无法根据请求路径匹配到user_login视图,请求自然无法触达对应函数。
  • 表单action属性写法完全错误:模板中action={{ views.user_login }}的写法不符合Django模板语法,模板引擎无法将视图对象直接解析为可访问的URL路径,最终渲染出来的action值是无效字符串,浏览器提交表单时无法发送到正确的服务端地址。
  • 配套逻辑缺失:user_login视图函数没有编写合法的响应返回逻辑,就算后续请求能正常到达视图,Django也会因为收到无效的视图返回值抛出报错;同时首页视图没有向模板传递form对象,模板中的{{ form.as_p }}属于无意义的冗余代码,不会起到实际作用。
分步修正方案
  1. 补全urls.py的路由配置,将user_login视图注册到路由表中:
    from django.urls import path
    from iol_dash import views
    
    urlpatterns = [
        path('', views.index, name='index'),
        # 新增user_login对应的路由,设置路由name方便模板反向解析
        path('login/', views.user_login, name='user_login')
    ]
    
  2. 修正index.html中表单的action属性,使用Django内置的url模板标签反向解析路由地址,替换原来的错误写法:
    <!-- 错误写法:action={{ views.user_login }} -->
    <form class="modal-content animate" method="post" action="{% url 'user_login' %}">
        {% csrf_token %}
        <!-- 删除无效的{{ form.as_p }},因为index视图没有传form对象到模板上下文 -->
        <div class="imgcontainer">
          <span onclick="document.getElementById('id01').style.display='none'" class="close" title="Close Modal">&times;</span>
        </div>
        <div class="container">
          <label for="username"><b>Username</b></label>
          <input type="text" placeholder="Enter Username" name="username" required>
          <label for="password"><b>Password</b></label>
          <input type="password" placeholder="Enter Password" name="password" required>
          <button type="submit">Login</button>
        </div>
    </form>
    
  3. 补全user_login视图的响应逻辑,添加必要的导入和返回值,避免请求到达后抛出视图无返回的错误:
    from django.shortcuts import render, redirect
    from iol import Service
    
    def index(request):
        return render(request, 'index.html', {})
    
    def user_login(request):
        # 仅处理POST提交的登录请求
        if request.method == "POST":
            username = request.POST.get('username')
            password = request.POST.get('password')
            service = Service()
            token = service.get_token(
                username=username,
                password=password
            )
            print(token)
            # 登录处理完成后重定向回首页,保证视图返回合法响应
            return redirect('index')
        # 如果是GET方式访问登录地址,直接重定向回首页
        return redirect('index')
    

修正完成后,点击登录按钮时浏览器会将POST请求发送到/login/路径,Django会匹配到对应路由,正常执行user_login函数的逻辑。

内容的提问来源于stack exchange,提问作者Martin Facts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 18:45:08