数据工厂平台-3:首页超链接

简介: 上一节我们成功搞定了首页的展示。但是其中并没有加入任何数据,也就是仅仅展示了html模版而已,本节课我们要加入数据,那么具体是什么数据呢?按照比较成功的经验,首页放入公司内的各种超链接比较好,容易让使用者产生依赖和粘性。

 那么这些超链接我们从哪拿呢?当然是从数据库拿了。既然我们如此设计,那么第一步,就是去数据层设计数据表的结构。django默认自带sqlite3 数据库,它和sql数据库基本一致,只是轻量级,无需部署启动数据库服务等。

   但是django操作这个数据库的时候,把各种sql语句都封装成了一些功能函数,这个过程就是传说中的orm,不清楚的小伙伴可以自行百度。

   也就是说,我们之后无论是建表改表,新增数据,查询数据等,都并不是用传统的sql语句,而是简单的运用orm的内置方法即可,这样的好处是简单高效 又安全。

   好,我们来进行第一步,建表,这个表就是用来存放首页超链接的。那么去拿操作orm来创建表呢?很简单,去myapp下的models.py就可以了,它里面写的就会被orm当作表结构了。

   初次打开,我们发现,这个文件下什么都没有,所以要靠我们自己创建。我们怎么创建呢?其实每张表,在这个文件下,都是一个class类,类变量就是表的字段。

微信图片_20220705225055.png

如图,我创建的这个叫DB_links的类,就是一张表,其中俩个参数 名字和url, CharField意思是字段是字符串格式,括号内写的约束,比如最大长度,是否可以为空,是否可以为空字符串。最后__str__ 方法是在django后台管理这张表的时候,每行数据所展示给你的标志类似于视图,这里用链接名字作为展示。


写完这个设置后,我们如果想在django后台直接管理它,就必须再去admin.py中进行注册这张表,方法很简单:

微信图片_20220705225120.png

admin.site.register方法 传入类名 即 表名,即可成功注册。


再然后我们还需要 执行俩个命令,同步表结构和生效命令。如果不执行,那么django 并不会去让你models.py中的设置去让sqlite3数据库中发生改变。

命令如下,我们直接在pycharm的终端执行这俩个命令。

微信图片_20220705225126.png

现在我们已经成功创建了这个超链接的表,那么就去django后台给它增加俩三条数据,以便我们后续开发用。


那么现在的问题是django后台是什么?怎么进?

django后台是django自带的控制管理 平台用户和数据的 一个页面。进入的路是什么呢?还记得我们urls.py中抄的那个人家自己生成的例子么?

微信图片_20220705225132.png

没错,这个admin就是后台的路由。现在启动服务,进入首页。我们在浏览器中,在host:port 后面加入admin。就进去了:

微信图片_20220705225139.png

结果发现需要登陆。

微信图片_20220705225145.png

这里需要的很明显,是一个管理员账号,普通用户肯定无法登陆。我们作为程序开发者,当然可以创建一个超级管理员账号了。创建是通过命令创建,命令如下:python3 manage.pycreatesuperuser微信图片_20220705225525.png

然后我们重启服务 去后台试试登陆:

登陆成功了,我们看到了 用户 和 组 这俩个自带表。还有我们自己设置的myapp下的这个 DB_links 表,它会默认首字母大写并在最后加s,不用管它。

微信图片_20220705225530.png

我们点击进入Db_linkss ,现在是0个数据,我们点击右上角按钮,增加一条

微信图片_20220705225535.png

微信图片_20220705225540.png微信图片_20220705225546.png

创建完后如下:

微信图片_20220705225552.png

到此,我们俩条超链接创建成功了。


然后我们要去views.py中,找到进入首页的那个函数(现在也只有这个函数) ,给所有的超链接 加入到返回给前端的render函数。

微信图片_20220705225557.png


请新学者,仔细记住这几个地方,怎么从数据表中拿出数据,并加入到render里,作为一个字典中一个key的value。


那么我们现在已经成功给前端html带去了要展示的数据。要怎么显示呢?

当然就去html模版里去 写显示的代码啊。 记住,现在所有的超链接都被塞入了这个叫all_links的变量中。


我们打开home.html,在里面初次显示这个all_links:

微信图片_20220705225603.png

然后我们 重启服务,刷新页面看看效果:

微信图片_20220705225610.png

可以看到,这俩个超链接已经成功显示了,上面的文案就是我在models.py中设置的def __str__ 的返回,即link_name。


不过这样的显示效果,并不是我们想要的。我们要的是超链接。超链接是什么样的呢?它是用a 作为标签头  包裹的。比如我写死一个看看:

微信图片_20220705225617.png

效果如下:

微信图片_20220705225623.png

点击它就会跳转到那个url:

微信图片_20220705225628.png

好,我们现在删除这个例子超链接,想办法让我们的all_links中的数据全部变成这样a标签包裹的 格式。


最简单的办法就是用for循环,遍历all_links,循环体就是把每一个超链接都放在一个a标签模版里。


那么我们这个for循环 怎么写呢?有俩种写法,一种是很原始的写法:

微信图片_20220705225634.png

其中的 i就是每一个超链接数据,i.link_url就是超链接的url, i.link_name就是名字,这些都属于变量,所以必须用{{ }} 包裹起来。

效果如下:

微信图片_20220705225640.png

点击即可进入对应url。

不过这种写法比较古老,博主答应大家采用新的vue框架进行开发前端页面,使用vue写法之前,我们需要先下载vue,这里有俩种方案:

第一种:轻量级的使用,去官网下载vue.js 然后放入我们django项目的/static/静态资源目录下,然后在html模版中引用即可使用vue。

第二种:用npm下载vue和其组建,然后用vue创建一个前端项目,此项目和django项目基本同级,可进行前后端分离的大型方案。


   那么本教程,为减少初学者的坑和部署问题,考虑到数据工厂的应用和开发者基本只有一人的情况下,采用了第一种轻量级的方案。这样新读者可以更快速简单的了解和使用vue,而不是90%都卡在了部署和理解上,毕竟学习要一步一步来,0基础的同学第一次就打造企业级的大型项目,估计一个部署就被打击的体无完肤了。

   而如果已经有一定基础的读者,那么可以自行去使用第二种方案打造一个企业级的平台,这样同样可以在本教程中得到设计的灵感和其他细节等技术知识,因为本教程的整个重后台轻前端的设计中,vue占总技术含量的比并不多。

   

   现在我们开始打开vue的官网https://cn.vuejs.org/v2/guide/在学习-教程 中,直接看到这个引用代码:

微信图片_20220705225645.png

 这是一个引用链接,用的是cdn加速的。当然我们后续也可以把它下载到本地使用,不过我们前期还是简单点,直接复制这句 到我们的home.html中的head标签里。

微信图片_20220705225650.png

这样,我们每次进入这个home页面,都会去这个网址去请求到vue的完整资源,所以要保证电脑网络哦~


在具体开始vue使用之前,我们先来了解下下面 的土话解释html基本构成)

( 什么是script呢?其实你可以理解为在html模版里写的js动作脚本代码的标签,里面的内容和python差不多但不是python。比如你写一句类似python的代码在home.html中,你为了不让这句代码显示到网页,而能真实的运行实现作用,所以要用script标签包裹起来。这属于前端开发的基础,大家不明白的可以自行查阅。

一个网页,有俩大部分,head和body,head处理各种引用,全局,表头设置等。body是网页具体内容。

那么什么是dom 和 bom 呢?

你可以理解为 除了script标签外,在body标签内的其他各种如超链接,按钮,输入框等等标签。dom 其实就是document的简称,即文档对象


而script标签内的就是可运行的实际js/jq/vue脚本了,我们叫做bom。其实就是browser object model的简称,就是浏览器对象,意思是操作浏览器和浏览器互通api的部分。


比如下面这个

微信图片_20220705225656.png

之后我会常用这个概念 进行阐述。请牢记。


接下来我们来明白什么是vue:

为什么都喜欢用?其实就是前端的数据和展示等绑定处理上非常方便简单,本质是对复杂麻烦的js/jq进行封装的一个框架。所以一个vue元素,基本都包含着具体文档标签dom 和 对应的script即bom。


   而根据其数据双向绑定的优点,所以我们从后端拿来的数据,是要放在bom中使用的。而刚刚写的传统方式,是把后台来的数据放到了dom层直接用{{ }} 来使用的。

   既然vue的数据是要放在bom 也就是script内进行使用,那么整个数据从后端起就要更改格式!为什么呢?因为我们目前的数据直接从数据库拿出来的是一个查询集,又叫queryset格式,它并不是传统代码认识的格式,不是list列表,里面的也不是dict字典,只是看起来像,并且可以和列表一样遍历,和字典一样拿值罢了。在html模版的bom即script里,直接用queryset格式,肯定是不行的,它无法解析出来。

   

   那么怎么解决呢?有俩种方案:

  1. 虽然bom无法解读,但是dom可以,我们可以弄一个隐藏的input输入框dom,把数据放在其中,经过这么一洗,bom层就可以直接拿出来使用了。但是这个方法很low,会被别人笑话,属于博主之前自己摸索出来的曲线救国的套路。
  2. 在后台加入数据给html模版时候,就不要加入queryset格式的,加入一个正常的列表套字典 最好,然后html模版的bom层就可以直接使用这个列表了。


综上我们选择,第二种方案:

打开views.py,修改成如下样子:

微信图片_20220705225702.png

修改成list列表后,我们正式回到html模版,可以放心的开始vue的循环体超链接写法了

相关文章
|
6天前
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
|
5天前
|
关系型数据库 分布式数据库 数据库
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
PolarDB分布式版助力《香肠派对》实现百亿好友关系20万QPS的毫秒级查询。
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
|
7天前
|
消息中间件 Cloud Native Serverless
RocketMQ 事件驱动:云时代的事件驱动有啥不同?
本文深入探讨了云时代 EDA 的新内涵及它在云时代再次流行的主要驱动力,包括技术驱动力和商业驱动力,随后重点介绍了 RocketMQ 5.0 推出的子产品 EventBridge,并通过几个云时代事件驱动的典型案例,进一步叙述了云时代事件驱动的常见场景和最佳实践。
115029 1
|
8天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101800 1
|
7天前
|
自然语言处理 Cloud Native Serverless
通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验
近日,通义灵码正式进驻函数计算 FC WebIDE,让使用函数计算产品的开发者在其熟悉的云端集成开发环境中,无需再次登录即可使用通义灵码的智能编程能力,实现开发效率与代码质量的双重提升。
95384 2
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...
112727 12
|
12天前
|
SQL 存储 JSON
Flink+Paimon+Hologres 构建实时湖仓数据分析
本文整理自阿里云高级专家喻良,在 Flink Forward Asia 2023 主会场的分享。
71310 1
Flink+Paimon+Hologres 构建实时湖仓数据分析
|
15天前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151041 4
|
14天前
|
监控 负载均衡 Java
深入探究Java微服务架构:Spring Cloud概论
**摘要:** 本文深入探讨了Java微服务架构中的Spring Cloud,解释了微服务架构如何解决传统单体架构的局限性,如松耦合、独立部署、可伸缩性和容错性。Spring Cloud作为一个基于Spring Boot的开源框架,提供了服务注册与发现、负载均衡、断路器、配置中心、API网关等组件,简化了微服务的开发、部署和管理。文章详细介绍了Spring Cloud的核心模块,如Eureka、Ribbon、Hystrix、Config、Zuul和Sleuth,并通过一个电商微服务系统的实战案例展示了如何使用Spring Cloud构建微服务应用。
103517 9
|
14天前
|
Java 数据处理 调度
更高效准确的数据库内部任务调度实践,阿里云数据库SelectDB 内核 Apache Doris 内置 Job Scheduler 的实现与应用
Apache Doris 2.1 引入了内置的 Job Scheduler,旨在解决依赖外部调度系统的问题,提供秒级精确的定时任务管理。