Модификации системы аутентификации Django
Я новичок в системе аутентификации Django и не могу найти правильный метод отладки.
Я хочу создать функцию для обработки запросов на вход в систему, и я сделал необходимые шаги для этого.
created a login url path in main project URLS.py file.
path('members/', include('django.contrib.auth.urls')), path('members/', include('members.urls')),created a login url in members app to point to a function created in views.py
urlpatterns = [ path('login/', views.login_user, name='login'),]defined what to do when user comes to specific 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')I have created a Login Page in templates folder.
{% 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 после отправки данных пользователя, утверждение print в методе 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'))
]
Но, возможно, лучше дать вашему представлению другой путь, чтобы избежать путаницы.