关于“Python”Django 管理网站的核心知识点整理大全52

 

目录

注意

18.2.2 激活模型

settings.py

18.2.3 Django 管理网站

1. 创建超级用户

注意

2. 向管理网站注册模型

admin.py

注意

3. 添加主题

Climbing。

18.2.4 定义模型 Entry

models.py

18.2.5 迁移模型 Entry

18.2.6 向管理网站注册 Entry

admin.py

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


我们需要告诉Django,默认应使用哪个属性来显示有关主题的信息。Django调用方法 __str__()来显示模型的简单表示。在这里,我们编写了方法__str__(),它返回存储在属性text 中的字符串(见3)。


注意

如果你使用的是Python 2.7,应调用方法__unicode__(),而不是__str__(),但其中的代 码相同。


18.2.2 激活模型

要使用模型,必须让Django将应用程序包含到项目中。为此,打开settings.py(它位于目录 learning_log/learning_log中),你将看到一个这样的片段,即告诉Django哪些应用程序安装在项 目中:

settings.py
--snip--
INSTALLED_APPS = ('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
)
--snip--

这是一个元组,告诉Django项目是由哪些应用程序组成的。请将INSTALLED_APPS修改成下面 这样,将前面的应用程序添加到这个元组中:

--snip--
INSTALLED_APPS = (--snip--'django.contrib.staticfiles',# 我的应用程序'learning_logs',
)
--snip--

通过将应用程序编组,在项目不断增大,包含更多的应用程序时,有助于对应用程序进行跟 踪。这里新建了一个名为My apps的片段,当前它只包含应用程序learning_logs。 接下来,需要让Django修改数据库,使其能够存储与模型Topic相关的信息。为此,在终端 窗口中执行下面的命令:

(ll_env)learning_log$ python manage.py makemigrations learning_logs
Migrations for 'learning_logs':0001_initial.py:- Create model Topic
(ll_env)learning_log$ 

命令makemigrations让Django确定该如何修改数据库,使其能够存储与我们定义的新模型相 关联的数据。输出表明Django创建了一个名为0001_initial.py的迁移文件,这个文件将在数据库中 为模型Topic创建一个表。 下面来应用这种迁移,让Django替我们修改数据库:

(ll_env)learning_log$ python manage.py migrate
--snip--
Running migrations:Rendering model states... DONE
1 Applying learning_logs.0001_initial... OK

这个命令的大部分输出都与我们首次执行命令migrate的输出相同。我们需要检查的是1处的 输出行,在这里,Django确认为learning_logs应用迁移时一切正常(OK)。 每当需要修改“学习笔记”管理的数据时,都采取如下三个步骤:修改models.py;对 learning_logs调用makemigrations;让Django迁移项目。

18.2.3 Django 管理网站

为应用程序定义模型时,Django提供的管理网站(admin site)让你能够轻松地处理模型。网 站的管理员可使用管理网站,但普通用户不能使用。在本节中,我们将建立管理网站,并通过它 使用模型Topic来添加一些主题。

1. 创建超级用户

Django允许你创建具备所有权限的用户——超级用户。权限决定了用户可执行的操作。最严 格的权限设置只允许用户阅读网站的公开信息;注册了的用户通常可阅读自己的私有数据,还可 查看一些只有会员才能查看的信息。为有效地管理Web应用程序,网站所有者通常需要访问网站 存储的所有信息。优秀的管理员会小心对待用户的敏感信息,因为用户对其访问的应用程序有极 大的信任。 为在Django中创建超级用户,请执行下面的命令并按提示做:

(ll_env)learning_log$ python manage.py createsuperuser
1 Username (leave blank to use 'ehmatthes'): ll_admin
2 Email address:
3 Password:
Password (again):
Superuser created successfully.
(ll_env)learning_log$ 

你执行命令createsuperuser时,Django提示你输入超级用户的用户名(见1)。这里我们输 入的是ll_admin,但你可以输入任何用户名,比如电子邮件地址,也可让这个字段为空(见2)。 你需要输入密码两次(见3)。


注意

可能会对网站管理员隐藏有些敏感信息。例如,Django并不存储你输入的密码,而存储 从该密码派生出来的一个字符串——散列值。每当你输入密码时,Django都计算其散列 值,并将结果与存储的散列值进行比较。如果这两个散列值相同,就通过了身份验证。 通过存储散列值,即便黑客获得了网站数据库的访问权,也只能获取其中存储的散列值, 而无法获得密码。在网站配置正确的情况下,几乎无法根据散列值推导出原始密码。


2. 向管理网站注册模型

Django自动在管理网站中添加了一些模型,如User和Group,但对于我们创建的模型,必须 手工进行注册。 我们创建应用程序learning_logs时,Django在models.py所在的目录中创建了一个名为 admin.py的文件:

admin.py
from django.contrib import admin
# 在这里注册你的模型

为向管理网站注册Topic,请输入下面的代码:

from django.contrib import admin
1 from learning_logs.models import Topic
2 admin.site.register(Topic)

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

现在,使用超级用户账户访问管理网站:访问http://localhost:8000/admin/,并输入你刚创建 的超级用户的用户名和密码,你将看到类似于图18-2所示的屏幕。这个网页让你能够添加和修改 用户和用户组,还可以管理与刚才定义的模型Topic相关的数据。


注意

如果你在浏览器中看到一条消息,指出访问的网页不可用,请确认你在终端窗口中运行 着Django服务器。如果没有,请激活虚拟环境,并执行命令python manage.py runserver。


3. 添加主题

向管理网站注册Topic后,我们来添加第一个主题。为此,单击Topics进入主题网页,它几乎 是空的,这是因为我们还没有添加任何主题。单击Add,你将看到一个用于添加新主题的表单。 在第一个方框中输入Chess,再单击Save,这将返回到主题管理页面,其中包含刚创建的主题。

下面再创建一个主题,以便有更多的数据可供使用。再次单击Add,并创建另一个主题Rock Climbing。当你单击Save时,将重新回到主题管理页面,其中包含主题Chess和Rock

Climbing。

18.2.4 定义模型 Entry

要记录学到的国际象棋和攀岩知识,需要为用户可在学习笔记中添加的条目定义模型。每个 条目都与特定主题相关联,这种关系被称为多对一关系,即多个条目可关联到同一个主题。 下面是模型Entry的代码:

models.py
from django.db import models
class Topic(models.Model):--snip--
1 class Entry(models.Model):"""学到的有关某个主题的具体知识"""
2 topic = models.ForeignKey(Topic)
3 text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
4 class Meta:verbose_name_plural = 'entries'def __str__(self):"""返回模型的字符串表示"""
5 return self.text[:50] + "..."

像Topic一样,Entry也继承了Django基类Model(见1)。第一个属性topic是一个ForeignKey实 例(见2)。外键是一个数据库术语,它引用了数据库中的另一条记录;这些代码将每个条目关联 到特定的主题。每个主题创建时,都给它分配了一个键(或ID)。需要在两项数据之间建立联系时, Django使用与每项信息相关联的键。稍后我们将根据这些联系获取与特定主题相关联的所有条目。

接下来是属性text,它是一个TextField实例(见3)。这种字段不需要长度限制,因为我们 不想限制条目的长度。属性date_added让我们能够按创建顺序呈现条目,并在每个条目旁边放置 时间戳。

在4处,我们在Entry类中嵌套了Meta类。Meta存储用于管理模型的额外信息,在这里,它让 我们能够设置一个特殊属性,让Django在需要时使用Entries来表示多个条目。如果没有这个类, Django将使用Entrys来表示多个条目。最后,方法__str__()告诉Django,呈现条目时应显示哪些 信息。由于条目包含的文本可能很长,我们让Django只显示text的前50个字符(见5)。我们还 添加了一个省略号,指出显示的并非整个条目。

18.2.5 迁移模型 Entry

由于我们添加了一个新模型,因此需要再次迁移数据库。你将慢慢地对这个过程了如指掌: 修 改models.py,执行命令python manage.py makemigrations app_name,再执行命令python manage.py migrate。 下面来迁移数据库并查看输出:

(ll_env)learning_log$ python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
1 0002_entry.py:- Create model Entry
(ll_env)learning_log$ python manage.py migrate
Operations to perform:--snip--
2 Applying learning_logs.0002_entry... OK

生成了一个新的迁移文件——0002_entry.py,它告诉Django如何修改数据库,使其能够存储 与模型Entry相关的信息(见1)。执行命令migrate,我们发现Django应用了这种迁移且一切顺利 (见2)。

18.2.6 向管理网站注册 Entry

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

admin.py
from django.contrib import admin
from learning_logs.models import Topic, Entry
admin.site.register(Topic)
admin.site.register(Entry)

返回到http://localhost/admin/,你将看到learning_logs下列出了Entries。单击Entries的Add链接, 或者单击Entries再选择Add entry。你将看到一个下拉列表,让你能够选择要为哪个主题创建条目, 还有一个用于输入条目的文本框。从下拉列表中选择Chess,并添加一个条目。下面是我添加的 第一个条目。

The opening is the first part of the game, roughly the first ten moves or so. In the opening, it’s a good idea to do three things— bring out your bishops and knights, try to control the center of the board, and castle your king.(国际象棋的第一个阶段是开局,大致是前10步左右。在开局阶 段,最好做三件事情:将象和马调出来;努力控制棋盘的中间区域;用车将王护住。)

Of course, these are just guidelines. It will be important to learn when to follow these guidelines and when to disregard these suggestions.(当然,这些只是指导原则。学习什么 情况下遵守这些原则、什么情况下不用遵守很重要。) 当你单击Save时,将返回到主条目管理页面。在这里,你将发现使用text[:50]作为条目的 字符串表示的好处:管理界面中,只显示了条目的开头部分而不是其所有文本,这使得管理多个 条目容易得多。 再来创建一个国际象棋条目,并创建一个攀岩条目,以提供一些初始数据。下面是第二个国 际象棋条目。

In the opening phase of the game, it’s important to bring out your bishops and knights. These pieces are powerful and maneuverable enough to play a significant role in the beginning moves of a game.(在国际象棋的开局阶段,将象和马调出来很重要。这些棋子威力大, 机动性强,在开局阶段扮演着重要角色。) 下面是第一个攀岩条目: One of the most important concepts in climbing is to keep your weight on your feet as much as possible. There’s a myth that climbers can hang all day on their arms. In reality, good climbers have practiced specific ways of keeping their weight over their feet whenever possible. (最重要的攀岩概念之一是尽可能让双脚承受体重。有谬误认为攀岩者能依靠手臂的力 量坚持一整天。实际上,优秀的攀岩者都经过专门训练,能够尽可能让双脚承受体重。) 继续往下开发“学习笔记”时,这三个条目可为我们提供使用的数据。


关于“Python”的核心知识点整理大全37-CSDN博客

关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310564.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fastjosn利用分析

fastjosn一般是使用TemplatesImpl链来进行攻击的,在上面其实已经分析过fastjson在反序列化的时候会调用满足条件的getter方法,因此就会调用TemplatesImpl类的getOutputProperties方法,然后通过getOutputProperties,调用newTransfo…

Qt QAction添加图片

QAction用的时候,时常需要添加图片,如上图所示,代码如下所示: 测试的图片格式包含png,jpg,bmp,svg,其他未测试

Solidworks学习笔记

本内容为solidworks的学习笔记,根据自己的理解进行记录,部分可能不正确,请自行判断。 学习视频参考:【SolidWorks2018视频教程 SW2018中文版软件基础教学知识 SolidWorks自学教程软件操作教程 sw视频教程 零基础教程 视频教程】 h…

【GOLANG】使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置

直接 使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置 1、简单安装 Goanno 插件 File->Settings->Plugins , 搜索 Goanno Normal Method 配置内容如下: // Title ${function_name} // Description ${todo} // Author mumu ${date} ${time} // Par…

Ps:亮度蒙版 - 多层级 Alpha 通道方法

本文主要介绍创建高光、阴影、中间调选区的方法,并可基于它们创建更多层级的 Alpha 通道,从而根据需要自由地创建亮度蒙版。 应用视频演示 以下方法中,依据高光、阴影及中间调各创建三个层次的 Alpha 通道,总共九个 Alpha 通道可用…

华为交换机生成树STP配置案例

企业内部网络怎么防止网络出现环路?学会STP生成树技术就可以解决啦。 STP简介 在二层交换网络中,一旦存在环路就会造成报文在环路内不断循环和增生,产生广播风暴,从而占用所有的有效带宽,使网络变得无法正常通信。 在…

探索 Pinia:简化 Vue 状态管理的新选择(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

HackTheBox - Medium - Linux - Interface

Interface Interface 是一种中等难度的 Linux 机器,具有“DomPDF”API 端点,该端点通过将“CSS”注入处理后的数据而容易受到远程命令执行的影响。“DomPDF”可以被诱骗在其字体缓存中存储带有“PHP”文件扩展名的恶意字体,然后可以通过从其…

24、Web攻防-通用漏洞SQL注入MYSQL跨库ACCESS偏移

文章目录 一、SQL注入原理   脚本代码在与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),使用预定义的SQL查询语句进行数据查询。能通过参数传递自定义值来实现SQL语句的控制,执行恶意的查询操作,例如查询…

(001)Unit 编译 UTF8JSON

文章目录 编译 Dll编译报错附录 编译 Dll 新建工程: 注意 UnityEngineDll 的选择!2022 版本的太高了!!! 下载包,导入unity : 3. 将 unf8json 的源码拷贝到新建的工程。 4. 编译发布版本: 编译…

每日一练:LeeCode-20. 有效的括号(简)【栈】

本文是力扣LeeCode-20. 有效的括号 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s &#xff0…

设计模式(4)--类行为(10)--模板方法

1. 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2. 两种角色 抽象类(Abstract Class)、具体类(Concrete Class) 3. 优点 3.1 一种代码复用的基本技术。提取公共行为&am…