Я пытаюсь написать функцию в своем промежуточном программном обеспечении, поэтому, когда пользователь не вошел в систему, он все равно может зарегистрироваться на сайте. Однако с этим кодом «регистрация» по-прежнему перенаправляет меня на учетные записи/логин. Если бы вы могли помочь.
URL.py:
from . import views
from django.contrib.auth.views import (
LoginView, LogoutView, PasswordResetView, PasswordResetDoneView,
PasswordResetConfirmView, PasswordResetCompleteView)
from django.urls import path
urlpatterns = [
path('', views.home, name="home"),
path('explore/', views.explore, name='explore'),
path('login/',LoginView.as_view(template_name='accounts/login.html'), name='login'),
path('logout/', LogoutView.as_view(template_name='accounts/logout.html'), name='logout'),
path('register/', views.register, name='register'),
path('profile/', views.view_profile, name='profile'),
path('profile/edit/', views.edit_profile, name='profile-edit'),
path('change-password/', views.change_password, name='change-password'),
path('reset-password/', PasswordResetView.as_view(), name='reset-password'),
path('reset-password/done/', PasswordResetDoneView.as_view(), name='password_reset_done'),
path('reset-password/confirm/<uidb64>/<token>/',
PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('reset-password/complete/', PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
Custom_middleware.py:
from django.conf import settings
from django.shortcuts import redirect
EXEMPT_URLS = [settings.LOGIN_URL.lstrip('/')]
if hasattr(settings, 'LOGIN_EXEMPT_URLS'):
EXEMPT_URLS += [url for url in settings.LOGIN_EXEMPT_URLS]
class LoginRequiredMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
def process_view(self, request, view_func, view_args, view_kwargs):
assert hasattr(request, 'user')
path = request.path_info.lstrip('/')
print(path)
if not request.user.is_authenticated:
if path not in EXEMPT_URLS:
return redirect(settings.LOGIN_URL)
settings.py
MIDDLEWARE = [
'tutorial.middleware.LoginRequiredMiddleware',
]
LOGIN_REDIRECT_URL = '/accounts/'
LOGIN_URL = '/accounts/login/'
LOGIN_EXEMPT_URLS = (
r'^register/$',
)
Спасибо
LOGIN_EXEMPT_URLS
когда-либо изменятся, вам не придется менять их и в вашемsettings.py
. 24.05.2019