• 九 .Django 管理后台(admin)


    一 .admin管理后台

    1.基本应用

    2 admin配置参数
    
        后台数据库管理页面 
        
        admin model:
        
        对每一个app下的model设计出增伤改查4个url
        
            查看book:
            http://127.0.0.1:8000/admin/app01/book/
            添加book: 
            http://127.0.0.1:8000/admin/app01/book/add/    
            编辑book:
            http://127.0.0.1:8000/admin/app01/book/1/change/
            删除book:
            http://127.0.0.1:8000/admin/app01/book/1/delete/
    
    Admin的实现流程:
            1 启动:
                  import admin
                  def autodiscover():
                       autodiscover_modules('admin', register_to=site)
                       
                       
                   执行每一个app下的admin.py文件
            2 注册
            
                  单例模式
                  
                  
            
            
            3 设计URL
        

    https://www.cnblogs.com/Sup-to/p/11094767.html    单例模式

    https://www.cnblogs.com/yuanchenqi/articles/8323452.html              Django-admin管理工具

    https://www.django.cn/course/show-11.html   

    admin界面汉化
    默认admin后台管理界面是英文的,对英语盲来说用起来不方便。可以在settings.py中设置: LANGUAGE_CODE
    = 'zh-CN' TIME_ZONE = 'Asia/Shanghai' 1.8版本之后的language code设置不同: LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'

     创建管理员用户:  
                                                     
    python  manage.py  createsuperuser
    
    执行:  python  manage.py  createsuperuser
    
            例如用户名: loverto            (lovertao)
            密码 :1234567890a             (1234567890lv)

     2. 基本注册

    from django.contrib import admin
    from blog.models import Blog
      
    #Blog模型的管理器
    class BlogAdmin(admin.ModelAdmin):
        list_display=('id', 'caption', 'author', 'publish_time')
         
    #在admin中注册绑定
    admin.site.register(Blog, BlogAdmin)
      上面方法是将管理器和注册语句分开。有时容易忘记写注册语句,或者模型很多,不容易对应。
    
    
    
    print(****************************************************)

    该方法是Django1.7的版本新增的功能:带装饰器注册
    from django.contrib import admin from blog.models import Blog #Blog模型的管理器 @admin.register(Blog) class BlogAdmin(admin.ModelAdmin): list_display=('id', 'caption', 'author', 'publish_time')


    
    

     3. 记录列表基本设置

    比较实用的记录列表设置有显示字段、每页记录数和排序等。
    
    from django.contrib import admin
    from blog.models import Blog
      
    #Blog模型的管理器
    @admin.register(Blog)
    class BlogAdmin(admin.ModelAdmin):
        #listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键)
        list_display = ('id', 'caption', 'author', 'publish_time')
        
        #list_per_page设置每页显示多少条记录,默认是100条
        list_per_page = 50
        
        #ordering设置默认排序字段,负号表示降序排序
        ordering = ('-publish_time',)
      
        #list_editable 设置默认可编辑字段
        list_editable = ['machine_room_id', 'temperature']
      
        #fk_fields 设置显示外键字段
         fk_fields = ('machine_room_id',)

    from django.contrib import admin
    # 站点管理
    from django.contrib import admin
    from .models import Grades, Students
    # 意思创建班级时在附带两个学生
    class StudentsInfo(admin.TabularInline):
        model = Students
        extra = 2
    # 自定义管理界面
    class GradesAdmin(admin.ModelAdmin):
        inlines = [StudentsInfo]  # 意思创建班级时在附带两个学生  意思加俩行
        # 列表页属性
        list_display = ['pk','gname','gdate','ggirlnum','gboynum','isDelete']  # 显示字段
        list_filter = ['gname']  # 过滤字段
        search_fields = ['gname']  # 搜索字段
        list_per_page =5  # 分页       表示5数据个一页
        # 添加修改页属性  注意: fields 和 fieldsets不能同时使用
        # fields=[]        # 是来规定的属性的先后顺序
        fieldsets = [  # 给属性分组
            ("aa", {"fields": ['ggirlnum','gboynum']}),
            ("bb", {"fields": ['gname','gdate','isDelete']}),
        ]
        # 注册:
    admin.site.register(Grades, GradesAdmin)
    class StudentsAdmin(admin.ModelAdmin):
        def aa(self):  # 布尔值显示问题(性别):
            if self.sgender:
                return ""
            else:
                return ""
    
        aa.short_description = "性别"  # 设置页面列的名称
        def bb(self):  # 布尔值显示问题(是否删除):
            if self.isDelete:
                return 1
            else:
                return 0
        bb.short_description = "是否删除"  # 设置页面列的名称简短的描述
        list_display = ['pk', 'sname', 'sage',aa,'scontend','grad',bb,]
        list_per_page = 3
        # 页面执行动作的位置
        actions_on_top = False
        actions_on_bottom = True
    # 注册:
    admin.site.register(Students, StudentsAdmin)
    我们可以设置其他字段也可以点击链接进入编辑界面。
    

    from django.contrib import admin from blog.models import Blog #Blog模型的管理器 @admin.register(Blog) class BlogAdmin(admin.ModelAdmin): #设置哪些字段可以点击进入编辑界面 list_display_links = ('id', 'caption')

    4 .筛选器

    筛选器是Django后台管理重要的功能之一,而且Django为我们提供了一些实用的筛选器。
    
    主要常用筛选器有下面3个:
    
    from django.contrib import admin
    from blog.models import Blog
      
    #Blog模型的管理器
    @admin.register(Blog)
    class BlogAdmin(admin.ModelAdmin):
        list_display = ('id', 'caption', 'author', 'publish_time')
         
        #筛选器
        list_filter =('trouble', 'go_time', 'act_man__user_name', 'machine_room_id__machine_room_name') #过滤器
        search_fields =('server', 'net', 'mark') #搜索字段
        date_hierarchy = 'go_time'    # 详细时间分层筛选 



    5. 自定义颜色显示

    from django.db import models
    from django.contrib import admin
    from django.utils.html import format_html
     
    class Person(models.Model):
        first_name = models.CharField(max_length=50)
        last_name = models.CharField(max_length=50)
        color_code = models.CharField(max_length=6)
     
        def colored_name(self):
            return format_html(
                '<span style="color: #{};">{} {}</span>',
                self.color_code,
                self.first_name,
                self.last_name,
            )
     
    class PersonAdmin(admin.ModelAdmin):
        list_display = ('first_name', 'last_name', 'colored_name')



    
    

    6. 调整页面头部显示内容和页面标题

    class MyAdminSite(admin.AdminSite):
        site_header = '好医生运维资源管理系统'  # 此处设置页面显示标题
        site_title = '好医生运维'  # 此处设置页面头部标题
     
    admin_site = MyAdminSite(name='management')

    
    
    from django.contrib import admin
    from hys_operation.models import *
     
     
    # class MyAdminSite(admin.AdminSite):
    #     site_header = '好医生运维资源管理系统'  # 此处设置页面显示标题
    #     site_title = '好医生运维'
    #
    # # admin_site = MyAdminSite(name='management')
    # admin_site = MyAdminSite(name='adsff')
    admin.site.site_header = '修改后'
    admin.site.site_title = '哈哈'
    

    # admin.py
    
    from django.contrib import admin
    
    from app01 import models  # 导入models
    
    
    def set_price(modelAdmin,request,queryset):  # 这个方法用于admin中action下拉列表加功能
      queryset.update(pirce=500)
      set_price.short_description = '修改价格为500'
    
    
    class BookAdmin(admin.ModelAdmin):  # 自己定义一个类
      list_display = ('id','name','price','pub_date')  # 列表显示字段
      list_editable = ('name', 'price')  # 设置列表显示的哪些字段可直接修改
      filter_horizontal = ('authors'),  # 设置作者多选字段可筛选
      list_per_page = 3  # 每页显示的记录数,默认为20
      search_fields = ('id', 'name', 'publish__name')  # 设置可按哪些字段进行搜索
      list_filter = ('pub_date', 'publish')  # 在右边出现一个根据定义的字段filter菜单
      ordering = ('puice',)  # 显示时以价格升序
      ordering = ('-price', 'id',)  #显示时以价格降序,第二排序字段为id升序
    
      actions = [set_price,]  # 向action下拉列表增加set_price功能
    
    admin.site.register(models.Author)  # 注册models中的表 admin.site.register(models.Book,BookAdmin) admin.site.register(models.Publish)
    # models.py
    
    form django.db import models
    
    class Book(models.Model):  # 表名book,django会自动使用项目名+我们定义的表名
      # 如没有自定义主键,django会自动添加一个主键,字段名id 自增
      name = models.CharField(max_length=20,verbose_name='书名')  # 在admin中显示字段名为书名
      price = models.IntegerField(‘价格’)   # 如果verbose_name设置为第一个参数,可不用写verbose_name
      pub_date = models.DateField()   # 字段名pub_date 类型 date (时间戳)
      publish = models.ForeighKey('Publish')  # 创建外键关联到Publish表的id字段,django会自动将该名称改为publish_id  
       # 如果这样写 publish = models.ForeighKey(Publish) 括号内无引号,则必须将Publish类放到Book类的上面
      authors = models.ManyToManyField('Author')  将book与author表做多对多关系
      # django会自动创建一张表(book与author的中间关联表)名称为appname_book_authors
       
      def __str__(self):
        return self.name  # 打印实例对象时显示为self.name
    
    
    #class Book_Author(models.Model):  自己创建第三张表
    #  book = models.ForeignKey('book')
    #  author = models.ForeignKey('Author')
    
    class Publish(models.Model):
      name = models.CharField(max_length=32)
      city = models.CharField(max_length=32)
    
    class Author(models.Model):
      name = models.CharField(max_length=32)
      age = models.IntegerField()
    
      def __str__(self):
        return self.name

    https://www.cnblogs.com/wumingxiaoyao/p/6928297.html   admin资料

    http://www.liujiangblog.com/course/django/158   自定义admin

    https://www.cnblogs.com/weiweifeng/p/8477833.html   自定义admin

    https://www.django.cn/course/show-16.html    自定义admin

    admin
    
    
    
    from django.contrib import admin
    
    # Register your models here.
    
    from .models import *
    
    from django.utils.safestring import mark_safe
    
    
    class BookConfig(admin.ModelAdmin):
    
        def deletes(self):
            return mark_safe("<a href=''>删111除</a>")
    
    
        list_display = ["title","price","publishDate",'publish',deletes]
        list_display_links = ["price"]
        list_filter=["price","title","authors","publish"]
        list_editable=["title",]
    
        search_fields=["title","price"]
        def patch_init(self,request,queryset):
    
            queryset.update(price=5500)
    
        patch_init.short_description = "批量初始化"
    
        actions = [patch_init,]
        # change_list_template="list.html"     # 可定制页面  模板
        fields = ('title',)
    admin.site.register(Book,BookConfig)
    admin.site.register(Publish)
    admin.site.register(Author)
    admin.site.register(AuthorDetail)


  • 相关阅读:
    C#使用Xamarin开发Android应用程序 -- 系列文章
    stealwatch里的安全功能——ETA结果会显示加密套件以及key长度,还有流量大小(例如41MB)
    钟平---逻辑英语的语法讲解
    python dpkt 解析 pcap 文件
    TOR的十个最好的替代工具
    tf.expand_dims 来增加维度
    安天透过北美DDoS事件解读IoT设备安全——Mirai的主要感染对象是linux物联网设备,包括:路由器、网络摄像头、DVR设备,入侵主要通过telnet端口进行流行密码档暴力破解,或默认密码登陆,下载DDoS功能的bot,运行控制物联网设备
    使用深度学习检测TOR流量——本质上是在利用报文的时序信息、传输速率建模
    利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
    算法培训
  • 原文地址:https://www.cnblogs.com/lovershowtime/p/11353293.html
Copyright © 2020-2023  润新知