django框架简介外文翻译资料
2023-07-28 11:16:45
英语原文共 29 页,剩余内容已隐藏,支付完成后下载完整资料
Django框架开始于2003年,由Adrian Holovaty和Simon Willison在美国堪萨斯州劳伦斯的Journal-World报纸上做的一个项目。2005年,Holovaty和Willison发布了该框架的第一个公开版本,以比利时-法国吉他手Django Reinhardt的名字命名。
[1]快进2017年--Django框架现在在Django Software Foundation(DSF)的指导下运行,框架核心有超过1000个贡献者,超过15个发布版本,并且有超过3000个专门设计用于Django框架的包。
[2][3][4]Django框架保持了它作为一个模型-视图-控制器(MVC)服务器端框架的本源,该框架设计用于操作关系数据库。尽管如此,Django还是跟上了大多数web开发趋势--通过第三方软件包--与非关系数据库(NoSQL)、实时Internet通信和现代JavaScript实践等技术并驾齐驱。所有这一切都表明,Django框架现在是许多组织选择的web开发框架,包括照片分享网站Instagram和Pinterest;公共广播系统(PBS)4;在美国,《国家地理》;并且在这本书的帮助下,你的组织!
在本章中,您将了解Django框架的设计原则,这些原则对于理解Django框架的日常工作至关重要。接下来,您将学习如何以各种方式安装Django:作为tar.gz文件、使用pip、使用git和使用VirtualEnv。
安装Django框架后,您将学习如何启动Django项目以及如何使用关系数据库设置该项目。接下来,您将了解Django框架中的核心构建块--URL、模板和应用程序--以及它们如何相互协作来设置内容。最后,您将学习如何设置Django admin站点,这是一个基于Web的界面,用于访问连接到Django项目的关系数据库。
Django框架设计原则
如果您在web开发方面工作的时间足够长,您最终会得出这样的结论:使用任何web框架和编程语言都可以产生相同的结果。但是,事实上,虽然您可以产生相同的结果,但差异很大的是您创建解决方案所花费的时间:创建原型的时间、添加新特性的时间、进行测试的时间、进行调试的时间、部署到规模的时间等等。
从这个意义上说,Django框架使用了一组设计原则,与许多其他web框架相比,它产生了最高效的web开发过程之一。注意,我不是说
Django是一颗银弹(例如,最擅长原型制作,最具可扩展性);我的意思是,Django框架包含了一套设计原则和权衡,使它成为构建大多数中型到大型web应用程序所需特性的最高效的框架之一。
现在,虽然您可能会认为我有偏见--毕竟我正在写一整本关于这个主题的书--我将首先阐述这些设计原则,这样您就可以更好地理解Django框架的优势所在。
不要重复你自己的原则
重复可能有助于强调某一点,但当涉及到web开发时,它只会导致额外的、耗时的工作。事实上,web开发的本质是跨多层交互操作(例如,HTML模板、业务逻辑方法和数据库),这使得它本身容易重复。
Django框架确实试图强迫您不要重复自己,所以让我们看看Django是如何强制不重复自己的,以及为什么这是一件好事。
假设您想要构建一个coffeehouse应用程序来发布关于商店的信息,同时还要有一个客户的联系表单。您需要做的第一件事是确定商店和联系人表单需要什么样的信息。图1-1展示了每个实体的两个Django模型的模型。
图1-1。用于存储和联系实体的Django模型
请注意,图1-1中的Django模型各有不同的字段名和一个数据类型来限制值。例如,语句name=models.charfield(max_length=30)告诉Django一个存储名称最多应该有30个字符,而语句email=models.emailfield()告诉Django联系人实体应该包含一个有效的电子邮件值。如果coffeehouse像大多数web应用程序一样,那么您通常会为store和contact实体执行以下操作:
- 创建关系数据库表以保存实体信息。
- 创建业务逻辑以确保实体符合要求。
- 创建HTML表单以允许为实体提交数据。
- 创建一个接口,允许管理用户访问数据库中的实体。
- 创建REST服务,为移动应用程序版本公开实体。
完成最后一个任务列表的关键在于,您有可能在数据库定义语言(DDL)、HTML表单、业务验证逻辑和URL等中重复几十个类似的信息(例如,名称、值限制)--这不仅耗时,而且容易出错。
如果您可以根据像models.charfield(max_length=30)这样的语句生成HTML表单输入、DDL语句,并自动验证仅包含30个字符的信息,那不是更容易吗?这正是Django干设计原理所做的。
图1-2展示了图1-1中相同的Django模型,以及您可以从相同的模型生成的各种构造,而不需要重复您自己。
图1-2。Django模型基于干原理创建独立的结构
如图1-2所示,代表Django模型的实体能够生成HTML表单并呈现给公众,管理实体的管理界面,执行实体值的验证逻辑,以及生成代表实体的数据库表的DDL。
虽然现在讨论从Django模型生成这样的构造的实际技术还为时过早,但不用说,这比跟踪HTML表单、DDL、验证逻辑和其他位置中对同一事物(例如,名称、电子邮件)的多个引用要简单得多。
从这个意义上说,Django真的可以帮助您在一个地方定义事物,而不必在其他地方重复它们。请注意,总是可以重复自己来获得自定义行为,但默认情况下,Django在您使用它所做的几乎所有事情中都强制执行DRY原则。
显式优于隐式
[5]Django使用的编程语言Python有一个类似咒语的语句,称为“Python的禅”,它被定义为该语言的Python增强建议(PEP)的一部分,特别是PEP 20。PEP 20中的一个语句是“显式优于隐式”,而Django是基于Python的,这一原则也被铭记于心。
明确化会使web应用程序易于被更多的人理解和维护。添加新特性或理解web应用程序背后的逻辑对于最初不是编写web应用程序的人来说可能已经足够困难了,但是如果你投入到具有隐式行为的混合结构中,用户在试图弄清楚隐式所做的事情时只会面临更大的挫败感。显式输入确实需要更多的工作,但是当您将它与调试或解决问题的潜在努力相比较时,它是非常值得的。
让我们快速了解一下Django在跨不同MVC框架使用的通用web开发构造中的明确性:视图方法。视图方法充当MVC框架中的C(Controller),负责处理传入的请求、应用业务逻辑,然后用适当的响应路由请求。
为了更好地理解这种明确性,我将提供一个Django视图方法和一个等效的Ruby on Rails视图方法,它执行相同的逻辑,即通过给定的id获取存储并将响应路由到模板。下面的片段是Ruby on Rails版本;请注意带有#的行,它们是注释,指示正在发生的事情。
class StoresController lt; ApplicationController
def show
# Automatic access to params, a ruby hash with request parameters and view parameters
@store = Store.find(params[:id])
# Instance variables like @store are automatically passed on to view template
# Automatically uses template views/stores/show.html.erb
end end
尽管非常简洁,但请注意围绕访问数据、将数据传递给模板和分配模板的过程的所有隐式行为。下面template, and assign a template. The following snippet is an equivalent Django view method.
# Explicit request variable contains request parameters
# Other view parameters must be explicitly passed to views def detail(request, store_id): store = Store.objects.get(id=store_id)
# Instance variables must be explicitly passed on to a view template
# Explicit template must be assigned
return render(request, stores/detail.html, {store: store})
请注意,在最后一个片段中,没有猜测输入参数的来源,它们在view方法中显式声明为参数。此外,值被显式地传递给一个模板,模板也被显式地声明,因此逻辑对新来者友好得多。
Ruby on Rails视图方法的隐含性通常被称为“魔术”,甚至被许多人认为是一个特性。之所以被称为“魔术”,是因为某些行为是在幕后提供的。然而,除非您对框架和应用程序了如指掌,否则很难确定某些事情发生的原因,这使得修复或更新这些事情变得更加困难。因此,即使“Magic”在开始时可以为您节省几分钟或几小时的开发时间,但在以后的维护中,它可能会花费您几小时或几天的时间。
因此,就像在Python中一样,Django框架总是倾向于显式方法而不是任何隐式技术。
需要指出的是,显式不等于冗长或冗余。虽然在Django与隐式驱动的web框架(例如Rails)中,您肯定会输入更多的代码,正如前面的DRY原则部分所述,Django框架尽力避免在web应用程序中引入不必要的代码。
最后,显式也不意味着没有默认值。Django框架确实在可能的情况下使用了合理的默认值,只是在不明显使用默认值的情况下不使用默认值。本质上,Django框架使用默认值,但避免使用产生“神奇”结果的默认值。
松散耦合体系结构
Django框架是一个MVC框架,它跨多个层(例如,HTML模板、业务逻辑方法和数据库)运行。但是,Django非常注意维护跨这些层操作的所有组件的松散耦合体系结构。
松散耦合意味着组成Django应用程序的各个部分之间没有严格的依赖关系。例如,在Django中,直接从HTML模板提供内容是完全有效的,而不需要使用业务逻辑或设置数据库。就像在Django中一样,放弃使用HTML模板并直接从业务逻辑方法返回原始数据也是完全有效的(例如,对于REST服务)。
本章后面的一节题为“设置内容:理解URL、模板和应用程序”,将以Django的松耦合架构如何工作的示例进行更详细的介绍。
安装Django
[6]安装Django框架的方法多种多样。您可以从其主站点下载Django,并像安装常规Python应用程序一样安装它。您还可以通过操作系统(OS)软件包管理工具下载和安装Django,例如在Linux发行版上可用的apt-get-。
[7]安装Django的另一个选择是通过Python包管理器PIP下载它。另一种选择是直接从GitHub上的源代码安装Django。表1-1列出了Django安装选项的列表,包括它们的利弊。
表1-1。Django安装选项-优缺点
平易近人
下载/使用pip Python package Manager安装。 (推荐选项) |
允许在虚拟Python环境中安装。 依赖关系会自动处理。 |
最新版本可能不可用。 |
作为tar.gz文件从主站点下载。 |
最容易访问最新的Django稳定版本。 |
需要手动下载和安装。 需要对Django依赖项进行额外的管理(如果不使用pip)。 剩余内容已隐藏,支付完成后下载完整资料
资料编号:[604650],资料为PDF文档或Word文档,PDF文档可免费转换为Word |