Django 认证系统修改

Django Authentication system modifications

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

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

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

     path('members/', include('django.contrib.auth.urls')),
     path('members/', include('members.urls')),
    
  2. 在会员应用程序中创建了一个登录 url 以指向在 views.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. 我在模板文件夹中创建了一个登录页面。

    {% 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 方法中的打印语句不会打印在控制台中。所以我怀疑 post 请求没有被重定向到 login_user 函数。谁能帮我找出原因?

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

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

但最好为您的视图提供不同的路径,以防止混淆。