Прежде всего, я бы посоветовал вам использовать пространства имен в ваших URL-адресах, чтобы не возникало конфликтов с именами в ваших URL-адресах. Так что добавьте app_name
в urls.py ваших приложений, например,
#user urls.py
app_name='user'
urlpatterns = [
...
Тогда что-то вроде {% url 'user:register' %}
будет указывать для регистрации представления вашего пользовательского приложения, {% url 'manager:register' %}
будет указывать на представление реестра для ваше приложение менеджера и т. д.
Если вы определили отдельные представления входа в систему для каждого приложения, то же самое относится и к этим представлениям, при условии, что вы импортировали правильные представления в свои приложения urls.py.
Поскольку вы также включаете django .contrib.auth.urls в каждое из ваших приложений, конечно, есть второй путь 'login /', идущий от пути по умолчанию в auth.urls. Тем не менее, насколько я знаю, разрешение URL-адресов выполняется сверху вниз django, поэтому, если вы сохраните порядок URL-адресов, как в вашем сообщении, ваш пользовательский логин / имя будет первым и использован. Так что нет проблем с этим.
Где я вижу проблему с вашими шаблонами. Если я правильно понимаю, все они находятся в папке templates/register/
в ваших приложениях. Загрузчик шаблонов django не различает шаблон register.html
в вашем пользовательском приложении и шаблон register.html
в вашем приложении-менеджере. Так что, скорее всего, вы не получите правильный шаблон. Я бы предложил переместить шаблоны в подпапку с указанием c приложения, например, /templates/user/register
. Затем вы можете получить правильные шаблоны в ваших представлениях (например, 'user / register. html').
Я понимаю, что у вас есть отдельные приложения, определяющие c просмотров. Конечно, вы всегда можете создать подклассы представлений django и адаптировать их к вашим потребностям. Например, переопределив метод form_valid()
для LoginView
. В этом посте SO приведен пример.
Если, с другой стороны, вы хотите использовать django представление входа по умолчанию только с пользовательским шаблоном, вы можете передать шаблон в качестве kwarg вашему Посмотреть. Например:
# user urls.py
from django.urls import path
from django.contrib.auth.views import LoginView
app_name='user'
urlpatterns = [
path('login/', LoginView.as_view(template_name='user/login.html'), name='login'),
# more patterns
]
Если вы хотите перенаправить на какой-либо пользовательский сайт после успешного входа в систему, вы можете добавить в форму входа вход «next», содержащий URL-адрес, куда перенаправлять, например,
<!-- user/login.html -->
<form action="{% url 'user:login' %}" method="POST">
{% csrf_token %}
{{ form }}
<input type="hidden" name="next" value="/user/index/">
<button type="submit">Login</button>
</form>
В ваших приложениях вы, вероятно, будете использовать декоратор user_passes_test или что-то подобное, чтобы проверить, разрешен ли пользователю доступ к представлению в этом приложении.