#33357 closed Bug (invalid)
SuccessMessageMixin doesn't work with LoginView
Reported by: | Cihat Ertem | Owned by: | Baptiste Mispelon |
---|---|---|---|
Component: | contrib.messages | Version: | 4.0 |
Severity: | Normal | Keywords: | LoginView, messages, SuccessMessageMixin |
Cc: | Baptiste Mispelon | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I have a problem with SuccessMessageMixin, LoginView. There is no problem with CreateView:
class CreateRoom(SuccessMessageMixin, CreateView): template_name = 'base/room_form.html' form_class = RoomForm success_url = reverse_lazy('home') success_message = 'Message'
I can capture and use 'Message' in template but with LoginView
class Login(SuccessMessageMixin, LoginView): template_name = 'registration/login.html' success_url = reverse_lazy('home') success_message = 'Message!!!'
I can not capture 'Message' with LoginView.
project urls:
urlpatterns = [ path('admin/', admin.site.urls), path(, include('django.contrib.auth.urls')), path(, include('base.urls')), ]
the base apps urls:
# app_name = 'base' urlpatterns = [ path(, views.Home.as_view(), name='home'), path('room/<int:pk>/', views.Room.as_view(), name='room'), path('create-room/', views.CreateRoom.as_view(), name='create-room'), path('update-room/<int:pk>/', views.UpdateRoom.as_view(model=Room), name='update-room'), path('delete-room/<int:pk>/', views.DeleteRoom.as_view(model=Room), name='delete-room'), path('login/', views.Login.as_view(), name='login') ]
settings.py:
INSTALLED_APPS = [ # Default django apps 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # My custom apps 'base.apps.BaseConfig', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'studybud.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'studybud.wsgi.application' # Database # https://docs.djangoproject.com/en/4.0/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # Password validation # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/4.0/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/4.0/howto/static-files/ STATIC_URL = 'static/' # Default primary key field type # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # Login redirect LOGIN_REDIRECT_URL = 'home' LOGIN_URL = 'login'
Change History (4)
comment:1 by , 3 years ago
Cc: | added |
---|---|
Component: | contrib.messages → contrib.auth |
Description: | modified (diff) |
Owner: | changed from | to
Status: | new → assigned |
Summary: | LoginView combine SuccessMessageMixin failed! → SuccessMessageMixin doesn't work with LoginView |
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 3 years ago
Component: | contrib.auth → contrib.messages |
---|---|
Description: | modified (diff) |
Resolution: | → needsinfo |
Status: | assigned → closed |
It turns out my initial tests were incorrect and I cannot actually reproduce your issue.
Using class MyView(SuccessMessageMixin, LoginView)
works fine for me, there must be something else that's broken in your setup.
I've marked the ticket as "needs info" and restored your original description. Could you reopen the ticket with some details on how to reproduce your issue?
In particular, how do you display the messages in your templates.
Thanks.
comment:3 by , 3 years ago
Resolution: | needsinfo → fixed |
---|
Ok, I found my fault!
I changed urlpattern order from this:
...
urlpatterns = [
path('admin/', admin.site.urls),
path(, include('django.contrib.auth.urls')),
path(, include('base.urls')),
]
to this:
urlpatterns = [
path('admin/', admin.site.urls),
path(, include('base.urls')),
path(, include('django.contrib.auth.urls')),
]
Thanks for your replies. Maybe a note should be add for order priority to doc. section.
comment:4 by , 3 years ago
Resolution: | fixed → invalid |
---|
Hi,
Thanks for reporting this issue. I've taken the liberty to edit your original report to remove information that I don't think is relevant, I hope that's ok.
The issue comes from the fact that
LoginView.form_valid()
doesn't callsuper()
:I can't find a documented reason why and changing it to this doesn't break any tests:
That change should fix the reported issue and seems straightforward enough.