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
     
  • 相关阅读:
    ffmpeg-3.2.4-static-win32-for-XP-bin.tar.xz
    FFmpeg Scaler Options
    MinGW GCC 6.3.0 2017年3月份出炉啦
    ffmpeg-201701[10,16,21,23,25]-bin.7z
    ffmpeg-201612[01,08,10,17,21,27,30]-bin.7z
    Firefox Portable Developer 52.0.0.6176-6178
    DIR 按文件名中数字大小进行排序
    ffmpeg-20161104[07,10,16,21,22,27,30]-bin.7z
    gnuWin32-mini-2016.10.30
    gnu coreutils-8.25 for win32 static
  • 原文地址:https://www.cnblogs.com/gugubeng/p/9723360.html
Copyright © 2011-2022 走看看