Django框架是什麼?

Django在新一代的Web框架中非常出色,为什么这么说呢?
为回答该问题,让我们考虑一下不使用框架设计Python网页应用程序的情形.贯穿整本书,我们多次展示不使用框架实现网站基本功能的方法,让读者认识到框架开发的方便,(不使用框架,更多情况是没有合适的框架可用. 最重要的是,理解实现的来龙去脉会使你成为一个优秀的web开发者)
使用Python开发Web,最简单,原始和直接的办法是使用CGI标准,在1998年这种方式很流行.现在从应用角度解释它是如何工作: 首先做一个Python脚本,输出HTML代码,然后保存成.cgi扩展名的文件,通过浏览器访问此文件,就是这样.
如下示例,用Python CGI脚本显示数据库中最新出版的10本书:不用关心语法细节,仅仅感觉一下基本实现的方法:

#!/usr/bin/env python
import MySQLdb
print "Content-Type: text/html\n"
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>"
connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")
for row in cursor.fetchall():print "<li>%s</li>" % row[0]
print "</ul>"
print "</body></html>"
connection.close()

首先,用户请求CGI,脚本代码打印Content-Type行,后面跟着换行.再接下来是一些HTML的起始标签,然后连接数据库并执行一些查询操作,获取最新的十本书.在遍历这些书的同时,生成一个书名的HTML列表项.最后,输出HTML的结束标签并且关闭数据库连接.

像这样的一次性的动态页面,从头写起的方法并非一定不好.其中一点:这些代码简单易懂,就算是一个初起步的 开发者都能读明白这16行的Python的代码,而且这些代码从头到尾做了什么都能了解得一清二楚.不需要学习额外的背景知识,没有额外的代码需要去了解. 同样,也易于部署这16行代码,只需要将它保存为一个latestbooks.cgi的文件,上传到网络服务器上,通过浏览器访问即可.

尽管实现很简单,还是暴露了一些问题和不便的地方.问你自己这几个问题:
(1)应用中有多处需要连接数据库会怎样呢?每个独立的CGI脚本,不应该重复写数据库连接的代码.比较实用的办法是写一个共享函数,可被多个代码调用.
(2)一个开发人员确实需要去关注如何输出Content-Type以及完成所有操作后去关闭数据库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率. 那些初始化和释放相关的工作应该交给一些通用的框架来完成.
(3)如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗?
(4)如果一个Web设计师,完全没有Python开发经验,但是又需要重新设计页面的话,又将发生什么呢?一个字符写错了,可能导致整个应用崩溃. 理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样Web设计师的重新设计不会影响到之前的业务逻辑.
以上正是Web框架致力于解决的问题. Web框架为应用程序提供了一套程序框架,这样你可以专注于编写清晰、易维护的代码,而无需从头做起.简单来说,这就是Django所能做的.


转载于:https://www.cnblogs.com/apollo1616/articles/9893280.html

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

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

相关文章

存款惊人_如何使您的图快速美丽惊人

存款惊人So, you just finished retrieving, processing, and analyzing your data. You grab your data and you decide to graph it so you can show others your findings. You click ‘graph’ and……因此&#xff0c;您刚刚完成了数据的检索&#xff0c;处理和分析。 您获…

pytest自动化6:pytest.mark.parametrize装饰器--测试用例参数化

前言&#xff1a;pytest.mark.parametrize装饰器可以实现测试用例参数化。 parametrizing 1. 下面是一个简单是实例&#xff0c;检查一定的输入和期望输出测试功能的典型例子 2. 标记单个测试实例为失败&#xff0c;例如使用内置的mark.xfail&#xff0c;则跳过该用例不执行直…

基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d详解(二)

&#xfeff;&#xfeff;上一篇我们介绍了Draw2d整体结构&#xff0c;展示了组件类关系图&#xff0c;其中比较重要的类有Node、Canvas、Command、Port、Connection等&#xff0c;这篇将进一步介绍Draw2d如何使用以及如何扩展。 进入主题&#xff1a; 详细介绍一下Draw2d中几个…

c#中ReadLine,Read,ReadKey的区别

Console.Read()、Console.ReadLine() 相同点&#xff1a; 1.两者都是用于输入的函数。 不同点&#xff1a; 1. Read只能读取一个字符&#xff0c;ReadLine可以读取一个字符串 如 Read读取A和AASDGU的返回值都是一样的 都为A的ASCII值&#xff0c;对于后续的ASDGU不理会。 而Rea…

Ubuntu16.04 开启多个终端,一个终端多个小窗口

Ubuntu16.04 开启多个终端&#xff0c;一个终端多个小窗口 CtrlShift T,一个终端开启多个小终端 CtrlAlt T 开启多个终端 posted on 2019-03-15 11:26 _孤城 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/liuweijie/p/10535904.html

敏捷 橄榄球运动_澳大利亚橄榄球迷的研究声称南非裁判的偏见被证明是错误的

敏捷 橄榄球运动In February 2020, an Australian rugby fan produced a study, claiming to show how South African rugby referees were exhibiting favorable bias towards South African home teams. The study did not consider how other countries’ referees treat So…

activiti 部署流程图后中文乱码

Activiti工作流引擎使用 1.简单介工作流引擎与Activiti 对于工作流引擎的解释请参考百度百科&#xff1a;工作流引擎 1.1 我与工作流引擎 在第一家公司工作的时候主要任务就是开发OA系统&#xff0c;当然基本都是有工作流的支持&#xff0c;不过当时使用的工作流引擎是公司一些…

Luogu 4755 Beautiful Pair

分治 主席树。 设$solve(l, r)$表示当前处理到$[l, r]$区间的情况&#xff0c;我们可以找到$[l, r]$中最大的一个数的位置$mid$&#xff0c;然后扫一半区间计算一下这个区间的答案。 注意&#xff0c;这时候左半边是$[l, mid]$&#xff0c;而右区间是$[mid, r]$&#xff0c;我…

网络传播动力学_通过简单的规则传播动力

网络传播动力学When a single drop of paint is dropped on a surface the amount of space that the drop will cover depends both on time and space. A short amount of time will no be enough for the drop to cover a greater area, and a small surface will bound the…

【左偏树】【P3261】 [JLOI2015]城池攻占

Description 小铭铭最近获得了一副新的桌游&#xff0c;游戏中需要用 m 个骑士攻占 n 个城池。这 n 个城池用 1 到 n 的整数表示。除 1 号城池外&#xff0c;城池 i 会受到另一座城池 fi 的管辖&#xff0c;其中 fi <i。也就是说&#xff0c;所有城池构成了一棵有根树。这 m…

【原创】数据库中为什么不推荐使用外键约束

引言 其实这个话题是老生常谈&#xff0c;很多人在工作中确实也不会使用外键。包括在阿里的JAVA规范中也有下面这一条 【强制】不得使用外键与级联&#xff0c;一切外键概念必须在应用层解决。 但是呢&#xff0c;询问他们原因&#xff0c;大多是这么回答的 每次做DELETE 或者…

初识Activiti

http://wenku.baidu.com/view/bb7364ad4693daef5ff73d32.html 1. 初识Activiti 1.1. 工作流与工作流引擎 工作流&#xff08;workflow&#xff09;就是工作流程的计算模型&#xff0c;即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其…

开源软件 安全风险_3开源安全风险及其解决方法

开源软件 安全风险Open source software is very popular and makes up a significant portion of business applications. According to Synopsys, 99% of commercial databases contain at least one open source component, and nearly 75% of these codebases contain open…

React-Router 源码分析1

1、单页面应用的路由基本原理 demo1 router1.html 复制代码以 hash 形式为例。 1、init 监听浏览器 url hash 更新事件。 2、route 存储路由更新时的回调到回调数组routes中&#xff0c;回调函数将负责对页面的更新。 3、refresh 执行当前url对应的回调函数&#xff0c;更新页面…

linux安装日志切割程序

linux安装日志切割程序 安装 gcc&#xff08;1&#xff09; yum insatll gcc &#xff08;2&#xff09;# cd cronolog-1.6.2 4、运行安装 # ./configure# make# make install 5、查看cronolog安装后所在目录&#xff08;验证安装是否成功&#xff09; # which cronolog 一般情…

自助分析_为什么自助服务分析真的不是一回事

自助分析That title probably got your attention and now you think I have some explaining to do! The key word in the title is the word “A”. Self-service analytics isn’t a thing if “a thing” means a single, distinct corporate initiative or set of require…

BPMN2.0-概要

BPMN2.0-概要 作者&#xff1a;AliKevin2011&#xff0c;发布于2012-6-27 一、BPMN简介 BPMN&#xff08;Business Process Model And Notation&#xff09;- 业务流程模型和符号 是有BPMI&#xff08;Business Process Management Initiative&#xff09;开发的一套变准的业务…

如何用Phaser实现一个全家福拼图H5

一、Phaser介绍 二、整体框架搭建 三、资源加载 四、游戏逻辑五、完成六、总结参考文档 最近用Phaser做了一个全家福拼图h5的项目&#xff0c;这篇文章将会从零开始讲解如何用Phaser实现&#xff0c;最终效果如下&#xff1a; 源码&#xff1a;https://github.com/ZENGzoe/phas…

angularjs 默认跳转

angularjs 的 $state.go() 跳转页面 &#xff0c;目标页面的js函数 的执行 先于 $locationChangeStart 的监听函数。 故意 添加 timeout 可以使 controller 在locationchangestart 之后触发。转载于:https://www.cnblogs.com/RoadAspenBK/p/9923332.html

错误录入 算法_如何使用验证错误率确定算法输出之间的关系

错误录入 算法Monument (www.monument.ai) enables you to quickly apply algorithms to data in a no-code interface. But, after you drag the algorithms onto data to generate predictions, you need to decide which algorithm or combination of algorithms is most re…