文章目录
一、admin管理后台简介二、设置语言和时区三、admin管理后台的使用1. 创建超级用户(管理员)2. 打开admin管理后台3. 关联对象的显示方法 四、`null`和`blank`参数的区别一、admin管理后台简介
admin管理后台是django自带的一个组件,它给我们提供了一个管理项目的后台站点,打开该站点,就可以通过图形界面方便的管理项目数据。在项目创建好后,就是默认启用的。
在settings.py中,可以看到它是默认注册好的:
INSTALLED_APPS = ['django.contrib.admin', # admin 管理后台'django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',]
而在项目的urls.py中,定义了访问admin管理后台的 url :
from django.contrib import adminfrom django.urls import pathurlpatterns = [path('admin/', admin.site.urls) # 访问 admin管理后台的路径,该路径可以自由设置]
二、设置语言和时区
django admin管理后台默认显示的语言是英语,时区是协调世界时(UTC),与我们的语言和时区不符合。
为了让 admin管理后台显示中文和使用北京时间,我们要在settings.py中设置语言和时区:
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai' # 没写错,是上海,不是北京
这样 admin管理后台就会显示中文,并使用北京时间。
三、admin管理后台的使用
1. 创建超级用户(管理员)
首先要创建管理员,普通用户默认无法登录admin管理后台。
在终端中运行命令:
python manage.py createsuperuser
按照提示输入用户名、邮箱、密码即可完成创建。
2. 打开admin管理后台
运行django项目,然后打开127.0.0.1/admin/
,就进入了admin管理后台的登录页面,输入管理员账户和密码即可登录。
此时,由于我们没有向后台注册任何模型,所以只有一个django自带的“认证和授权”:
想要管理其他模型,只需要在app文件夹下的apps.py中注册模型:
from django.contrib import adminfrom . import models# Register your models here.admin.site.register(models.UserInfo)admin.site.register(models.Blog)admin.site.register(models.Article)……
重新打开admin管理后台:
注意:
“APP01”是app的名称,想要修改,可以在app文件夹下的apps.py中修改:
from django.apps import AppConfigclass App01Config(AppConfig):default_auto_field = 'django.db.models.BigAutoField'name = 'app01'verbose_name = '低仿博客园' # 设置该属性
“Blogs”是模型类的类名加“s”,想要修改,可以在对应的模型类中写入:
class Blog(models.Model):……class Meta:verbose_name = '博客' # 单数形式verbose_name_plural = '博客' # 复数形式
更多Meta的功能请参考官方文档:传送门
最后的“用户”,是因为我们的用户模型继承了django的AbstractUser
类,所以django直接起了个中文名字叫“用户”。
上述内容修改完毕后的效果:
之后就可以在admin管理后台,通过图形界面操作数据了
3. 关联对象的显示方法
在设置外键字段关联对象时,会显示“XXX object (X)”,可读性很差,完全不知道该对象是哪一个。
比如,在个一篇文章设置所属博客和所属分类时:
如果想修改显示的内容,就需要在模型类中定义__str__
方法,提高可读性:
class Blog(models.Model):"""博客"""site_name = models.CharField(verbose_name='博客名称', max_length=32)……def __str__(self):return self.site_nameclass Category(models.Model):"""文章分类"""category_name = models.CharField(verbose_name='文章分类', max_length=12)……def __str__(self):return self.category_name
添加之后的效果:
四、null
和blank
参数的区别
在设置某些字段时,明明定义了null=True
,却还是不能留空。这是因为该模型字段没有设置blank=True
。
null
:
如果设置为True
,当该字段为空时,Django 会将数据库中该字段设置为NULL
。默认为False
。
blank
:
如果设置为True
,该字段允许为空。默认为False
。
blank
与null
的 不同:
null
选项仅仅是数据库层面的设置,它只是允许了数据库字段可以为空;而blank
是涉及表单验证方面。如果一个字段设置为blank=True
,在进行表单验证时,接收的数据该字段值允许为空,而设置为blank=False
时,不允许为空。