为了可以在django应用中使用admin管理界面,可以在urls.py中增加以下一些代码:
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
...
urlpatterns = patterns('',
...
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
...
)
下面来分析一下admin对应的urls是如何引用的。
首先来看autodiscover()
源码位于django\contrib\admin\__init__.py中:
def autodiscover():
...
for app in settings.INSTALLED_APPS:
mod = import_module(app)
# Attempt to import the app's admin module.
try:
before_import_registry = copy.copy(site._registry)
import_module('%s.admin' % app)
except:
site._registry = before_import_registry
这个函数将settings.INSTALLED_APPS列表中的app进行注册或导入相关模块,如admin有关的进行注册,以后可以使用site._registry来进行引用。(此处不包含model的注册)
真正产生urls的是(r'^admin/', include(admin.site.urls))。
admin.site是在django\contrib\sites.py中的最后一行生成的。
site = AdminSite()
所以admin.site.urls实际上是类AdminSite的属性。
def urls(self):
return self.get_urls(), self.app_name, self.name
urls = property(urls)
从上面的代码看生成的关键在于类AdminSite的方法get_urls()中
def get_urls(self):
...
# Admin-site-wide views.(Admin-site范围的视图)
urlpatterns = patterns('',
url(r'^$',
wrap(self.index),
name='index'),
url(r'^logout/$',
wrap(self.logout),
name='logout'),
url(r'^password_change/$',
wrap(self.password_change, cacheable=True),
name='password_change'),
url(r'^password_change/done/$',
wrap(self.password_change_done, cacheable=True),
name='password_change_done'),
url(r'^jsi18n/$',
wrap(self.i18n_javascript, cacheable=True),
name='jsi18n'),
url(r'^r/(?P<content_type_id>\d+)/(?P<object_id>.+)/$',
'django.views.defaults.shortcut'),
url(r'^(?P<app_label>\w+)/$',
wrap(self.app_index),
name='app_list')
)
# Add in each model's views.(增加每个model的视图)
for model, model_admin in self._registry.iteritems():
urlpatterns += patterns('',
url(r'^%s/%s/' % (model._meta.app_label, model._meta.module_name),
include(model_admin.urls))
)
return urlpatterns
对于每个model的url是通过include(model_admin.urls)来进行加入的.而每个model是使用admin.site.register(model_name,modelAdmin)等形式来注册的.下面来查看AdminSite的register函数:
def register(self, model_or_iterable, admin_class=None, **options):
...
for model in model_or_iterable:
...
if options:
# For reasons I don't quite understand, without a __module__
# the created class appears to "live" in the wrong place,
# which causes issues later on.
options['__module__'] = __name__
admin_class = type("%sAdmin" % model.__name__, (admin_class,), options)
...
# Instantiate the admin class to save in the registry
self._registry[model] = admin_class(model, self)
可以看出get_urls()中model_admin应该是类ModelAdmin的实例.所有model_admin.urls实际上是类ModelAdmin的属性,具体的与admin-site视图的urls处理类似了.
def get_urls(self):
...
urlpatterns = patterns('',
url(r'^$',
wrap(self.changelist_view),
name='%s_%s_changelist' % info),
url(r'^add/$',
wrap(self.add_view),
name='%s_%s_add' % info),
url(r'^(.+)/history/$',
wrap(self.history_view),
name='%s_%s_history' % info),
url(r'^(.+)/delete/$',
wrap(self.delete_view),
name='%s_%s_delete' % info),
url(r'^(.+)/$',
wrap(self.change_view),
name='%s_%s_change' % info),
)
return urlpatterns
def urls(self):
return self.get_urls()
urls = property(urls)
相关推荐
`admin-extra-urls`库允许开发者在Django的admin界面中添加自定义的URL,这些URL可以链接到任何视图或者执行特定的操作,比如批量处理、导出数据、自定义表单等。通过这个库,开发者可以轻松地将更多业务逻辑集成到...
Django的admin后台管理系统是一个内置的功能,允许开发者快速为网站创建一个管理界面,用于处理数据库中的模型实例。开发者只需在模型类上注册,Django admin就能自动生成CRUD(创建、读取、更新、删除)操作的界面...
默认情况下,Django会为每个模型生成一个基本的管理界面。然而,我们可以通过创建自定义的`AdminModel`类来定制显示和操作。例如,我们可以为`Author`模型创建一个自定义的Admin类: ```python # admin.py class ...
此外,Django的后台管理界面(Admin Site)提供了一个默认的界面,用于管理模型实例。只需在应用的admin.py文件中注册模型,就可以在Django的后台界面中添加、编辑和删除数据。 总结来说,"python 后台管理系统"是...
Django是一个高级的Python Web...虽然在实际操作中可能会遇到各种问题,但是通过上面的步骤和方法,可以有效地实现admin界面的个性化定制。希望本文的内容能够为Django开发者们提供有价值的参考,并在实践中得到应用。
只需在模型类上添加`admin.register`,Django就能自动生成管理界面,允许管理员进行增删改查等操作。 1. **注册模型**:通过`admin.site.register(Model)`将模型注册到admin应用,使模型在后台可见。 2. **自定义...
此外,它还包括强大的表单处理能力、内置的模板引擎以及自动生成管理界面等功能,极大地提高了开发效率。 2. **项目结构** 在 `books_management-master` 文件夹中,你将看到 Django 项目的典型结构:`manage.py`...
默认的admin界面具有用户认证和权限管理,可以自定义注册模型,提供友好的UI来处理数据库操作。 ### 3. Honeypot技术 Honeypot技术在网络安全领域广泛使用,主要用于欺骗攻击者,使他们误以为找到了有价值的系统或...
- **管理界面(Admin)**:Django自带的管理界面可以让开发者快速地对模型数据进行增删改查操作,方便后台管理。 在**meiduo_mall**这个项目中,我们可以预见到以下几个关键模块: 1. **用户模块(User)**:包括...
5. 管理界面:Django的`admin`应用提供了一个默认的后台管理界面,只需简单地注册模型,即可自动创建增删改查的管理界面。你可以根据需求自定义这个界面。 6. 错误处理与日志:确保对常见的错误进行捕获和处理,...
首先,开发者会通过`django-admin startproject`命令创建项目,然后使用`python manage.py startapp`创建名为`物资管理`的应用。 2. **数据库模型**: 在Django中,数据模型是通过定义Python类来实现的,这些类...
通过在模型类上注册admin,可以自动生成后台界面,无需额外编写代码。 5. 安装与运行: 解压"book_management.rar"后,首先确保已经安装了Python和Django。使用命令行进入项目目录,运行`python manage.py ...
总的来说,这个基于Django的小说网站后台管理系统将涉及网页界面的设计、数据库的交互、用户管理以及各种业务逻辑的实现,为小说网站提供了一个高效、易用的后台管理平台。在实际开发中,开发者还会考虑性能优化、...
但有时候内置的admin界面并不能完全满足特定项目的需求,这时就需要对admin进行定制,自定义admin界面是开发过程中非常重要的一个环节。本文档将详细介绍Django中如何通过自定义admin实现Xadmin的过程,并通过实例...
### Django Admin文档生成器使用详解 #### 前言 Django是一款强大的Web框架,它提供了许多便捷的功能来加速Web应用程序的开发。其中,Django的`admindocs`应用是一个非常实用的功能,可以帮助开发者更好地理解和...
这样,你就可以在Django的内置管理界面中管理班级和学生,无需编写额外的视图和模板。 总结,本项目涵盖了从基础的Django工程搭建,到数据库配置、模型定义、视图创建、URL路由设计、模板制作、分页实现,以及后台...
这个项目的核心目标是提供一个自定义的、功能丰富的后台管理界面,以增强Django默认的admin界面。作为应用种子,它为开发者提供了一个起点,方便快速构建自己的web应用程序。 Django是一个强大的Python web开发框架...
最后,Django的管理界面(Admin)是一个方便的工具,用于快速创建和维护数据库记录。通过简单的注册模型,管理员可以在线添加、编辑和删除数据。在`admin.py`文件中,我们可以看到哪些模型被注册到管理界面。 总结...
你可以使用`admin.site.register(News)`在Django的管理界面注册你的模型。 10. **部署与测试**: 当你的后台管理系统完成开发后,可以将其部署到服务器,如使用Gunicorn或uWSGI搭配Nginx。同时,确保进行充分的...
7. 管理员界面(Admin) Django的内置管理员界面可以在无需编写额外代码的情况下,对数据进行增删改查操作。只需在`admin.py`文件中注册模型,然后通过浏览器访问/admin/即可访问这个界面。 8. 数据库操作 Django...