温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Django web开发系列(三)模型与管理后台

发布时间:2020-06-23 22:08:06 来源:网络 阅读:934 作者:平山 栏目:编程语言

一 前言

在第(二)节介绍了模型Book的设计,实质就是在models.py里写了一个Book类,定义了变量和元数据,也就是设计数据库里对应的表应该长什么样子。就如前面所说,你可以将定义的模型类理解成数据库的一张表,类的实例对象理解成表中一行数据,类中的变量对应表中字段。Python奉行代码优先的理念,通过定义模型类,实现python代码与数据库操作的解耦,即使Python开发者不会数据库SQL,也能轻松完成数据库操作。


模型类定义完后,如何实现在数据库生成对应的表呢?如何通过Django后台管理模型呢?这就是本节要回答的问题。


二 模型迁移

迁移(migration),是一个将models.py定义的模型类映射到数据库并生成数据表的动作,主要涉及两个命令:

python manage.py makemigrations
python manage.py migrate


命令说明:

1. 该命令的执行位置是在manage.py文件的同级目录;
2. 命令顺序执行,即先执行makemigrations,完成后,再执行migrate;
3. Django默认使用SQLlite,不需要做任何配置,但如果使用的其他数据库,需要预先在项目的settings.py配置、指定数据库;

可能你会疑惑,迁移为什么要搞成两步呀?
原因是这样的
makemigrations命令,带着make,该动作只是将模型改动生成到文件,默认是在项目的migrations目录下,注意此时只是生成了一个可读可编辑的文本文件,并没有对数据库进行改动,这样做的目的是,便于通过版本控制系统(如git、svn)记录、同步你对模型的修改,毕竟版本控制系统是无法和数据库打交道的。有了中间记录,就可以放心的使用migrate将改动同步到数据库了。


三 通过Admin后台管理模型

Django的省心之处就是它会基于项目模型创建一套简易的后台管理系统,通过该系统可以方便的对模型进行增删改查,虽然也被很多人诟病,Django太重、集成度太强,但既然有现成的、省事儿的,为啥还要自己造轮子呢?!

进入Admin后台管理的步骤如下:

1. 首次登录,创建一个admin站点用户,命令如下:

python manage.py createsuperuser


根据提示输入用户名、邮箱地址、密码即可。

2. 启动服务器,命令如下:

python manage.py runserver 127.0.0.1:8000


IP:端口根据实际修改,启动后,浏览器访问http://127.0.0.1:8000/admin/,就会看到管理后台界面,如图:

Django web开发系列(三)模型与管理后台
上图中管理后台登录界面的站点名字已经被我从默认的Django Administration改成图书借阅管理系统了,后面会介绍如何改。

3. 在amdin.py中使用admin.site.register()注册模型

from django.contrib import admin
from django.contrib.auth.models import Group,User as AdminUser
from .models import Book,User,ValidUser
# Register your models here.
admin.site.register(Book)


注意:
只有注册的模型才会出现在admin后台管理系统。

4. 再次进入管理后台界面,发现模型book已经出现在管理后台,如图:

Django web开发系列(三)模型与管理后台

此时,你可能会发现模型名字怎么变成图书了,还记得在(二)节中设计模型用的verbose_name = '图书'吧,就是这个效果。


四 定制Admin后台

通过上述步骤,已经可以在admin管理后台看到定义的模型了,后台页面显示和布局都是默认的,Django提供了ModelAdmin类实现对模型展示的定制,如下是对BOOK模型进行的简单定制:

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('book_name','author_name','total_num','available_num','book_img')
    #readonly_fields = ('book_name','author_name','total_num','available_num')
    search_fields = ('book_name','author_name')
    list_filter = ['available_num']
    list_per_page = 10
    admin.AdminSite.site_header = '图书借阅管理系统'
    admin.AdminSite.site_title = '管理后台'


说明:
1. 直接可以按照以上代码套路定制自己的后台,首先定义一个ModelAdmin的子类BookAdmin,在该子类里定制展示效果和特性,同时使用admin.register装饰器,接收的参数就是需要定制的模型;
2. 常用定制字段说明如下:
   1) list_display: 显示在页面的字段;
   2)readonly_fields: 指定哪些字段是只读类型;
   3)search_fields: 在页面添加搜索框,且指定按哪些字段进行搜索;
   4)list_per_page: 设置每页显示多少个对象,如果超过,会进行分页;
   5)admin.AdminSite.site_header:设置站点页头
   6)admin.AdminSite.site_title: 设置页面标题
   7)list_filter:过滤页面元素

简单定制后,效果如下:

Django web开发系列(三)模型与管理后台

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI