利用 Django admin 完成更多任务

Django+Celery+xadmin实现异步任务和定时任务 Django+Celery+xadmin实现异步任务和定时任务 一、celery介绍 1、简介 【官网】http://www.celeryproject.org/ Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务( async task )和定时任务( crontab )。 异步任务:比如发... 阅读详情

Liza Daly, 软件工程师和所有者, Threepress Consulting Inc.

2009 年 6 月 22 日

Django 提供的内置管理控制台是该产品最大的卖点之一。假如您要定制外观和模型字段以外的东西,应该怎么办呢?查看本文了解如何在不修改源程序的情况下扩展现有管理应用程序。

Django admin

Django 为未来的开发人员提供了许多功能:一个成熟的标准库,一个活跃的用户社区,以及 Python 语言的所有好处。虽然其他 Web 框架也声称能提供同样的内容,但 Django 的独特之处在于它内置了管理应用程序 —— admin。

admin 提供了开箱即用的高级 Create-Read-Update-Delete (CRUD) 功能,减少了重复工作所需的时间。这是许多 Web 应用程序的关键所在,程序员可以在开发时快速浏览他们的数据库模型;非技术最终用户可以在部署时使用 admin 添加和编辑站点内容。

在现实中,总需要执行某些定制操作。关于 admin 外观的基本情况,Django 文档提供许多指南,Django 自身也包含了一些简单的方法用来改写 admin 行为的子集。如果您需要更多功能怎么办呢?从哪里开始着手呢?本文将指导您如何进行一些高级 adimin 定制。

admin 快速浏览

大多数 Django 开发人员都很熟悉 admin 的默认功能。让我们快速回顾一下,首先编辑顶级 urls.py 启用 admin,见清单 1。


清单 1. 在 urls.py 中启用 admin
				
from django.conf.urls.defaults import *
# 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/(.*)', admin.site.root),
)

本文使用的软件版本
  • Django V1.0.2
  • SQLite V3
  • Python V2.4-2.6(Django 尚不支持 Python V3)
  • IPython(用作样例输出)

Django Object-Relational Mapper (ORM) 支持许多数据库后端,但是 SQLite 是最简单的安装方式,许多操作系统都附带 SQLite。这些样例也适用于其他后端。有关 Django 支持的数据库列表,请参见 参考资料。

Django 提供一个快速方式,可以使用独立代码设置工作环境:运行 python manage.py shell。本文中的所有代码样例都假设已经调用了该环境。在 Django lingo 中,假设如下:

  • 这是一个名为 more_with_admin 的 Django 项目。
  • more_with_admin 项目包含一个名为 examples 的应用程序。

examples 应用程序模拟基本的类博客文档系统,这些文档中还有多个评论(或没有)。所有命令行样例都来自project root —— more_with_admin 主目录。

您还需要将 django.contrib.admin 应用程序添加到 settings.INSTALLED_APPS。

在继续下一步前,建议计划扩展 admin 的用户熟悉一下源代码。对于支持快捷键和符号链接的操作系统,创建一个指向 admin 应用程序的快捷键或符号链接会很有用。

admin 包含在 Django 包中。假如已经使用安装工具安装了 admin,则它位于 django/contrib/admin 下的 site-packages 中。以下是一个项目到 Django admin 源的符号链接样例,您可以根据操作系统和 Django 安装的位置定制,以便更轻松的复制和引用:


$ ln -s /path/to/Python/install/site-packages/django/contrib/admin admin-source

admin.autodiscover() 方法迭代设置 .INSTALLED_APPS 中的每个应用程序,并查找名为 admin.py 的文件。该文件通常位于应用程序目录的最上方,与 models.py 级别一样。

样例应用程序需要清单 2 中提供的 models.py。相应的 admin.py 如下所示。


清单 2. 该应用程序的样例 models.py
				
from django.db import models
class Document(models.Model):
    '''A Document is a blog post or wiki entry with some text content'''
    name = models.CharField(max_length=255)
    text = models.TextField()
    
    def __unicode__(self):
        return self.name

class Comment(models.Model):
    '''A Comment is some text about a given Document'''
    document = models.ForeignKey(Document, related_name='comments')
    text = models.TextField()

现在,您可以通过运行 Django 开发服务器调用 admin:

python manage.py runserver

admin 可从默认位置 http://localhost:8000/admin/ 获取。登录之后,您可以看到基本的 admin 屏幕,如下所示。


图 1. 基本的 Django admin 屏幕
基本的 Django admin 屏幕 

更改 admin.py 中的代码

与 Django 应用程序中的其他文件不同,如果使用 Django 开发 Web 服务器更改 admin.py,您可能需要手动重启服务器。

注意,您的模型现在尚不可用,因为您还没有创建 admin.py。清单 3 展示的代码让您能在 admin 中使用模型。


清单 3. 样例 admin.py
				
from django.contrib import admin
from more_with_admin.examples import models

class DocumentAdmin(admin.ModelAdmin):
    pass

class CommentAdmin(admin.ModelAdmin):
    pass

admin.site.register(models.Document, DocumentAdmin)
admin.site.register(models.Comment, CommentAdmin)
      

现在如果您在 admin 中重载主页,您将看到可用的新模型,如下所示。


图 2. 可以支持定制模型的 Django admin
带有定制模型的 Django admin 屏幕 








定制 admin 模型页面

admin 文件夹中的目录名称

注意,我使用模型的小写名称。这与生成 URL 时处理普通 admin 页面的方式是一致的。Django 调用支持 URL 的表格 slugs。如果您不确定给定的模型应该使用哪个 slug,可以在创建目录之前先浏览 admin 并留意出现在 URL 中的名称。

理解在不修改 Django 源代码的情况下如何定制 admin 的关键在于,记住 admin 像其他程序一样只是一个普通的 Django 应用程序。最重要的一点是,这意味着可以使用 Django 模版继承系统。

Django 的模版搜索顺序总是将您自己项目的模版排在其他系统之前。此外,admin 在恢复到默认情况前,会尝试搜索匹配每个模型的硬编码模版。这为轻松定制提供了一个扩展点。

首先,确保 Django 通过编辑项目的 settings.py 来查看您的模版目录。


清单 4. 编辑 settings.py 以查看模版目录
				
TEMPLATE_DIRS = (
    "/path/to/project/more_with_admin/templates",
    "/path/to/project/more_with_admin/examples/templates",
)

然后在项目中创建以下目录:

$ mkdir templates/admin/examples/document/
$ mkdir templates/admin/examples/comment/

Django admin 的特殊行为将检查目录和应用程序名称(这里是 examples),然后是模型的名称(document 和 comment),然后才能使用系统模版呈现该管理页面。

重写单个模型添加/编辑页面

admin 用来添加和编辑模型实例的页面名称是 change_form.html。首先在 Document 模型目录中创建一个名为 templates/admin/examples/document/change_form.html 的页面,然后将 Django 模版继承线置入其中:{% extends "admin/change_form.html" %}。

现在可以进行定制了。花一些时间熟悉实际的 admin/change_form.html 的内容。它很合理地将一些可以重写的模板块组织到一起,但是有些定制可能需要大量复制模块。不过,使用基于块的模板重写总是比复制整个页面要好。

您想对添加/编辑页面执行哪种定制?对于系统中的每个 Document,您应该展示 5 个最近评论的预览。

首先,创建一些样例内容。


清单 5. 使用 Django shell 创建带几个评论的样例Document
				
$ python manage.py shell
In [1]: from examples import models
In [2]: d = models.Document.objects.create(name='Test document', 
                                           text='This is a test document.')
In [3]: for c in range(0, 10):
   ...:     models.Comment.objects.create(text='Comment number %s' % c, document=d)
      

现在,admin 列表页面展示一个 Document。选择该 Document 打开默认的添加/编辑页面,如下所示。


图 3. 带有 Document 的默认添加/编辑页面
默认的添加/编辑页面 

注意,相关评论不显示。在 admin 中显示相关模型的标准方法是使用强大的 Inline 类。Inline 类允许 admin 用户在单个页面编辑或添加多个相关模型。要查看运行的 inline,按照清单 6 编辑应用程序 admin.py。


清单 6. 向 Document admin 添加相关模型评论
				
from django.contrib import admin
from more_with_admin.examples import models

class CommentInline(admin.TabularInline):
    model = models.Comment

class DocumentAdmin(admin.ModelAdmin):
    inlines = [CommentInline,]

class CommentAdmin(admin.ModelAdmin):
    pass

admin.site.register(models.Document, DocumentAdmin)
admin.site.register(models.Comment, CommentAdmin)
      

图 4 展示了添加 TabularInline 控件之后新的添加/编辑页面。


图 4. 将评论模型作为 Inline 添加之后的添加/编辑页面
将评论模型作为 Inline 添加之后的添加/编辑页面 

这无疑非常强大,但是如果只想快速预览评论的话就没必要这样做了。

这里您可以采取两种方法。一种是使用 Django admin widget 接口编辑与 inline 关联的 HTML widget;Django 文档详细描述了 widget。另一种方法是直接修改添加/编辑页面。如果不希望使用任何特定于 admin 的功能,那么该方法非常有用。

如果不允许编辑评论(可能是由于用户没有足够的权限),但是又想 让用户看到评论,那么可以修改 change_form.html。

Django admin 提供的变量

要在模型实例页面添加功能,您需要了解 admin 已经可以使用什么数据。两个键变量的说明如下。


表 1. 定制 admin 模版需要的变量
变量说明
object_id这是编辑对象时需要的主键。如果要定义特定的实例页面(比如 Document),那么使用该键就够了。
content_type_id如果要重写多种模型页面,使用该变量查询 ContentTypes 框架来获取模型的名称。更多有关内容类型的信息,请参见 参考资料。

为 admin 页面中的内容创建模板标记

列出无法直接输入 Django 模板的相关评论查询代码。最佳的解决方案是使用模板标记。首先,创建模板标记目录 and __init__.py 文件:

$ mkdir examples/templatetags/
$ touch examples/templatetags/__init__.py

创建一个名为 examples/templatetags/example_tags.py 的新文件,并添加以下代码。


清单 7. 根据给定 Document ID 检索评论的模板标签
				
from django import template
from examples import models

register = template.Library()

@register.inclusion_tag('comments.html')
def display_comments(document_id):
    document = models.Document.objects.get(id__exact=document_id)
    comments = models.Comment.objects.filter(document=document)[0:5]
    return { 'comments': comments }
      

由于这是一个包含标签,您需要创建相应的模板文件:comments.html。编辑 examples/templates/comments.html 文件并输入清单 8 中的代码。


清单 8. 显示评论预览集的模板
				
{% for comment in comments %}
<blockquote>{{ comment.text }}</blockquote>
{% endfor %}

现在可以将它添加到 admin 页面了。在 admin.py 中注释掉对 CommentInline 的引用,并按照清单 9 更改 change_form.html 的本地版本。


清单 9. 在添加/编辑页面包含模板标签
				
{% extends "admin/change_form.html" %}

{% load example_tags %}

{% block after_field_sets %}
  {% if object_id %}{% display_comments object_id %}{% endif %}
  {% endblock %}

在使用前检查 object_id 的存在很重要,因为 change_form.html 还可以用来创建新实例,在这种情况下 object_id 不可用。after_field_sets 块只是 admin 中提供的众多扩展点之一。其他请参考 change_form.html 源页面。

图 5 展示了更新后的表格。


图 5. 包含模板标记之后的添加/编辑页面
包含模板标记之后的添加/编辑页面 








修改 admin 行为

模板重写只能做这么多了。如果您想更改 admin 的实际流和行为怎么办呢?修改源代码不是不可能,但是那会让您受制于更新时使用的特定 Django 版本。

重写 AdminModel 方法

默认情况下,在 admin 中单击 Save 将用户带回到列表页面。通常这没有问题,但是如果您想直接到 admin 外部的对象预览页面,那应该怎么办?在开发内容管理系统 (CMS) 时这种情况很常见。

提供 get_absolute_url() 方法
清单 10 假设已经修改了 Document 以包含 get_absolute_url() 方法,该方法是 Django 模型指定规范表示的推荐方法。如果指定了规范表示,Django admin 还在该模型的每个页面上放置一个有用的 View on site 按钮。

admin 应用程序中的大部分功能都附加到 admin.ModelAdmin 类。这是该对象从 admin.py 中继承的类。您可以重写许多许多公开方法。类定义请查看 admin-source/options.py 中的源代码。

有两种方法可以更改 Save 按钮的行为:您可以重写 admin.ModelAdmin.response_add,该按钮负责保存后的实际重定向;还可以重写 admin.ModelAdmin.change_view。后一种方式更为简单。


清单 10. 保存事件之后重写指向用户的页面
				class DocumentAdmin(admin.ModelAdmin):

    def change_view(self, request, object_id, extra_context=None):

        result = super(DocumentAdmin, self).change_view(request, object_id, extra_context)

        document = models.Document.objects.get(id__exact=object_id)
        
        if not request.POST.has_key('_addanother') and 
              not request.POST.has_key('_continue'):
            result['Location'] = document.get_absolute_url()
        return result

现在用户单击 Save 时,他们将被指向预览页面,而不是展示所有 Documents 的列表页面。

使用 signals 向 admin 添加功能

signals 是 Django 中较少使用的功能,它可以提高代码的模块化程度。signals 定义保存模型或加载模板的事件,无论它在哪里运行,Django 项目都可以侦听到并对它做出反应。这意味着您可以轻松的提高应用程序的行为,而无需直接修改它们。

admin 提供了一个应用程序开发人员经常想修改的功能:通过 django.contrib.auth.models.User 类管理用户。Django 用户往往只能添加或修改 admin,这使得这个有用的类很难定制。

想象一下,您希望每次创建一个新的 User 对象时,站点管理员都能收到一封电子邮件。因为 User 模块无法直接在项目中使用,实现该目标的唯一方法似乎是子类化 User 或者使用间接方法,比如创建虚拟配置文件对象进行修改。

清单 11 展示了在保存 User 实例时添加运行的函数有多么简单。signals 通常被添加到 models.py。


清单 11. 添加新用户时使用 Django signals 进行通知
				
from django.db import models
from django.db.models import signals
from django.contrib.auth.models import User
from django.core.mail import send_mail

class Document(models.Model):
    [...]

class Comment(models.Model):
    [...]

def notify_admin(sender, instance, created, **kwargs):
    '''Notify the administrator that a new user has been added.'''
    if created:
       subject = 'New user created'
       message = 'User %s was added' % instance.username
       from_addr = 'no-reply@example.com'
       recipient_list = ('admin@example.com',)
       send_mail(subject, message, from_addr, recipient_list)        

signals.post_save.connect(notify_admin, sender=User)

post_save signal 由 Django 提供,每次保存或创建模型时都会激活。connect() 方法带有两个参数:一个回调参数(notify_admin)和 sender 参数,后者指定该回调只关注 User 模型的保存事件。

在回调中,post_save signal 传递发送方(模型类)、该模型的实例和提示是否刚刚创建了实例的布尔值。在本例中,如果创建了 User,该方法将发送一封电子邮件;否则不执行任何操作。

有关其他 Django 提供的 signals 列表,请参见 参考资料,以及介绍如何编写 signals 的文档。




 


进一步修改:添加低级权限

为什么 blank=True?

如果不是文本字段,很难看出 ForeignKey 字段应该设置为 blank=True。在本例中,Django admin 使用 blank 而不是 null 决定了保存模型前是否必须手动设置值。

如果您仅仅提供 null=True(或者干脆不设置),那么 Django admin 在保存前将强制用户手动选择一个 “added by” 值,而其实您希望该行为对于当前保存用户是默认行为。

一个常用的 Django admin 特性是它的权限系统,该系统可以扩展以包含低级权限。默认情况下,admin 可以细粒度控制角色和权限,但是这些角色仅应用于类级别:用户可以修改所有 Document 或不修改任何 Document。

往往只允许用户修改特定的对象。这常常称为低级 权限,因为它们只能修改特定数据库表格行,而综合权限可以修改表格中的任何记录。样例应用程序中的情况可能是您只希望用户看到他们创建的 Document。

首先,更新 models.py 以包含创建 Document 的属性记录,如下所示。


清单 12. 更新 models.py 以记录创建每个 Document 的用户
				
from django.db import models
from django.db.models import signals
from django.contrib.auth.models import User
from django.core.mail import send_mail
    
class Document(models.Model):
    name = models.CharField(max_length=255)
    text = models.TextField()
    added_by = models.ForeignKey(User, 
      null=True, blank=True)

    def get_absolute_url(self):
        return 'http://example.com/preview/document/%d/' % self.id

    def __unicode__(self):
        return self.name
[...]
      

接下来,需要添加代码自动记录哪个用户创建了 Document。signals 无法用于这种情况,因为 signal 没有访问用户对象。但是,ModelAdmin 类提供了一个方法,使用该请求和当前用户作为参数。

修改 admin.py 中的 save_model() 方法,如下所示。


清单 13. 重写 DocumentAdmin 中的方法,以在创建数据库时保存当前用户
				
from django.contrib import admin
class DocumentAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        if getattr(obj, 'added_by', None) is None:
            obj.added_by = request.user
        obj.last_modified_by = request.user
        obj.save()

[...]
      

如果 added_by 的值是 None,那么这就是一个尚未保存的新记录。(您还可以检查 change 是否为 false,这指示是否将添加记录,但是检查 added_by 是否为空表示是否填写添加到 admin 之外的记录)。

另一个低级权限是将文档列表限制在创建它们的用户范围内。ModelAdmin 类为此提供了一个钩子程序 —— 它有一个名为 queryset() 的方法,该方法可以确定任何列表页面返回的默认查询集。

如清单 14 所示,重写 queryset() 以便将清单限制在当前用户创建的这些 Document 中。超级用户可以看到所有文档。


清单 14. 重写列表页面返回的查询集
				
from django.contrib import admin
from more_with_admin.examples import models

class DocumentAdmin(admin.ModelAdmin):
   
    def queryset(self, request):
        qs = super(DocumentAdmin, self).queryset(request)

        # If super-user, show all comments
        if request.user.is_superuser:
            return qs
        
        return qs.filter(added_by=request.user)
[...]
      

现在,任何对 admin 中 Document 列表页面的查询只显示当前用户创建的文档(除非当前用户是高级用户,这种情况下将显示所有文档)。

当然,只要知道 ID,用户就可以访问编辑页面查看未授权的文档,当前对此没有任何阻止手段。真正安全的低级权限需要重写更多方法。因为 admin 用户通常都达到某种水平的信任,所以有时一些基本的权限便足以提供精简的工作流了。








结束语

定制 Django admin 不需要 admin 源代码知识,也不需要修改源代码。admin 可以使用普通的 Python 继承和一些 Django 特有功能(比如 signals)进行扩展。

通过创建全新管理界面定制 admin 的优点很多:

  • 保证活动开发持续进行的同时,您的应用程序可以从 Django 的优势中受益。
  • admin 已经支持大部分通用用例。
  • 添加到项目的外部应用程序可以自动与代码并排管理。

在 Django V1.1 中,admin 提供了两种常用的新功能:在列表页面编辑内联字段和 admin 动作,后者允许一次批量更新许多项目。这两个新功能都不需要从头编写通用的功能,并且为其他定制操作提供了扩展点。

【Dv2Admin】定时任务前后端系统配置 本文通过引入工具,详细讲解了如何在 Django 应用中配置并管理后台和定时任务。借助 Celery 的强大功能和 Redis 的高效消息队列管理,开发者能够轻松实现复杂的任务调度和后台管理。这些步骤不但提高了开发效率,还优化了应用的性能和稳定性。未来,开发者可以进一步扩展此框架,解决更多实际开发中的问题,让应用更加智能、高效。 阅读详情

相关推荐

详细指南:如何在Django Admin中使用自动完成小部件实现列表过滤器功能

Django,一个强大的Python Web框架,为开发者提供了一个简单而强大的后台管理系统,即Django Admin。到目前为止,我们已经创建了一个简单的Django应用程序,并在Django Admin中注册了一个模型。当你在书籍的出版商字段中输入时,你应该看到一个下拉列表,其中包含与你的输入匹配的出版商名称。在本文中,我们将创建一个简单的Django应用程序,并在Django Admin中使用自动完成小部件实现列表过滤器功能。:为了简洁和清晰,本文中的代码可能不是最优的或最完整的实现。

qq_38334677的博客 194

Django Admin后台从一个页面同时编辑多个模型

然后,您注册了一个`CategoryAdmin`类来管理`Category`模型,并在该类中通过`inlines`属性指定了`VillainInline`,这样当编辑`Category`实例时,就可以同时编辑与该`Category`相关联的`Villain`实例了。然后,我们定义了`VillainInline`和`CategoryAdmin`类,并将`VillainInline`添加到`CategoryAdmin`的`inlines`属性中。这些配置可以让管理界面更加符合您的需求。

netandghost的博客 1301

反激开关电源变压器设计实例讲解(定明芳)

内容来自《反激变压器的设计》(定明芳主讲)。 定名芳老师主要讲了10步,最后应该还有一步,线径的选择已经绕制方式。这里进行了记录整理,把一些公式来源进行了推导。所有的设计都是基于理论计算。 1.确定电源规格 2.确定工作频率和最大占空比 3.计算匝比(利用伏秒平衡原则) 此处插入解释一下伏秒平衡,根源是磁通量平衡。该原则可以用来检查MOS管耐压是否够。 4.计算初级线圈峰值电流 基于CCM模式计算的。ip1是开关管要关闭时的峰值电流,ip2是开关管开始导通时的起始电流。因为时CCM模式,所以,ip

ydgd118的博客 5万+

django管理员_使用Django管理员做更多的事情

Django管理员 Django为潜在的开发人员提供了许多功能:成熟的标准库,活跃的用户社区以及Python语言的所有优点。 尽管其他Web框架也可以提出类似的要求,但Django的独特资产是其内置的管理应用程序-admin。 管理员提供了开箱即用的高级创建-读取-更新-删除(CRUD)功能,从而消除了重复工作。 对于许多正在开发中的Web应用程序来说,这是关键,当程序员可以快速探索其...

cuxiong8996的博客 1559

PID调参避坑指南:为什么你的电机总是震荡?从比例带积分到微分实战解析

本文针对电机控制中常见的震荡问题,提供了一份PID调参实战指南。文章深入解析了比例(P)、积分(I)、微分(D)三个参数对系统稳定性的影响,揭示了比例增益过大是导致震荡的关键原因之一,并给出了从纯比例调试到引入积分、微分的系统化调参流程与避坑要点,帮助工程师快速实现电机平稳、精准的控制。

weixin_28223453的博客 456

嵌入式Linux Qt/QML开发实战:从Buildroot配置到应用部署

本文详细介绍了嵌入式Linux Qt/QML开发全流程,从Buildroot系统配置、交叉编译工具链搭建到应用部署与调试。以RK3506开发板为例,提供实战指南,帮助开发者高效完成嵌入式应用开发,解决常见环境配置与性能优化问题。

m2n3o4p5的博客 224

如何在django的admin后台管理中显示多对多字段的值

# admin.py,其中Author表中的authors字段和Book表是多对多关系 from django.contrib import admin from .models import Author, Book, Publisher @admin.register(Book) class BookAdmin(admin.ModelAdmin): # 显示多对多字段 # ...

喜欢海 7154

H.264 Profile与Level详解:如何为不同应用场景选择合适的编码配置

本文深入解析了H.264编码标准中的Profile与Level概念,指导开发者如何为不同应用场景选择合适的配置。文章对比了Baseline、Main和High三大Profile的特性与适用场景,并解释了Level如何限定视频的分辨率、帧率与码率上限。通过实战指南,帮助读者在视频通话、在线点播和专业制作等场景中,平衡画质、兼容性与性能,实现高效编码。

rgv2345678的博客 238

django admin显示更多信息

问题:默认的admin界面只会显示object序号信息 想要 显示sulg and pubdate这俩都在model中 解决: 1.在admin中写class 继承admin.modelAdmin 重写其中的 list_display 方法 2.注册admin时候加入新的class的作为参数

HELLOWORLDBOOK的博客 264

CoppeiaSim(VREP)入门

vrep/CoppeliaSim关节抖动问题原因总结【Coppeliasim|轨迹规划(一)】设置机械臂的关节角时保证机械臂不散架设置机械臂的关节角时保证机械臂不散架。

weixin_50624597的博客 3227

华为OD机试 - 字符串筛选排序 - 数组(Python/JS/C/C++ 双机位C卷 100分)

k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果第k个最小ASCII码值的字母存在重复 则输出该字母的最小位置索引。输入一个由N个大小写字母组成的字符串,按照ASCII码值从小到大进行排序,查找字符串中第K个最小ASCII码值的字母(k>=1)。k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果有重复字母则输出字母的最小位置索引。输出字符串中第k个最小ASCII码值的字母所在字符串的位置索引。第二行输入k ,k必须大于0 ,k可以大于输入字符串的长度。

学Java,找哪吒 1391

利用 Django admin 完成更多任务(转)

利用 Django admin 完成更多任务 Django admin Django 为未来的开发人员提供了许多功能:一个成熟的标准库,一个活跃的用户社区,以及 Python 语言的所有好处。虽然其他 Web 框架也声称能提供同样的内容,但 Django 的独特之处在于它内置了管理应用程序 ——admin。 admin 提供了开箱即用的高级 Create-Read-Update...

weixin_34019144的博客 204

图像分割 - 使用Mask R-CNN模型在COCO数据集上进行图像分割任务

图像分割是计算机视觉领域的一个重要任务,它旨在将图像中的每个像素分类为对象或背景。Mask R-CNN是一种基于区域的卷积神经网络,可用于图像分割任务。它是Faster R-CNN的扩展,将目标检测与图像分割结合起来,能够同时检测和分割对象。在本博客中,我们将使用Mask R-CNN模型在COCO数据集上进行图像分割任务。我们将介绍如何下载和准备COCO数据集,以及如何使用Mask R-CNN模型进行训练和推理。

斌擎科技 1188

Django admin 日志管理

   django拥有自己的admin页面,同时它有自己的一套日志管理结构。正常的日志存放在django_admin_log表中,查看日志可以直接在django的管理页面查看。然而,它的日志记录比较简单,且存放在数据库中。如何扩展他呢?      由于django的管理model,均采用类似方法:     class ApplicationAdmin(admin.ModelAdmin):...

ully之旅 3271

i.MX6ULL系统移植 | 使用busybox制作根文件系统(1.29.0)

一. 下载BusyBox BusyBox是一个继承了大量Linux命令核工具的软件,像常用的ls、cp、mv、ifconfig等命令。一般下载BusyBox的源码,然后配置Busybox,选择自己想要的功能,最后编译即可。 BusyBox在官方可以直接下载:https://www.busybox.net/。目前最新是1.35.0,这里我使用1.29.0版本。 axel https://www.busybox.net/downloads/busybox-1.29.0.tar.bz2 下载之后解压: tar

Mculover666的博客(嵌入式) 1144

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

从Django-Vue-Admin到Django-Vue3-Admin:新版本迁移指南与功能对比

Django-Vue-Admin是一套基于RBAC模型的权限控制基础开发平台,采用前后端分离架构,后端使用Django+Django-REST-Framework,前端则基于Vue+ElementUI+d2admin构建。随着技术的发展,Django-Vue3-Admin作为其升级版本,带来了诸多改进和新特性。本文将为你详细介绍这两个版本的功能对比以及如何顺利完成迁移。 ## 版本概述:新旧版本

gitblog_01085的博客 816

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Django中使用 admin 界面

在admin界面可以方便的对数据库进行增删查改创建一个用户来登陆 admin 界面。在 CMD 输入$ python manage.py createsuperuser 创建管理员,然后输入 用户名、邮箱、密码,创建成功。输入127.0.0.1/admin即可进入管理界面将 admin 界面改成中文,只需要在 settings.py 中修改LANGUAGE_CODE为 zh_Hans即可将 mod...

ins_s的博客 3240

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Django-admin管理工具

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。

happy_king_zi的博客 2089

Django-nested-admin与Django-polymorphic的完美结合:多态嵌套实现终极指南

Django-nested-admin是一个强大的Django管理扩展,它允许在管理界面中创建嵌套内联表单,而Django-polymorphic则提供了多态模型支持,让同一父模型下可以有不同类型的子模型。这两个工具的结合为复杂数据结构提供了优雅的管理解决方案,让开发者能够轻松实现多态嵌套功能。 ## 为什么需要多态嵌套? 在许多实际应用场景中,我们需要处理具有层级关系的复杂数据结构。例如:

gitblog_01098的博客 952

Django-Q与Django Admin完美集成:如何监控和管理任务队列

Django-Q作为一款强大的分布式任务队列,能够与Django Admin无缝集成,为开发者提供直观的任务监控和管理界面。本文将详细介绍如何利用这一集成特性,轻松掌控任务队列状态,提升开发效率和系统稳定性。 ## 为什么选择Django-Q与Django Admin集成? 在现代Web应用开发中,异步任务处理已成为提升用户体验和系统性能的关键。Django-Q作为Django生态中优秀的任务

gitblog_00185的博客 276

Django Admin现代化改造:django-unfold技术架构深度解析

在Django开发生态中,admin后台界面长期面临着现代化不足的挑战。传统的Django admin虽然功能强大,但在用户体验、视觉设计和交互模式上已显陈旧。django-unfold项目应运而生,为Django开发者提供了一套渐进式的管理界面现代化解决方案,基于Tailwind CSS框架构建,在保持与原生Django admin完全兼容的同时,提供了现代化的设计语言和增强的工作流程。 ##

gitblog_00662的博客 467

Django角色权限管理终极指南:与Django Admin集成的完整教程

Django-role-permissions是一款基于角色的权限管理Django应用,它完美集成Django Admin,为开发者提供可视化的用户角色与权限管理界面。本教程将详细介绍如何通过简单的配置实现强大的角色权限管理系统,让您快速掌握用户权限管理的核心技巧。 ## 🎯 为什么选择django-role-permissions? 传统的Django权限管理虽然强大,但在处理复杂的角色权

gitblog_01121的博客 448

Django——admin站点

Django的后台管理站点 Django为网站管理员设计了一个进行网站后台数据管理的站点,用于管理网站的用户、组、模型等各种数据。 Django是一个非常强大的Web框架,自带一个管理站点admin,一般用于管理者自己内部使用,由于页面并没有进行 设计,一般不会将该站点提交给用户,只用于项目未上线之前的管理站点。 启用Admin站点 Admin站点说到底也是一个网页,也是在django框架内的,所以该站点也是django的一个应用,需要连接数据库 也需要进行URL路由配置,但是django会自动执行创

weixin_49581968的博客 2843

Django:Admin,Cookie,Session

cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。cookie的工作原理是:由服务器产生cookie内容,浏览器收到请求响应后保存在本地;当浏览器再次访问该服务器时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”。

weixin_39926295的博客 909
上一篇: 利用Django快速开发博客
下一篇: Django 模型高级部分及聚集查询
Java2King
博客等级 码龄18年 221粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值