欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

bbs-admin

发布时间:2025/4/16 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 bbs-admin 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

引入单例----单例补充

admin---url/注册的自定义配置

解析admin源码

 

 

django-admin注册账号-----创建超级用户

python manage.py createsuperuser

引入单例----单例补充

类知识补充

from django.test import TestCase# Create your tests here.class A(object):x = 12def __init__(self):self.y = 10class B(A):x = 20y = 20b = B() print(b.x) print(b.y)结果: 20 10

类的取值顺序

  先从对象的空间取----》对象所在的类-----》对象所在的类的父类

几种单例模式

1 基于__new__

class A():def __new__(cls, *args, **kwargs):_instance = Noneif not _instance:cls._instance = super().__new__(cls,*args,**kwargs)return cls._instancea = A() b = A() c = A() print(id(a)) print(id(b))

 解析:1 在实例化对象过程中先进行__new__方法,然后把结果返回给__init__

    2 利用第一次,初始化对象继承父类的__new__方法,生成的对象,返回给__init__,然后下次,直接把第一次生成的对象再返回给__init__,保证始终是第一次生成的对象

2 基于模块(python独有的)

# test_modle模块 class A():def __init__(self):self.name = 'alex'def func(self):print('呵呵')a = A() print(id(a))# test_03 import test_modle def func():print(id(test_modle.a))# 执行代码 import test_modleprint(id(test_modle.a))import test_modleprint(id(test_modle.a))from test_03 import func func()结果: 3082181927824 3082181927824 3082181927824 3082181927824

解析:

  1 导入模块,会生成一个pyc文件,但只会在第一次生成一个。后面的数据会从pyc文件中获取,与导入多少相同模块无关

  

  2 可以把jiango项目看成一个程序,如果取一个值,如果改值在同一个pyc文件中,无论取值过程中经历多少个模块,都可以看成,直接从相同的pyc文件中取值。

admin---url/注册的自定义配置

url-----对应源码分析url设计

二级路由设置

设计规则:在urls.py文件中的 urlpatterns 中

url(r'路由',[],None,None)

解析:[]中存放下一级路由,即url(r'下一级路由',自定义视图函数名)

     第一个None

     第二个None

多级路由以此类推

参考示例

urlpatterns = [url(r'^admin/', admin.site.urls),url(r'index',([url(r'^$',index),url(r'test01',test01),url(r'test02',test02)],None,None))# url(r'index/', get_urls()) ]

 

admin中增删改查对应的url

增http://127.0.0.1:8000/admin/app01/author/add/删urlhttp://127.0.0.1:8000/admin/app01/author/1/delete/改urlhttp://127.0.0.1:8000/admin/app01/author/1/change/查urlhttp://127.0.0.1:8000/admin/app01/author/

模仿admin简单设计(初级版):

设计前知识补充:

model._meta.app_label:获取类对象所在的app名

model._meta.model_name:获取类对象所在的类名

model:类

config_obj:配置类对象对象

from django.conf.urls import url from django.contrib import admin from django.shortcuts import HttpResponse def test01(request):return HttpResponse('test01') def test02(request):return HttpResponse('test02') def index(request):return HttpResponse('index') def show(request):return HttpResponse('show') def add(request):return HttpResponse('add') def change(request,id):return HttpResponse('change') def delete(request,id):return HttpResponse('delete') def get_urls2():item = [url(r'^$',show),url(r'add/', add),url(r'(\d+)/change',change),url(r'(\d+)/delete', delete)]return item, None, Nonedef get_urls():item=[url(r'^$',index)]for model,config in admin.site._registry.items():# print('----->',model,config)urls = url(r'{}/{}/'.format(model._meta.app_label,model._meta.model_name),get_urls2())item.append(urls)return item, None, Noneurlpatterns = [# url(r'^admin/', admin.site.urls),# # url(r'index',([# url(r'^$',index),# url(r'test01',test01),# url(r'test02',test02)# ],None,None))url(r'index/', get_urls()) ] View Code

注册的自定义配置

解析:

1  原来,注册时,我们通常默认继承 ModelAdmin类,然后在前端显示

2  我们通过继承ModelAdmin类,覆盖类中的方法,实现自定义效果

使用方法

 

class BookConfig(admin.ModelAdmin):list_display = ['title','price','publish','authors'] admin.site.register(Book,BookConfig)

 1  list_display = ['title','price','publish','authors']-----将modles.py中的对应表中的字段,展示在admin查的页面中

效果展示

默认

 

自定义

 

 坑:

  1 list_display 中有多对多/一对多中的多的字段,会报错

ERRORS: <class 'app01.admin.BookConfig'>: (admin.E109) The value of 'list_display[3]' must not be a ManyToManyField.

  2 ‘hehe’ 等一点都不相干的字段,启动项目就报错

ERRORS: <class 'app01.admin.BookConfig'>:
(admin.E108) The value of 'list_display[3]' refers to 'hehe',
which is not a callable, an attribute of 'BookConfig', or an attribute or method on 'app01.Book'. class PublishConfig(admin.ModelAdmin):list_display = ['name','hehe'] admin.site.register(Publish) admin.site.register(AuthorDetail,PublishConfig)

  3 即使两张表中是一对多/多对多/一对一 只要该表中没有这个静态书籍,就不能随便添加,否则,可以正常启动,但跳转到相应的web时会报错

页面 AttributeError at /admin/app01/author/ 'Author' object has no attribute 'book'后台 AttributeError: 'Author' object has no attribute 'book'

2 list_display_links = ['price','title']  ----给对应的字段添加a标签,跳转到修改的url

展示

默认 第一个字段

自定义

3  list_filter = ['title','author','publish']------分类

展示 

默认

自定义 

4 search_fields = ['title','price']-----查询,支持模糊查询

展示

默认

自定义

5 批量操作

1 def patch_init(self,request,queryset):queryset.update(price=0)2 patch_init.short_description = "初始化价格"3 actions = [patch_init]

1 定义函数(操作数据库)

2 定义选项名称

3 添加函数名

展示

  

 

解析admin源码

  1 启动

    从settings.py文件中找到 INSTALLED_APPS 配置文件

    又找到admin    from django.contrib import admin

 

 

    在admin中找到 from django.contrib.admin.sites import AdminSite, site

    找到setes模块  中的AdminSite, site 初始化对象site

    

    在admin中找到

def autodiscover():autodiscover_modules('admin', register_to=site)

    从模块中扫描带有admin的文件

    找到app01下的admin

  2 注册  

admin.site.register(Author) class BookConfig(admin.ModelAdmin):pass admin.site.register(Book,BookConfig)

  源码

源码: admin.py---sites.py----> class AdminSite(object):def __init__(self):self._registry = {} def register(self,model,admin_class=None):if not admin_class:admin_class = ModelAdmin self._registry[model] = admin_class(model, self) site = AdminSite()

  3 urls设计

   

参考文档:Django-admin 管理工具

     自定义配置参考详细

转载于:https://www.cnblogs.com/benson321/p/9543867.html

总结

以上是生活随笔为你收集整理的bbs-admin的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。