`
zjxplq
  • 浏览: 40531 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
社区版块
存档分类
最新评论

admin管理界面的urls的生成

阅读更多

 

为了可以在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)
 

 

分享到:
评论

相关推荐

    Python库 | admin-extra-urls-1.3.1.tar.gz

    `admin-extra-urls`库允许开发者在Django的admin界面中添加自定义的URL,这些URL可以链接到任何视图或者执行特定的操作,比如批量处理、导出数据、自定义表单等。通过这个库,开发者可以轻松地将更多业务逻辑集成到...

    基于python+Django的admin后台管理系统.zip

    Django的admin后台管理系统是一个内置的功能,允许开发者快速为网站创建一个管理界面,用于处理数据库中的模型实例。开发者只需在模型类上注册,Django admin就能自动生成CRUD(创建、读取、更新、删除)操作的界面...

    django中如何使用admin进行多个模型的后台管理

    默认情况下,Django会为每个模型生成一个基本的管理界面。然而,我们可以通过创建自定义的`AdminModel`类来定制显示和操作。例如,我们可以为`Author`模型创建一个自定义的Admin类: ```python # admin.py class ...

    python 后台管理系统

    此外,Django的后台管理界面(Admin Site)提供了一个默认的界面,用于管理模型实例。只需在应用的admin.py文件中注册模型,就可以在Django的后台界面中添加、编辑和删除数据。 总结来说,"python 后台管理系统"是...

    django admin 自定义替换change页面模板的方法

    Django是一个高级的Python Web...虽然在实际操作中可能会遇到各种问题,但是通过上面的步骤和方法,可以有效地实现admin界面的个性化定制。希望本文的内容能够为Django开发者们提供有价值的参考,并在实践中得到应用。

    django 自定义管理系统

    只需在模型类上添加`admin.register`,Django就能自动生成管理界面,允许管理员进行增删改查等操作。 1. **注册模型**:通过`admin.site.register(Model)`将模型注册到admin应用,使模型在后台可见。 2. **自定义...

    基于 Django 框架开发的图书管理系统.zip

    此外,它还包括强大的表单处理能力、内置的模板引擎以及自动生成管理界面等功能,极大地提高了开发效率。 2. **项目结构** 在 `books_management-master` 文件夹中,你将看到 Django 项目的典型结构:`manage.py`...

    django-admin-honeypot:虚假的Django admin登录屏幕页面

    默认的admin界面具有用户认证和权限管理,可以自定义注册模型,提供友好的UI来处理数据库操作。 ### 3. Honeypot技术 Honeypot技术在网络安全领域广泛使用,主要用于欺骗攻击者,使他们误以为找到了有价值的系统或...

    meiduo_mall.zip

    - **管理界面(Admin)**:Django自带的管理界面可以让开发者快速地对模型数据进行增删改查操作,方便后台管理。 在**meiduo_mall**这个项目中,我们可以预见到以下几个关键模块: 1. **用户模块(User)**:包括...

    Python + Django[web] 配置后台管理系统

    5. 管理界面:Django的`admin`应用提供了一个默认的后台管理界面,只需简单地注册模型,即可自动创建增删改查的管理界面。你可以根据需求自定义这个界面。 6. 错误处理与日志:确保对常见的错误进行捕获和处理,...

    基于python的django物资管理系统

    首先,开发者会通过`django-admin startproject`命令创建项目,然后使用`python manage.py startapp`创建名为`物资管理`的应用。 2. **数据库模型**: 在Django中,数据模型是通过定义Python类来实现的,这些类...

    基于Django的图书管理系统源码+数据库.zip

    通过在模型类上注册admin,可以自动生成后台界面,无需额外编写代码。 5. 安装与运行: 解压"book_management.rar"后,首先确保已经安装了Python和Django。使用命令行进入项目目录,运行`python manage.py ...

    一个基于Django的小说网站后台管理系统.zip

    总的来说,这个基于Django的小说网站后台管理系统将涉及网页界面的设计、数据库的交互、用户管理以及各种业务逻辑的实现,为小说网站提供了一个高效、易用的后台管理平台。在实际开发中,开发者还会考虑性能优化、...

    Django中自定义admin Xadmin的实现代码

    但有时候内置的admin界面并不能完全满足特定项目的需求,这时就需要对admin进行定制,自定义admin界面是开发过程中非常重要的一个环节。本文档将详细介绍Django中如何通过自定义admin实现Xadmin的过程,并通过实例...

    django Admin文档生成器使用详解

    ### Django Admin文档生成器使用详解 #### 前言 Django是一款强大的Web框架,它提供了许多便捷的功能来加速Web应用程序的开发。其中,Django的`admindocs`应用是一个非常实用的功能,可以帮助开发者更好地理解和...

    djangol实现学生管理网站

    这样,你就可以在Django的内置管理界面中管理班级和学生,无需编写额外的视图和模板。 总结,本项目涵盖了从基础的Django工程搭建,到数据库配置、模型定义、视图创建、URL路由设计、模板制作、分页实现,以及后台...

    django-admin-dashboards:Django仪表板-用Django编码的管理面板| 应用种子

    这个项目的核心目标是提供一个自定义的、功能丰富的后台管理界面,以增强Django默认的admin界面。作为应用种子,它为开发者提供了一个起点,方便快速构建自己的web应用程序。 Django是一个强大的Python web开发框架...

    基于Django的教务信息管理系统源码.zip

    最后,Django的管理界面(Admin)是一个方便的工具,用于快速创建和维护数据库记录。通过简单的注册模型,管理员可以在线添加、编辑和删除数据。在`admin.py`文件中,我们可以看到哪些模型被注册到管理界面。 总结...

    Python3+Django2实现后台管理系统入门,含详细教程、数据库文件、完整后台管理系统源码

    你可以使用`admin.site.register(News)`在Django的管理界面注册你的模型。 10. **部署与测试**: 当你的后台管理系统完成开发后,可以将其部署到服务器,如使用Gunicorn或uWSGI搭配Nginx。同时,确保进行充分的...

    简易新闻管理系统,django框架实现

    7. 管理员界面(Admin) Django的内置管理员界面可以在无需编写额外代码的情况下,对数据进行增删改查操作。只需在`admin.py`文件中注册模型,然后通过浏览器访问/admin/即可访问这个界面。 8. 数据库操作 Django...

Global site tag (gtag.js) - Google Analytics