您的位置 首页 > 德语词汇

admin是什么意思,admin的意思翻译、用法、同义词、例句?Django后台管理系统

大家好,如果您还对admin是什么意思,admin的意思翻译、用法、同义词、例句不太了解,没有关系,今天就由本站为大家分享admin是什么意思,admin的意思翻译、用法、同义词、例句的知识,包括Django后台管理系统的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

admin是什么意思,admin的意思翻译、用法、同义词、例句?Django后台管理系统

Django最强大的部分之一是自动生成的Admin界面。它读取模型数据来提供一个强大的、生产环境就绪的界面,使内容提供者能立即用它向站点中添加内容。

它可以快速的开发出一个后台管理界面,但是界面整体看起来一般般,之前为了学习练手,也是为了更美观,都是自己手写后台管理系统,这次是因为一些活需要快速开发,就直接使用了自带的后台管理系统,顺便也整理一部分。

1)确保在settings.py中的INSTALLED_APPS安装了

INSTALLED_APPS=[\n'django.contrib.admin',\n'django.contrib.auth',\n'django.contrib.contenttypes',\n'django.contrib.sessions',\n'django.contrib.messages',\n\n]\n

2)在模板上下文中添加以下依赖。

TEMPLATES=[\n{\n'BACKEND':'django.template.backends.django.DjangoTemplates',\n'DIRS':[],\n'APP_DIRS':True,\n'OPTIONS':{\n'context_processors':[\n...\n'django.contrib.auth.context_processors.auth',\n'django.contrib.messages.context_processors.messages',\n],\n},\n},\n]\n

3)在中间件中添加以下依赖。

MIDDLEWARE=[\n...\n'django.contrib.auth.middleware.AuthenticationMiddleware',\n'django.contrib.messages.middleware.MessageMiddleware',\n\n]\n

4)迁移数据

pythonmanage.pymakemigrations#创建数据库迁移文件\npythonmanage.pymigrate#根据数据库迁移文件生成对应SQL语句并执行\n

5)创建超级管理员账户,创建的用户是保存在auth_user表中。

pythonmanage.pycreatesuperuser\n

6)运行程序,登陆django自带admin后台管理系统

pythonmanage.pyrunserver0.0.0.0:8080\n

7)在浏览器上输入地址:http://127.0.0.1:8080/admin

8)admin界面默认是英文,如需要修改成中文,修改settings.py中的属性。

LANGUAGE_CODE='zh-Hans'\n

现在后台管理里面只显示默认的2个模型,那要将我们定义的模型也显示在后台管理里面,应该怎么样呢?

这就需要我们自定义admin,把需要管理的模型添加到admin中。

1)首先要在INSTALLED_APPS中添加对应的应用。

INSTALLED_APPS=[\n...\n'decoration',\n]\n

2)在应用app的admin.py中注册。

@admin.register(MaterialCategory)\nclassMaterialCategoryAdmin(admin.ModelAdmin):\npass\n

3)刷新,可以看到有显示了,但是上面app显示的还是英文。

4)修改app显示名称,所有跟app相关的内容配置,可以实现一个Appconfig类的子类来完成,django一般会默认在apps.py中建立一个。

classDecorationConfig(AppConfig):\ndefault_auto_field='django.db.models.BigAutoField'\nname='decoration'\nverbose_name='装修选材'#显示中文\n

1、修改展示的列表项,即模型中其他字段内容,可以在admin.py中用list_display修改展示的列表项。

@admin.register(Material)\nclassMaterialAdmin(admin.ModelAdmin):\nlist_display=['id','category','name','brand','specs','price','remarks']\n

注意:list_display不支持多对多的,需要再进行处理,例如:

#模型\nmaterials=models.ManyToManyField('Material',verbose_name='包含材料')\n\n#注册\n@admin.register(ComboPlatter)\nclassComboPlatterAdmin(admin.ModelAdmin):\nlist_display=['id','materials','total_price','remarks']\n

我们可以通过自定义个方法,来处理这个多对多字段:

@admin.register(ComboPlatter)\nclassComboPlatterAdmin(admin.ModelAdmin):\nlist_display=['id','name','total_price','material_list','remarks']\n\nempty_value_display="--"\n\n#自定义list_display\n#list_display选项不能用于显示多对多的字段(如materials)。\n#如果需要通过list_display选项显示多对多的字段或模型中原本不存在的字段或方法,我们需要新增自定义的list_play方法。\ndefmaterial_list(self,obj):\nreturn[material.nameformaterialinobj.materials.all()]#获取材料图片所有对象,然后再迭代获取对应名称组成列表\n\nmaterial_list.short_description='可选材料'\n

当然上面自定义方法不局限于多对多,有些特殊的也可以自定义,比如要显示什么颜色。

例如,当销量大于0时,红色显示,默认是直接显示字段:

list_display=['id','name','total_price','material_list','remarks','sale_nums']\n

我们可以重新定义方法:

list_display=['id','name','total_price','material_list','remarks','sale_nums_display_color']\n\ndefsale_nums_display_color(self,obj):\nifobj.sale_nums>0:\ncolor_code='red'\n\nelse:\ncolor_code='#000'\nreturnformat_html(\n'<spanstyle="color:{}">{}</span>',color_code,obj.sale_nums\n)\n\nsale_nums_display_color.short_description='套餐销量'\n

类似的,如果我们想要显示图片的HTML:

returnformat_html(\n'<imgsrc={}style="width:50px;height:50px;">',obj.avatar\n)\n

2、可以根据设置项进行过滤。

#设置过滤选项\nlist_filter=['category']\n

注意:过滤器如果是外键需要遵循这样的语法:

#设置过滤选项\n#过滤器如果是外键需要遵循这样的语法:本表外键字段__主表要显示的字段。如:“category__id”\n#多个是&&的关系\nlist_filter=['category__id','category']#也可以直接外键字段,默认就是模型的__str__输出值\n

3、每页显示记录数。

#每页显示条目数\nlist_per_page=4\n

4、搜索

#搜索字段\nsearch_fields=['name']\n

search_fields,在使用admin系统中的搜索时可能会出现“relatedFieldhasinvalidlookup:icontains”错误,主要原因是外键查询是需要指定相应的字段的。外键不应该只是一个model,而该是另一个表的明确的一个字段。所以我们需要指定特定的字段"本表外键字段__主表需查询字段"。

例如上面category是一个外键,如果我们设置:

#搜索字段\nsearch_fields=['category']\n

修改为即可:

#搜索字段\nsearch_fields=['category__name']\n

5、django默认给字段为空的,显示-,

empty_value_display="--"\n

6、对于一多,有时候我们2个单独编辑,非常麻烦

先需要添加完【材料】才能添加【材料图片】,非常麻烦,我们可以再增加【材料】同时添加【材料图片】:

#@admin.register(MaterialImg)\n#classMaterialImgAdmin(admin.ModelAdmin):\nclassMaterialImgInline(admin.TabularInline):\nmodel=MaterialImg#关联模型\n\nlist_display=['id','material','img']\n\n\n@admin.register(Material)\nclassMaterialAdmin(admin.ModelAdmin):\n#设置列表可显示的字段\nlist_display=['id','category','name','brand','specs','price','remarks']\n\n#设置过滤选项\nlist_filter=['category']\n\n#每页显示条目数\nlist_per_page=10\n\n#搜索字段\nsearch_fields=['category__name']\n\ninlines=[MaterialImgInline]\n

点击添加或者编辑,可以看到已经嵌入到材料一起了:

7、默认可以点击每条记录第一个字段的值可以进入编辑界面。我们可以设置其他字段也可以点击链接进入编辑界面,例如我们点击名称进入界面。

#设置哪些字段可以点击进入编辑界面\nlist_display_links=['id','name']#注意,默认的也要包含进去,否则会冲掉\n

8、调整页面头部显示内容和页面标题

admin.site.site_header='装修管理系统'\nadmin.site.site_title='装修管理系统'\n

9、如何将一个应用下的模型显示到另外个应用app下呢?可以在model类中通过app_label指定应用:

classOrderInfo(models.Model):\n...\n\nclassMeta:\ndb_table='t_order_info'\nverbose_name='订单'\nverbose_name_plural=verbose_name\napp_label='user'#使用app_label指定需要显示到的应用下\n

10、有时候,我们需要为应用定义一些自定义的页面,提供一些adminsite+ORM无法直接提供的功能,比如根据数据统计,汇总展示每天的销售整体处理情况,然后需要在adminsite页面中对应的app模块下加入跳转链接。下面分两步记录一下实现步骤。

首先,自定义Djangotemplate页面,编写一个简单的模板文件:

{%extends"admin/base_site.html"%}\n{%loadstatic%}\n\n\n{%blockcontent%}\n<div>\n<label><h2>数据统计</h2></label>\n</br>\n<tableclass="table"table-layout="fixed"width="600px">\n<thead>\n<tr>\n<th>日期</th>\n<th>销售总额</th>\n</tr>\n</thead>\n<tbody>\n{%fororderinorder_queryset%}\n<tr>\n<td>{{order.day}}</td>\n<td>{{order.total_amount}}</td>\n</tr>\n{%endfor%}\n</tbody>\n</table>\n\n<br/>\n<tableclass="table"table-layout="fixed"width="600px">\n<thead>\n<tr>\n<th>材料名称</th>\n<th>销售总额</th>\n</tr>\n</thead>\n<tbody>\n{%forgoodingoods_queryset%}\n<tr>\n<td>{{good.material__name}}</td>\n<td>{{good.price}}</td>\n</tr>\n{%endfor%}\n</tbody>\n</table>\n</div>\n{%endblock%}\n

在views.py文件中,渲染模板:

fromdjango.dbimportconnection\nfromdjango.db.modelsimportSum\n\ndefdata_static(request):\nifrequest.method=='GET':\n#按天分类\nselect={'day':connection.ops.date_trunc_sql('day','create_time')}\n#values在annotate之后表示select,在annotate之前表示groupby\norder_queryset=OrderInfo.objects.extra(select=select).values('day').annotate(total_amount=Sum('total_amount'))\nprint(order_queryset)\n\n#按照分类进行统计\ngoods_queryset=OrderGoods.objects.values('material__name').annotate(price=Sum('price'))\nprint(goods_queryset)\n\nreturnrender(request,'static.html',context={'goods_queryset':goods_queryset,'order_queryset':order_queryset})\n

配置路由:

urlpatterns=[\n....\npath('admin/user/datastat/',data_static),\n\n]\n

先直接在页面上上如,查看效果:

到这里,我们已经实现了自定义统计页面的功能。

那怎么样将这个链接添加到admin下呢?

要在adminsite中添加一个自定义的跳转链接,首先考虑要如何才能在对应的app下添加一个新的跳转链接,

最常见的情况显然就是在其下增加一个对数据库进行映射的model,以及对应的modeladmin。

那我们可以按照这个方式来试下,首先定义模型。

由于对应的数据表model其实只是提供了一个生成adminsite下跳转链接的功能,其实际并没有被访问过,所以并不需要为其定义任何实际字段,构造一个空的model即可:

classDataStat(models.Model):\nclassMeta:\n#db_table='t_order_goods'\nverbose_name='数据统计'\nverbose_name_plural=verbose_name\napp_label='user'#强行使其在user应用下\n

在admin.py中进行注册,并重写负责默认页面渲染行为的changelist_view函数实现了对自定义页面的渲染:

fromdecoration.modelsimportDataStat\nfromdecoration.viewsimportdata_static\n\n@admin.register(DataStat)\nclassDataStatAdmin(admin.ModelAdmin):\ndefchangelist_view(self,request,extra_content=None):\nreturndata_static(request)\n

添加如上代码后,adminsite页面如下:

11、Djangoadmin默认的action只有删除(delete)。

那如果我们需要实现其他功能,比如将勾选的订单状态修改。

#action即动作,是你对一个选定查询集(queryset)要进行的操作。当你选定一个查询集(queryset)后,\n#你可以点击action下拉菜单选择action,然后点击Go对其进行批量操作(如下所示)。Djangoadmin默认的action只有删除(delete)。\n\n'''自定义actions'''\nactions=['order_stauts_change']\ndeforder_stauts_change(self,request,queryset):\n#将状态和人置空\nqueryset.update(order_status=3)\n\norder_stauts_change.short_description="所选订单状态修改为待收货"\n

12、有时候,我们想在数据保存时进行一些额外的操作(通过重写ModelAdmin的save_model实现),

例如,之前做的点餐系统,当收拾完桌子的时候,将预定人也清空。

#将桌释放的时候,前面对应使用人为空\ndefsave_model(self,request,obj,form,change):\n\nifchange:#更改的时候\nifobj.table_statue=='0':\n#将使用人为空\nobj.table_user=None\n\n\nsuper(TableAdmin,self).save_model(request,obj,form,change)\n\nself.food_list(obj)\nelse:\nsuper(TableAdmin,self).save_model(request,obj,form,change)\n

还有一些其他的操作,可以根据具体业务进行挖掘开发。

pipinstalldjango-ckeditor\n\n#如果要在富文本里添加图片还需要\npipinstallpillow\n

2)注册:

INSTALLED_APPS=[\n...\n'ckeditor',\n'ckeditor_uploader',#图片\n]\n

3)如果要处理图片,还需要在settings.py里面添加如下设置:

#前面两个可能已经设置了,是存放用户上传文件的地方\nMEDIA_URL='/media/'\nMEDIA_ROOT=os.path.join(BASE_DIR,'media')\n\nCKEDITOR_UPLOAD_PATH='img/cases/'\n\nCKEDITOR_CONFIGS={#添加个性化的配置\n'default':{\n'image_previewText':'',#替换图片显示区域那一串搞不懂的字符串\n'tabSpaces':4,\n}\n}\n

4)另外还需要添加一个路由用于上传请求,在项目的urls.py:

fromdjango.conf.urls.staticimportstatic\n\nfromdjango.confimportsettings\n\nurlpatterns=[\n...\npath('ckeditor/',include('ckeditor_uploader.urls')),\n]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)\n

5)模型里面对应的字段设置。

fromckeditor.fieldsimportRichTextField\nfromckeditor_uploader.fieldsimportRichTextUploadingField\n\n#description=models.TextField(verbose_name='案例详细介绍')\n#description=RichTextField(verbose_name='案例详细介绍')#不带图片\ndescription=RichTextUploadingField(verbose_name='案例详细介绍')#带有上传图片功能的富文本编辑\n

6)重新迁移。

检查后发现原因在于CKEditor会使用settings.py文件中的语言设置。而我们settings.py中设置的LANGUAGE_CODE='zh-hans'简体中文,这是因为Django2以上文件夹中没有zh-cn文件夹,简体中文是zh_Hans文件夹

直接设置LANGUAGE_CODE=‘zh-cn’会导致异常。但是这样设置又会导致ckeditor找不到名为zh-Hans.js的语言文件,当找不到文件时,CKEditor会找到第一个名称包含zh的js文件去调用。而zh.js中是繁体字。

将ckeditor语言文件名称,将zh.js字典内容替换成了zh-cn.js中的简体内容。

ckeditor语言文件所在路径:env_decoration\\Lib\\site-packages\\ckeditor\\static\\ckeditor\\ckeditor\\lang

2)因为我们在富文本里面编辑内容,在数据库中插入的是带html代码的样式。

如果直接获取不处理的话,就会显示类似这种:

原因分析:在文章详情页没有看到预期的效果,而是类似于一堆乱码一样的HTML标签,这些标签本应该在浏览器显示它本身的格式,但是Django出于安全方面的考虑,任何的HTML代码在Django的模板中都会被转义(即显示原始的HTML代码,而不是经浏览器渲染后的格式)。

所以我们需要在显示的时候处理下,使其正常显示。

解决:方案1:为了解除转义,只需在模板标签使用safe过滤器即可,告诉Django,这段文本是安全的,你什么也不用做。

对于如果传递给其他前端的,比如小程序,则有相对应的处理方式。

更多学习笔记整理于微信公号【Python野路子】

关于admin是什么意思,admin的意思翻译、用法、同义词、例句的内容到此结束,希望对大家有所帮助。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023