Django提供的管理网站(admin site) 让你能轻松的处理模型,网站的管理员可使用管理网站,而普通用户不能

创建超级用户

python manage.py createsuperuser

XXXXX

当你执行createsuperuser时,Django会提示你属于用户名

这里输入的用户名我用XXXXX代替,但你可以输入任何用户名,电子邮件地址(也可以让这个字段为空),并且密码你需要输入两次用以确认

Username (leave blank to use 'administrator'): XXXX
Email address:
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
This password is entirely numeric.
Bypass password validation and create user anyway? [y/N]: y
由于我输入的密码短于8个字符,所以Django会提示你是否确认忽略警告?如果输入Y,用户则创建,否则返回重新输入


Django并不存储你输入的密码,而存储从该密码派生出来的一个字符串--散列值

每当你输入密码时,Django都计算其散列值,并将结果与存储的散列值进行比较,如果这两个数值相同,就通过了身份验证

通过存储散列值,即便黑客获得了网站的数据访问权,也只能获取其中存储的散列值,而无法获得密码.

在网站配置正确的情况下,几乎无法根据散列值推导出原始密码


向管理网站注册模型

Django自动在管理网站中添加了一些模型,例如User和Group,但对于我们创建的模型,必须手动进行注册

我们创建应用程序learning_logs时,Django在models.py所在的目录创建了一个名为admin.py的文件

现在我们打开并修改它:


from django.contrib import admin

# Register your models here.
from learning_logs.models import Topic
admin.site.register(Topic)

    这些代码导入我们要注册的模型Topic再使用admin.site.register()让Django通过管理网站管理我们的模型

    现在使用超级用户访问管理网站localhost:8000/admin/ 并输入你创建的超级账户,这个网页让你能够添加和修改用户和用户组,还可以管理与刚才定义的模型Topic相关的数据


    添加主题

        向管理网站注册Topic后,我们来添加第一个主题,为此单机Topics进入主题网页,他几乎是空的(经我测试:他就是空的,没有几乎)这是因为我们还没有添加任何主题,单击Add你将看到一个用于添加新主题的表单

在第一个命名的方框内我们输入Chess再点击Save

        此时你就返回了管理页面,其中包含刚刚创建的主题,下面再创建一个主题,以便有更多的数据可供使用,再次点击Add并创建另一个主题RockClimbing,当你单击Save时,又回到了主题管理页面,其中包含了你刚才创建的2个主题


定义模型 Entry

要写入一些东西,需要为用户可在笔记中添加的条目定义一个模型,每个条目都与特定的主题相关联,这种关系被称为 多对一关系(很混乱吧?不过我猜你很喜欢.)即多个条目可关联到同一个主题

下面是模型Entry的代码:

models.py


以前的内容

--snip--我是分割线

class Entry(models.Model):

#学到的有关某个主题的具体知识

    topic = models.Foreignkey(topic,on_delete=models.CASCADE)
    text = models.TextField()

    date_added = models.DateTimeField(auto_now_add=True)



    class Meta:

        verbose_name_plural = 'entries'

        

        def __str__(self):

        #返回模型的字符串

        return self.text[:50]+"..."



和Topic一样,Entry也继承了Django基类Model,第一个属性topic是一个Foreignkey实例,外键是一个数据库术语,他引用了数据库中的另一条记录

这些代码将每个条目关联到特定的主题,每个主题创建时都给他分配了一个键(ID),需要在两项数据之间建立联系时,Django使用与没想信息相关联的键

接下来是属性text 他是一个TextField实例,这种字段不需要长度限制,因为我们不想限制字符长度

属性date_added让我们能够按创建顺序呈现条目,并在每个条目旁放置时间戳.


    我们还嵌套了一个Meta类,存储用于管理模型的额外信息,在这里他让我们能够设置一个特殊属性,让Django在需要时使用Entries来表示多个条目

如果没有这个类,Django将使用Entrys来表示多个条目,最后方法__str__()告诉Django呈现条目时应显示哪些信息.由于条目包含的文本可能很长,我们

让Django只显示text的前50个字符,我们还添加了省略号,代表显示的并非整个条目.


修改模型Entry

    由于我们添加了一个新的模型,因此需要再次修改数据库,你将慢慢滴对这个过程了如指掌,修改models.py后,执行如下命令:

(ll_env) C:\Users\Administrator\learning_log>python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
  learning_logs\migrations\0002_entry.py
    - Create model Entry

(ll_env) C:\Users\Administrator\learning_log>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, learning_logs, sessions
Running migrations:
  Applying learning_logs.0002_entry... OK


看,他生成了一个新的迁移文件   0002_entry.py

他告诉Django如何修改数据库,使其能够存储于模型Entry相关的信息,执行命令migrate我们发现Django应用了这种迁移且一切顺利.


向管理网站注册 Entry

我们还需要注册模型Entry 因此 需要将admin.py修改成类似于下面这样

from...以前的不管

from learning_logs.models import Topic,Entry

admin...以前的不管

admin.site.register(Entry)


现在返回后台的管理界面 你讲看到learning_logs下列出了Entries(如果没有,注意浏览器缓存)

单机Entries的Add链接你将看到一个下拉列表,让你能够选择要为哪个主题创建条目,还有一个用于输入条目的文本框,从下拉列表中选择chess创建一些条目文章


最后修改:2022 年 12 月 05 日
如果觉得我的文章对你有用,请随意赞赏