我是Django认证系统的新手,无法找到正确的调试方法.

我想创建一个函数来处理登录请求,我已经完成了必要的步骤.

  1. 在主项目url中创建了登录url路径.py文件.

     path('members/', include('django.contrib.auth.urls')),
     path('members/', include('members.urls')),
    
  2. 在members应用程序中创建了登录url,以指向在视图中创建的函数.py

    urlpatterns = [
     path('login/', views.login_user, name='login'),]
    
  3. 定义了用户访问特定url时要执行的操作

    def login_user(request):
     if request.method == 'POST':
         print('-'*100)
         username = request.POST['username']
         password = request.POST['password']
         user = authenticate(request, username=username, password=password)
         if user is not None:
             login(request, user)
             messages.success(request, ("You are now logged in"))
             return redirect('index')
         else:
             messages.success(request, ("Invalid credentials"))
             return redirect('login')
     return render(request, 'registration/Login.html')
    
  4. 我在templates文件夹中创建了一个登录页面.

    {% extends 'Base.html'%}
    {% block title %}
         Login to the Blog Page
     {% endblock %}
    {% block content%}
    <h1>Members Login</h1>
    <div class="form-group">
    
     <form method="POST" action="">
         {% csrf_token %}
         <div class="mb-3">
             <label for="exampleInputEmail1" class="form-label">User Name</label>
             <input type="text" class="form-control" name = "username">
             <div id="emailHelp" class="form-text">We'll never share your email with 
    anyone else.</div>
           </div>
           <div class="mb-3">
             <label for="exampleInputPassword1" class="form-label">Password</label>
             <input type="password" class="form-control" name="password">
           </div>
         <button type="submit" class="btn btn-primary">Login</button>
      </form>
     <br>
     </div>
    {% endblock %}
    

现在,当我在提交用户详细信息后进入/members/login时,post方法中的print语句不会在控制台中打印.所以我怀疑post请求没有被重定向到login_用户功能.有人能帮我找出原因吗?

推荐答案

Djnago将启动它首先为路径members/login找到的视图,这是django.contrib.auth模块的登录视图.您可以交换视图顺序以访问视图的login视图:

urlpatterns = [
    path('members/', include('members.urls')),  # 🖘 `members.urls first
    path('members/', include('django.contrib.auth.urls'))
]

但最好给你的观点一条不同的道路,以避免任何混乱.

Django相关问答推荐

Django:添加第二个';详细';用于检索额外信息的视图

未强制执行枚举值

将两个视图重定向到具有不同 url id Django 的一个模板的正确方法

Django rest framework, AttributeError: 'str' object has no attribute 'data' 无法使用表单上传图片

如何在 django 中修改现有模型实例?

django 创建多种类型用户的最佳方法

多租户 Django 应用程序:根据请求更改数据库连接?

如何从 django 模板生成静态 html 文件?

如何从 json 模式创建表单?

如何在 django tests.py 中创建管理员用户

TestCase 类中的 setUpClass、setUpTestData 和 setUp 有什么区别?

用于测试文件下载的 Django 单元测试

Django 自定义管理器 - 如何仅返回登录用户创建的对象?

Django - 如何在其管理模块中访问模型的详细名称?

(fields.E300) 字段定义与模型的关系,该模型要么未安装,要么是抽象的

目前使用 Django Evolution,South是否更好,值得切换?

超过 1 个外键

Django manage.py:在其依赖之前应用迁移

Numpy 数组到 base64 并返回到 Numpy 数组 - Python

确保只有一个工作人员在运行多个工作人员的 pyramid 网络应用程序中启动 apscheduler 事件