AI悦创 AI悦创 1周前 你好,我是悦创。昨天写了一篇:Python 做一个属于自己的web网站「上」,但有点小 bug ,什么 bug 呢?待会就说。开头这张图确实有点丑,不过奈何没办法,没时间设计这个图片了。 突然发现日更还是有点难度的,不过还是赶上了。希望小伙伴们多多转发,有要转载的小伙伴也可以联系我开白名单转载。 希望大家多支持支持我,我 web 自动化之后,就是:文件自动化处理,对于之后的自动化 ppt、word、pdf 等知识,慢慢来与你们分享。所以,请让我看见你们的存在吧,感谢支持! 本公众号的技术交流群也创建有一段时间,还有专门的推文群,刚刚开始创建。有兴趣加入的,也可以后台回复:3,加我微信「记得备注哦!」 上面说的小 bug 就是,开头插入超链接重复了。接下来是 Python 办公自动化的文章 web 系列的最后一篇。我也把相关的 Django 文章链接,给大家列出来,方便回顾。 今天的分享一句话:真正聪明的人,都在做笨的事情。感谢你👆的阅读,接下来我们就开始学习了。 本文代码资料,点击阅读原文获取! 目录1、准备模型 2、点击交互操作 3、前后分离介绍 1、准备模型上节课是页面的静态展示到浏览器,比较简单。本文学习下数据库后台以及数据展示到网页上。 首先第一个,准备一个 Model 模型。打开你项目中,blog 目录下的 models.py 文件,如下代码:
第一行是 models.py 中默认有的,下面是定义了一个 Article 的类,详细介绍下:
定义完成了,这个 Article 就是一个模型,对应数据库中的一张表格。 有了 Model 之后,需要通过两行命令,将模型映射成数据库的表格,命令行分别是:
没有报错就是正常,那数据库文件就有对应的表格了。 数据库和管理员说了半天,数据库在哪? 我们好像都没有配置? django 默认的数据库,是 sqlite3,所以是左侧的 db.sqlite3 这个文件。 前面提了句,django 自带后台管理,就是 urls.py 中的 admin 路径,启动 django 后访问 admin 就可以看到,并且通过后台可以管理数据库,但是需要账号密码。链接: http://127.0.0.1:8000/admin 那我们就需要创建账号,现在来创建一个超级管理员账号,创建账号的命令行是:python manage.py createsuperuser,然后输入账号,邮箱,密码,重复密码就可以了,如下截图: 提示:
账号密码搞定了,现在可以登录到 admin 后台查看和管理数据了。 配置后台监管但是这个时候,你应该还看不到 Article 数据,不是没有数据的缘故,是因为创建了 Article、生成了表格,还没有把 Article 交给 admin 监管。 接下来的操作就是把 Article 交给 admin 后台管理。打开 blog 目录下的 admin.py 文件,添加如下代码: 在 admin.py 中,先导入 Article 类,然后使用 admin.site.register(Article) 进行注册,只有注册后的类,admin 后台才可以监控并管理。 添加数据启动 django 服务,进到后台,就可以看到 Article ,并且进入之后,还可以查看有多少文章,新增文章、修改文章等操作。 请自行添加三篇文章,内容所以,可长可短,有就行。 数据这块已经完成了,现在来学习下,从数据库查询全部数据,并渲染到 index.html 文件中。 View 函数查询数据这里要打开的文件,是 views.py 和 index.html。views.py 中要做的操作,是查询全部文章,并将文章对象,放到 render 函数中,如下:
Article.objects.all() 这行代码,是从数据库中,将 Article 模型对应表格中的数据,做个全部的查询,取出全部内容,保存到 articles 变量中。 render() 函数中的第三个参数是字典,这里可以将函数中的变量,传到模板中,然后使用模板语法渲染出来。 接下来是模板中的修改,如下图:
框中的部分,之前是默认的 4 个 panel 面板,现在改成了 {% %} 和 {{ }} 的组合。 模板语法介绍大括号百分号和双大括号的组合,就是 django 的模板语法,前者是语句,后者是渲染值。 在 html 中,articles 是查询的集合,首先用 for 循环取出每个 article 文章对象,然后在标题和摘要的位置,将 article.title 和 article.abstract 两个属性读取出来放在位置上即可。 for 循环需要有 endfor 结束标签,这样就形成了一个闭环。有一个数据,for 和 endfor 之间的 html 代码,渲染一次;有两个数据,for 和endfor 之间的 html 代码,渲染两次;以此类推,数据越多,渲染的 html 也就越多。 效果展示最后展示下最终效果图: 模板日志最后回到 python manage.py runserver 界面上,每次刷新页面,都会有新的请求和响应产生,在这个界面上,就会记录并展示出来,如下图: 模板文件有两个,一个是 index.html,另一个是 article.html。 下节课程要做的内容,就是从 index.html 中,点击查看,就跳转到 article.html 模板,并展示你点击的那篇文章内容。 点击不同的文章,展示不同的文章内容。 小结这段的重点是模型+数据库+渲染,流程如下:
数据库内容读取并展示到首页上,首页展示了非常多的文章的标题和摘要,如果要查看内容的话,还得点击文章的查看,进到 article.html 中才可以看到。 那点击操作,如何实现?接下来我们来实现这个功能。 2、点击交互操作链接的渲染首先是点击,那个查看按钮,是个 a 标签,点击触发的 href 属性,也就是访问新的链接。 访问新的链接,链接中必须携带当前文章的信息,方便在视图函数层面,查询到具体的文章信息,并渲染到 article.html 中。 传输的信息必须独一无二,不然就会出现。数据库中,每条数据都会自动的携带一个 id,就是数据库的索引,这个信息是独一无二的。 打开 index.html 文件,在 a 标签的 href 属性上,渲染出 article 的 id 属性,如下图: 渲染效果展示拼接的 url 是 /article/{{article.id}} ,这个 url 是不存在的,后续我们需要添加。 这样渲染出来的结果,是 /article/1、/article/2、/article/3 这样的内容,每篇文章都是不一样的,符合我们的需求。 效果图如下: 新建一个对应的请求接收函数现在打开 views.py ,定义一个新的函数,用于绑定 /article/1 这类的 url。如下代码:
代码解释:
代码截图如下: 文章页面渲染以上就是视图层的逻辑代码。接下来打开 article.html 文件,将文章的属性值,渲染上去,如下图:
URL 绑定视图逻辑函数和模板都准备好了,接下来就是 urls.py 中的注册,绑定 url,先上截图: 图中框中的部分就是将函数和 url 进行进行绑定。这个比较重要,有难度,代码解释:
以上就是 url 的绑定。 效果展示内容全部完成,启动服务器,来看下效果如何,如下截图: 【选词填空】练习参数 id 的类型,是类型,是在中定义了。
3、前后分离介绍前后端分离,是个趋势,了解前后端分离,对我们的技术提升,也是有很大帮助的。 Django 的 MTV 模式,是数据库->后端->前端的一整套流程,所有的内容都是一套项目中。 前后端分离的思想,就是前端负责界面交互和美观,后端负责数据管理和数据输出。前端和后端的通信,完全基于 API 来处理。 什么是 API? 就是一个后端提供给前端拿数据的 url。 接下来的任务,就是做个 API 接口,访问这个接口,可以拿到数据库中的文章内容。 首先,说明下格式问题。前端找后端要数据,后端给数据,前端拿数据,都是有特定格式的,这种格式是前后端两个规则好的。 所以在这里,以 json 格式为例,json 也是前端编程语言 javascript 的对象结构。 增加模型函数django 的 Model 默认不能直接导出 json 的,所以在模型定义里面,预先准备一个函数,将对象转换成 json,如下代码:
代码解释:
代码截图: 对应的 API 函数有了将对象转换成字典的函数,下面开始定义 api 函数。 api 和 view 不太一样,虽然操作是一样的,但是概念上不同,view 返回网页内容,api 返回纯数据,所以 api 函数放的位置,单独存放到一个 api.py 里面,这个文件需要新建,看上方的效果图。 新建了 api.py 文件后,打开这个文件,新建一个函数,代码如下:
对于新手来说,代码还有难度,在这里详细解释下:
代码截图如下: 绑定 URLapi 函数准备好了,然后是注册和绑定 url,不要忘记了,这个也是需要绑定了,如下图: 这里绑定了两个 url,一个是 article/json,这是匹配没有传入 id 时候的访问 url;另一个是 API 接口测试一切准备就绪,看下访问效果,分别是访问无 id 的 url 和有 id 的 url,如下效果图: 网页中正常展示中文,打开浏览器的调试工具,切换到 Network 网络栏,这个 Json 格式就比较明显了,方便阅读。 【选词填空】练习在 models.py 文件中,@classmethod 的意思_________是函数,也就是通过类可以直接调用的函数; 没有 @classmethod 的函数,是_____________函数,不能通过类调用,只能通过实例调用。
|
|