带你构建你的的第一个Python和Django应用程式

分享前还是先分享自己的Python学习交流群:666468218

群内不定时分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴入群学习交流

您以前可能听说过Python,特别是如果您已经编写了一段时间。

Python是一种高级的通用程式语言。这意味着你可以使用它来编写从简单的游戏到支持每月数百万用户的网站的任何内容。

事实上,每月有数百万访问者的几个高调站点依靠Python来提供一些服务。例如YouTube和Dropbox

这就是说,为什么你应该首先使用Python?为什么不是像Ruby或PHP这样疯狂的其他流行语言之一呢?那么,用Python你会得到以下好处:

易于阅读的语法。

语言周围的真棒社区。

简单易学。

Python对于从基本shellsripting到高级web开发的各种任务是有用的。

何时不使用Python

虽然使用像wxPython这样的工具可以很容易地使用Python编写桌面应用程式,但是您通常会更好地使用您所针对的平台提供的专用工具,例如Windows上的.NET。

当您的特定用例具有非常专业的需求时,您也不应该使用Python,而其他语言可以更好地满足这些要求。一个例子就是当你构建一个嵌入式系统时,一个像C,C++和Java这样的语言占统治地位的领域。

Python的2对3的Python

Python2.7.x和3.x都被广泛使用。Python3将变化引入到需要重写Python2中编写的应用程式的语言中,以便与Python3.x分支一起工作。然而,你需要使用的大多数库现在已经被移植到Python3。

我用的是Python3。虽然原理保持不变,但只需要很少的语法修改就可以使代码在Python2.7.x下运行。

一些Python代码示例

你好,世界

正如我之前所说,Python的主要好处之一是它的「非常容易阅读的语法。多么容易?检查Python的无处不在的版本HelloWorld。

此代码列印出来Hello,World的控制台。您可以通过访问此站点轻松地尝试此代码,将代码示例粘贴到页面右侧的编辑器中,然后单击run页面上方的按钮以查看输出。

条件逻辑

条件逻辑同样简单。这里有一些代码来检查用户的年龄是否高于18岁,如果是,列印Accessallowed或Accessnotallowed其他。

该input()功能用于读取键盘输入。因此,在运行脚本执行脚本的其余部分之后,您需要在终端提示符中键入一些内容。请注意,该input()函数被封装在int()函数中。

这是因为input()读取值strings,但我们需要年龄是一个integer。因此,我们必须将键盘输入强制转换为字符串,否则在检查字符串是否大于18时会出现错误。

最后,请注意else对if语句中不符合条件的任何其他输入执行的语句。

抽象数据类型

Python也有一些优秀的内置抽象数据类型,用于存放项目集合。一个例子是可以用来保存任何类型的变量的列表。下面的代码显示了如何创建一个列表,并遍历它来将每个项目列印到终端。

上面的代码创建了一个包含数字,字符串和列表的列表(是的,列表可以包含其他列表!)。为了遍历列表,一个for-in循环派上用场。请记住,列表是零索引的,所以我们也可以使用索引访问列表项。例如,要输出字符串python,你可以写:

字典

Python提供的另一个优秀的数据类型是字典。字典存储键值对,类似于JSON对象。创建一个字典也很简单。

现在你已经知道了一点Python,我们来谈谈Django。

Django的

Django是一个PythonWeb框架。它是免费的,开源的,自2005年以来一直存在。它是非常成熟的,并具有优秀的文档和默认包括真棒功能。它提供的一些优秀的工具是:

优秀的轻量级伺服器开发和测试。

良好的模板语言。

像CSRF这样的安全功能包括在内。

Django中包含了许多其他有用的东西,但是随着您的进行,您可能会发现它们。我们将在本教程中使用Django来构建我们的网站。

设置

在本教程中,我将向您展示如何启动并运行Django网站。在我们到达那里之前,首先从Python网站上获取最新的Python的副本。

请注意,如果你在OSX上,你已经安装了自制软体,你可以做

之后,直接进入该GettingstartedwithDjango部分

在为您的作业系统安装正确的版本后,您将需要确保它已正确设置。打开一个终端并键入:python3你应该看到类似下面的东西:

这是交互式的Pythonshell。CTRL+D现在点击退出

设置环境

为了避免使用不必要的软体包污染我们的全球范围,我们将使用虚拟环境来存储我们的软体包。一个优秀的虚拟环境管理员可免费获得virtualenv。我们将使用Python的包管理器pip来安装这个和其他的包,比如Django,我们将在后面要求。首先,让我们virtualenv安装。

完成之后,创建一个名为「项目」的文件夹,然后cd放入任意位置。

一旦进入项目文件夹,创建另一个名为hello的文件夹。该文件夹将保存我们的应用程式

在这一点上,我们需要创造环境来满足我们的要求。我们将在hello文件夹内做到这一点。

该-p开关告诉virtualenv您要使用的Python版本的路径。随意用自己的Python安装路径切换出路径。名称env是环境名称。您也可以将其更改为符合项目名称的其他项目。

一旦完成,你应该有一个文件夹env在你的hello文件夹内调用。现在你的结构应该看起来像这样。

您现在已经准备好激活环境并开始编码了!

你会看到一个环境名称的提示。这意味着环境是活跃的。

安装Django

这是一个简单的点子安装。Django的最新版本是Django1.9.6

创建一个应用程式

现在已经安装了Django,我们可以使用它的启动脚本来创建一个框架项目。这和使用其管理脚本一样简单。

运行这个命令创建一个具有以下结构的框架django应用程式:

当您查看helloapp创建的文件夹时,您将找到一个名为的文件manage.py和另一个名为的文件夹helloapp。这是您的主要项目文件夹,并将项目的设置包含在名为的文件中settings.py以及项目中的路径中urls.py。随意打开settings.py文件以熟悉其内容。

准备好咱们继续前进

更改应用程式设置

让我们改变一些设置。settings.py用你最喜欢的编辑器打开文件。找到一个名为InstalledApps的部分,看起来像这样。

Django运用应用程式的概念。应用程式是一个独立的代码单元,可以自行执行。一个应用程式可以做很多事情,比如在浏览器上提供一个网页,或者处理用户身份验证或者其他任何你能想到的事情。Django带有一些预先安装的默认应用程式,如身份验证和会话管理器应用程式。我们将创建的任何应用程式或我们将需要的第三方应用程式将在InstalledApps安装默认应用程式后添加到列表的底部。

在我们创建一个自定义应用程式之前,让我们改变应用程式的时区。Django使用tzdatabase时区,其中的列表可以在这里找到。

时区设置看起来像这样。

将其改为适合您的时区的东西。

创建你自己的应用程式

需要注意的是,Django应用程式遵循模型,视图,模板范例。简而言之,应用程式从模型中获取数据,视图对数据做了一些处理,然后渲染包含处理信息的模板。因此,Django模板对应于传统MVC中的视图,而Django视图可以被比作传统MVC中的控制器。

这就是说,让我们来创建一个应用程式。cd进入第一个helloapp文件夹并输入;

运行此命令将创建一个名为howdy的应用程式。你的文件结构现在应该看起来像这样。

为了让Django识别我们全新的应用程式,我们需要将应用程式名称添加到InstalledApps我们settings.py文件中的列表中。

一旦完成,让我们运行我们的伺服器,看看会输出什么。我们提到Django带有一个内置的轻量级Web伺服器,它在开发过程中很有用,但不应该用于生产。按如下所示运行伺服器:

您的输出应该类似于以下内容:

如果仔细观察,您将看到一条警告,提示您有未应用的迁移。现在忽略这一点。转到您的浏览器并访问:8000/。如果一切顺利,您应该看到Django的欢迎页面。

我们将用我们自己的模板替换这个页面。但首先,让我们谈谈迁移。

迁移

迁移使您可以轻松地更改资料库模式(模型),而不必丢失任何数据。无论何时您创建新的资料库模型,运行迁移都会更新您的资料库表以使用新的模式,而不必丢失任何数据,或者经历繁琐的丢弃和重新创建资料库的过程。

Django带有一些已经为其默认应用程式创建的迁移。如果您的伺服器仍在运行,请通过点击停止CTRL+C。输入以下内容应用迁移:

如果成功,你会看到类似这个的输出。

现在运行伺服器不会显示任何警告。

网址和模板

当我们运行伺服器时,显示了默认的Django页面。我们需要Django来访问我们的howdy应用程式,当有人去的主页网址是/。为此,我们需要定义一个URL来告诉Django在哪里寻找主页模板。

打开urls.py内部helloapp文件夹内的文件。它应该看起来像这样。

正如你所看到的,Django管理站点有一个现有的URL模式,默认使用Django。让我们添加我们自己的网址来指向我们的howdy应用程式。编辑文件看起来像这样。

请注意,我们已经include从django.conf.urls添加了一个导入,并为空路线添加了一个url模式。当有人访问主页(在我们的例子中是http://localhost:8000)时,Django将在howdy应用程式中寻找更多的url定义。由于没有,运行应用程式将产生巨大的堆栈跟踪由于ImportError。

我们来解决这个问题。转到howdy应用程式文件夹并创建一个名为的文件urls.py。该howdy应用程式文件夹现在应该是这样的。

在新urls.py文件里面,写下这个。

此代码从我们的howdy应用程式导入视图,并期望调用的视图HomePageView被定义。由于我们没有一个,打开应用程式中的views.py文件,howdy并写下这段代码。

这个文件定义了一个叫做视图HomePageView。Django视图接受request并返回一个response。在我们的例子中,这个方法get需要一个对我们urls.py文件中定义的url的HTTPGET请求。在附註中,我们可以将我们的方法重命名post为处理HTTPPOST请求。

一旦接收到HTTPGET请求,该方法就会呈现一个名为index.htmlwhich的模板,它只是一个普通的HTML文件,可以在普通的HTML标签中写入特殊的Django模板标签。如果您现在运行伺服器,您将看到以下错误页面:

这是因为我们根本没有任何模板!Djangotemplates在您的应用程式内的文件夹中查找模板,所以请继续在您的howdy应用程式文件夹中创建一个模板。

进入刚创建的模板文件夹,并创建一个名为的文件index.html

在index.html文件里面,粘贴这个代码。

现在运行你的伺服器。

你应该看到你的模板呈现。

连结页面

我们再添加一个页面。在您的howdy/templates文件夹中,添加一个名为的文件about.html。在里面,写下这个HTML代码:

一旦完成,编辑原始index.html页面看起来像这样。

点击Aboutme连结将不会工作,因为我们的应用程式没有/about/定义的网址。让我们编辑urls.py我们的howdy应用程式中的文件来添加它。

一旦我们添加了路线,about.html当我们访问/about/网址时,我们需要添加一个视图来呈现模板。让我们编辑应用程式中的views.py文件howdy。

请注意,在第二个视图中,我没有定义一个get方法。这只是使用这个TemplateView类的另一种方式。如果您设置了该template_name属性,则对该视图的获取请求将自动使用定义的模板。尝试改变HomePageView使用中使用的格式AboutPageView。

现在运行伺服器并访问主页应该显示我们的原始模板,并添加到关于页面的新增连结。

点击Aboutme连结应该引导你到About页面。