Django - Override admin site's login form

前端 未结 6 1454
-上瘾入骨i
-上瘾入骨i 2020-12-16 23:49

I\'m currently trying to override the default form used in Django 1.4 when logging in to the admin site (my site uses an additional \'token\' field required for users who op

相关标签:
6条回答
  • 2020-12-16 23:54

    Maybe use a templatetag to obtain your custom AuthenticationForm?

    0 讨论(0)
  • 2020-12-16 23:55

    AdminSite has a login_form attribute that you can use to override the form used.

    Subclass AdminSite and then use an instance of your subclass instead of django.contrib.admin.site to register your models in the admin, in urls.py, etc.

    It's all in the documentation.

    0 讨论(0)
  • 2020-12-16 23:57

    Holá
    I found a very simple solution.
    You just need to modify the urls.py fle of the project (note, not the application one)

    1. In your PROJECT folder locate the file urls.py.
    2. Add this line to the imports section
      from your_app_name import views
    3. Locate this line
      url(r'^admin/', include(admin.site.urls))
    4. Add above that line the following
      url(r'^admin/login/', views.your_login_view),

    This is an example

    from django.conf.urls import include, url
    from django.contrib import admin
    
    from your_app import views
    
    urlpatterns = [
        url(r'^your_app_start/', include('your_app.urls',namespace="your_app_name")),
    
        url(r'^admin/login/', views.your_app_login),
        url(r'^admin/', include(admin.site.urls)),
    ]
    
    0 讨论(0)
  • 2020-12-16 23:58

    This code in urls.py works fine for me (Django version 1.5.1):

    from django.contrib import admin
    from my.forms import AuthenticationForm
    
    admin.autodiscover()
    admin.site.login_form = AuthenticationForm
    
    0 讨论(0)
  • 2020-12-17 00:10

    I know this is an old thread, but I wanted to add something it helped me find, in case it can help others.

    I'm using a special remote auth (Shibboleth) and overriding the admin login_form wouldn't be enough. I have a view that sets cookies and return variables and redirects to the remote auth provider, etc.

    So the way I did it was:

    from my_app.views import user_login, user_logout
    admin.autodiscover()
    admin.site.login = user_login
    admin.site.logout = user_logout
    

    Works great! Thanks to @dgk

    0 讨论(0)
  • 2020-12-17 00:13

    I redirect to a unique login url (I'm using django 2.1 and python 3.6 f-strings):

    from apps import admin
    from django.urls import path, include
    from django.shortcuts import redirect
    
    urlpatterns = [
        path(
            'admin/login/',
            lambda r: redirect(
                f"/login?{r.META['QUERY_STRING']}" if r.META['QUERY_STRING'] \
                else '/login'
            )
        ),
        path('admin/', admin.site.urls),
    ]
    
    0 讨论(0)
提交回复
热议问题