自定义Admin后台的登录页面
2022/8/7 23:23:54
本文主要是介绍自定义Admin后台的登录页面,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
自定义Admin后台的登录页面
(1) 在主应用里创建myadmin.py和myapps.py文件,在myadmin.py文件中定义MyAdminSite类,该类继承父类AdminSite并重写admin_view()和get_urls()方法从而更改Admin后台系统地登录地址。
from django.contrib import admin from functools import update_wrapper from django.views.generic import RedirectView from django.urls import reverse from django.views.decorators.cache import never_cache from django.views.decorators.csrf import csrf_protect from django.http import HttpResponseRedirect from django.urls import include, path, re_path from django.contrib.contenttypes import views as contenttype_views from django.contrib.auth.views import redirect_to_login class MyAdminSite(admin.AdminSite): def admin_view(self, view, cacheable=False): def inner(request, *args, **kwargs): if not self.has_permission(request): if request.path == reverse('admin:logout', current_app=self.name): index_path = reverse('admin:index', current_app=self.name) return HttpResponseRedirect(index_path) # 修改注销后重新登录的路由地址 return redirect_to_login( request.get_full_path(), '/user/login.html' ) return view(request, *args, **kwargs) if not cacheable: inner = never_cache(inner) if not getattr(view, 'csrf_exempt', False): inner = csrf_protect(inner) return update_wrapper(inner, view) def get_urls(self): def wrap(view, cacheable=False): def wrapper(*args, **kwargs): return self.admin_view(view, cacheable)(*args, **kwargs) wrapper.admin_site = self return update_wrapper(wrapper, view) urlpatterns = [ path('', wrap(self.index), name='index'), path('login/', RedirectView.as_view(url='/user/login.html')), # 修改登录页面的路由地址 path('logout/', wrap(self.logout), name='logout'), path('password_change/', wrap(self.password_change, cacheable=True), name='password_change'), path( 'password_change/done/', wrap(self.password_change_done, cacheable=True), name='password_change_done', ), path('jsi18n/', wrap(self.i18n_javascript, cacheable=True), name='jsi18n'), path( 'r/<int:content_type_id>/<path:object_id>/', wrap(contenttype_views.shortcut), name='view_on_site', ), ] valid_app_labels = [] for model, model_admin in self._registry.items(): urlpatterns += [ path('%s/%s/' % (model._meta.app_label, model._meta.model_name), include(model_admin.urls)), ] if model._meta.app_label not in valid_app_labels: valid_app_labels.append(model._meta.app_label) if valid_app_labels: regex = r'^(?P<app_label>' + '|'.join(valid_app_labels) + ')/$' urlpatterns += [ re_path(regex, wrap(self.app_index), name='app_list'), ] return urlpatterns
上述代码比较固定,只需根据需求更改注释部分的地址即可。
(2) 将自定义的MyAdminSite类进行系统注册,由MyAdminSite类实例化创建Admin后台系统,在myapps.py中定义系统注册类MyAdminConfig.
from django.contrib.admin.apps import AdminConfig class MyAdminConfig(AdminConfig): default_site = 'myblog.myadmin.MyAdminSite'
(3) 在settings.py文件的INSTALLED_APPS中配置系统注册类MyAdminConfig。
# 需要将原来的 'django.contrib.admin' 注释掉 INSTALLED_APPS = [ # 'django.contrib.admin', 'myblog.myapps.MyAdminConfig', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
这篇关于自定义Admin后台的登录页面的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-29gnn neural network
- 2024-03-29unshorten bit.ly
- 2024-03-29postgres update join
- 2024-03-29filename2
- 2024-03-29Spel 表达式
- 2024-03-29Gitlab 实现仓库完全迁移,包括所有提交记录、分支、标签
- 2024-03-28numpy moving average
- 2024-03-28lsp框架
- 2024-03-28in文件
- 2024-03-28ninoka nk 700