zoukankan      html  css  js  c++  java
  • django (三) admin后台系统

    admin后台系统

    1. 安装MySQL

    1,安装mysql:
        sudo apt install mysql-server
        (安装过程中输入密码并牢记)
        
    2,安装后进入mysql:
        mysql -u用户名 -p密码
        mysql -uroot -proot
    3,在Django中配置和使用mysql数据库
    使用mysql数据库,settings中配置如下:
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'mydb',
                'USER': 'root',
                'PASSWORD': 'root',
                'HOST': '127.0.0.1',
                'PORT': '3306',
            }
        }
    4, 添加PyMySQL 
     然后使用pip添加依赖包: pip install PyMySQL
     并在工程目录下的__init__.py中添加以下代码来配置PyMySQL: 
        import pymysql
        pymysql.install_as_MySQLdb()
     

    2. django admin后台系统

    Django中默认集成了后台数据管理页面,通过简单的配置就可以实现模型后台的Web控制台。
    管理界面通常是给系统管理员使用的,用来完成数据的输入,删除,查询等工作。
    使用以下models来示范admin后台系统的用法。
    创建一个项目, 用来说明出版社, 书籍和作者的关系。
       假定关系:作者:书籍 => 1:n  (一本书由一个作者完成, 一个作者可以创作多本书)
              出版社:书籍 => n:n  (一个出版社可以出版多本书, 一本书可以由多个出版社出版)
    要求:
        1. 创建作者author, 出版社publisher,书籍book三个应用.
        2. 给每个应用分别创建首页index.html,且可以在浏览器打开index页面.
        3. 在书籍的index.html中有一个"查看所有书籍"的超链接按钮,点击进入书籍列表list.html页面.
        4. 在书籍list.html中显示所有书名,点击书名可以进入书籍详情detail.html
        5. 在书籍detail.html中可以点击该书的作者和出版社,进入作者的detail.html和出版社的detail.html页面
    models.py内容如下:
        # 出版社
        class Publisher(models.Model):
            name = models.CharField(max_length=30)
            address = models.CharField(max_length=100)
            city = models.CharField(max_length=30)
            state_province = models.CharField(max_length=30)
            country = models.CharField(max_length=20)
            website = models.URLField()
            
        # 作者
        class Author(models.Model):
            first_name = models.CharField(max_length=30)
            last_name = models.CharField(max_length=30)
            email = models.EmailField()
            gender = models.BooleanField(default=True)
        # 书籍
        class Book(models.Model):
            title = models.CharField(max_length=100)
            author = models.ForeignKey(Author)
            publishers = models.ManyToManyField(Publisher)
            publish_date = models.DateField()
    使用admin后台系统之前,需要先创建一个系统管理员,创建管理员之前需先同步数据库。
        python manager.py createsuperuser
    设置为中文
        settingsLANGUAGE_CODE = 'zh-hans'
    设置时间,时区
        TIME_ZONE='Asia/Shanghai'
    添加自己的数据模型,admin.py中注册: 
        admin.site.register(Publisher)
        admin.site.register(Author)
        admin.site.register(Book)
    admin中给model添加数据。
    给模型加上__str__函数,比如给Author模型添加str函数,让author的显示更加友好:
        def __str__(self):
            return '%s %s' % (self.first_name, self.last_name)
    希望控制admin中添加model数据时的动作,可以修改相应字段的属性。
    比如authoremail字段运行添加的时候为空,可以在email字段定义中加上 blank=True(可以空白),
    比如bookpublication_date添加 blank=True, null=True(可以为null)属性。
    修改models属性之后记得及时做数据迁移。
    使用verbose_name属性指定字段的别名:
        比如给publishername字段指定一个中文的别名verbose_name='出版社名称'
        models的修改页面,默认显示的是models定义的str函数返回的字符串。
                
     

    3. 定制admin

    通过定义MoldelAdmin来定制modeladmin的表现。比如给Author定义AuthorAdmin
        class AuthorAdmin(admin.ModelAdmin):
            list_display = ('first_name', 'last_name', 'email')
        相应的注册代码也要变化:
        admin.site.register(Author, AuthorAdmin)
    Author添加一个搜索框:
        search_fields = ('first_name', 'last_name')
    book添加一个过滤器
        list_filter = ('publication_date',)
        过滤器不光可以作用在日期字段上,还可以作用在boolean类型和外键上。
        另一种增加日期过滤的方式:
        date_hierarchy = 'publication_date'
    字段排序:
        ordering = ('-publication_date',)
    
    
    修改编辑页面显示的字段及显示顺序,默认按照models中字段的定义顺序显示:
        fields = ('title', 'authors', 'publisher', 'publication_date')
    fields相反的字段是exclude
        exclude = ['publication_date',] 
    改善多对多关系中对象选择操作,比如给BookAdmin添加如下属性:
        filter_horizontal = ('authors',)
    filter_horizontalfilter_vertical 选项只适用于多对多关系。
    一对多的外键关系,admin使用select box下拉菜单来表示。如不想用select box,可添加如下属性,让原来一次性加载所有publisherselect box变成填写publisherid
        raw_id_fields = ('publisher',)
    让字段分组显示,fieldsets和上面提到的field不能同时出现:
        fieldsets = (
            ('作者', {'fields': ('authors',)}),
            ('出版商', {'fields': ('publisher',)}),
        )
    定制list_display字段的显示。比如给Author加一个布尔型gender字段,来表示性别。为了让显示更加人性化:
        # 定制显示属性
        def showgender(self):
            if self.gender:
                return '男'
            else:
                return '女'
        list_display = ('first_name', 'last_name', 'email', showgender)
    给该函数设置简短描述,让显示更加友好:
        showgender.short_description = '性别'
    可以将modeladmin的属性简单划分为列表页属性和添加、修改页属性
    # 列表页属性
    list_display,list_filter,search_fields,list_per_page
    # 添加、修改页属性
    fields ,fieldsets, filter_horizontal, raw_id_fields
     
  • 相关阅读:
    [译文] 实体与值对象到底是不是一回事?
    实现 WebApi 自托管服务宿主于 WinForms 及其交互
    [译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
    [译文] 为什么你在 C# 里总是应该使用 "var" 关键字
    通过设置iis在局域网中访问网页
    windows 10 安装使用kafka
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
    Asp.net Core 2.0 OpenId Connect Handler缺失Claims?
  • 原文地址:https://www.cnblogs.com/gugubeng/p/9723360.html
Copyright © 2011-2022 走看看