Django入门-简介和教程

披露: 您的支持有助于保持网站的正常运行!我们会为此页面上推荐的某些服务收取推荐费.


Django是使用Python编写的Web应用程序的快速开发框架.

开发框架是一个应用程序框架,具有一组用于快速构建软件的工具,以及有关应如何构建软件的意见.

框架通过提供最常用的功能(数据库连接,用户登录,会话管理,请求路由)来减少“样板”代码。无论应用程序的特定用途如何,几乎每个应用程序都需要这些功能,并且无需为每个新项目重新设计它们.

开发框架还提供了系统的体系结构。框架无需花费时间和精力来决定如何组织代码(或因失败而导致永无止境的问题),而是具有组织特征的正确方法,因此您可以开始创建它们.

在逐步设置第一个应用程序时,我们将看到该结构的外观.

入门

您真正唯一需要的就是访问Internet,非常基本的命令行知识和代码编辑器.

大多数Linux用户可能都知道如何访问其终端,但是如果您不这样做,这是Linux终端的快速指南。如果您使用的是Mac OS X,则可以在“终端”应用程序中访问类似Linux / Unix的命令行.

Windows命令行与Mac OS X和Linux上的命令行有些不同(称为bash).

您可以使用Windows Powershell,但必须进行很多“翻译”,不仅在这里,而且在大多数其他教程和参考指南中.

最简单的方法可能是简单地安装bash终端.

您有几种选择:

  • Cygwin:这是Windows的Linux / Unix工具的集合,包括bash终端.
  • Gitbash:Windows的Git带有bash实现。无论如何,您可能都想使用git(和Github)进行版本控制,因此这是一个非常简单的解决方案.
  • Windows 10包含一个基于Ubuntu的Bash shell,这非常了不起。需要一点努力才能使其正常工作.

安装一切

要使Django运行,有很多步骤:Python,升级Python包管理器,设置虚拟环境以及安装Django。.

蟒蛇

如果您的计算机上没有Python,则需要它。有关所有主要操作系统的Python链接,请参见Python下载页面。.

您需要使用Python 3,而不是Python2。您可以将Python 2与Django结合使用,但是Python 3是该语言的现在和将来.

如果您只是刚接触Python和Django,请使用Python 3.

您可能已经在计算机上安装了Python 2。在撰写本文时,Mac OS X随附了Python 2,并且也有一些Linux发行版。安装并使用Python 3。 (在您的计算机上拥有两个版本的Python不会有问题,正如您将在后续步骤中看到的那样。)

如果不确定所用的Python版本,请在命令行中输入python.

它会告诉你。例如,如果您运行的是Python 3.5.1版,则将看到以下内容:

> 蟒蛇
Python 3.5.1(v3.5.1:37a07cee5969,2015年12月5日,21:12:44)
达尔文[GCC 4.2.1(Apple Inc. build 5666)(dot 3)]
类型 "帮帮我", "版权", "学分" 要么 "执照" 欲获得更多信息.

如果运行python显示v2,请尝试python3。如果您安装了Python 3,那应该告诉您.

升级Python软件包管理器

Python附带了pip(Python包管理器)。但是,您需要对其进行升级(Python安装软件包不会在每次pip更新时都得到升级)。幸运的是,pip使用快速终端命令升级自身:

> 点安装-升级点

Python虚拟环境

任何Python项目,包括Django项目,通常都会涉及许多单独的第三方程序包.

如果您大量使用Python,最终将导致版本冲突-该项目需要v4.3的东西,而该项目则需要v5.1。解决方案是Python虚拟环境.

有几种用于Python的虚拟环境工具。我们使用virtualenv。首先,使用pip安装它:

> pip安装virtualenv

接下来,为您的Django项目设置一个虚拟环境。创建一个新目录来存放您的Django项目.

该目录将包含您的项目目录以及其他内容,因此,为了避免混淆,最好给它起一个不同于项目名称的名称。我们将其称为django-projects.

创建容器目录,然后从目录内部运行virtualenv.

运行virtualenv时,我们将指定python3并为环境命名(djenv),然后激活虚拟环境.

> mkdir django-projects
> cd django项目
〜/ django-projects > virtualenv -p python3 djenv
〜/ django-projects > 源djenv / bin / activate
(djenv)〜/ django-projects >

您现在处于名为djenv的虚拟环境中。您安装或升级的所有pip软件包仅在激活此虚拟环境后可用.

要停用虚拟环境,只需键入deactivate.

关于事物命名的简要说明-有关virtualenv,Django和Python的大多数文档通常都使用venv作为其示例虚拟环境的名称.

这样做可能会造成混淆,因为您可能会在计算机上创建多个不同的计算机,因此记住哪个是哪个很有帮助。.

另外,venv是另一个Python虚拟环境工具的名称.

一种有用的方法是命名与项目有关的环境(例如djenv表示django环境),但是您可以根据自己的喜好命名.

安装Django

这很简单:

(djenv)〜/ django-projects > pip安装Django

您可能希望停用虚拟环境并在系统范围内安装Django。由你决定.

无论哪种方式,pip都会开始安装Django及其所有依赖项。这可能需要一些时间.

开始一个项目

(通常)将“项目”理解为一个完整的网站(或潜在的网站家族).

一个站点可能具有几种不同的功能-博客,论坛,商店,帮助聊天.

这些中的每一个都称为“应用程序”(或简称为“ app”)。因此,项目是应用程序的集合.

这关系到您如何构造事物,但也关系到​​您如何命名事物.

假设您要构建一个新的Web应用程序,让人们共享照片。在您看来,整个网站就是“应用程序”。

但是,如果您使用名称photo-share-app(或其他名称)初始化Django项目,则会与重复的目录名称混淆.

Django项目的结构

Django项目的目录结构如下所示:

– /项目名称/
– 项目名称/
– 应用名称/
– 应用名称/
– 应用名称/

首次初始化项目时,您将获得顶层项目目录,其中的第二个目录.

顶层充当其余部分的容器。第二层具有整个项目的配置文件.

您正在构建的新应用程序将位于一个(或多个)其他应用程序目录中.

这会带来一些麻烦。假设您正在使用令人敬畏的名称(我们称它为wiht)构建一个令人惊叹的新网络应用程序,如果您不考虑它,最终将像这样:

– /有/
– 与/
– ?… 我应该怎么称呼我正在建造的东西…?/

这是一个建议:

– / wiht_site /
– wiht_site /
– wiht_app /

这使所有内容清晰易记。此外,它还使您可以轻松附加想要使用的任何通用网站功能.

或者,如果它们可以作为独立模块使用,则可以自己构建其他自定义应用程序:

– / wiht_site /
– wiht_site /
– wiht_app /
– 第三方博客应用/
– 第三方论坛应用/
– 使用crm-app /

Django Docs使用mysite,例如。每个项目都需要一个唯一的名称.

(当然,您无需构建新应用即可使用Django。您可以设置一个项目并使用现有应用的集合.

这样,您可以快速建立并运行一个复杂的多功能网站,并且以后可以灵活地添加客户构建的应用程序。)

(最后)初始化您的项目

在任何“容器”目录(我们在上面使用/ django-projects)中,并激活您的虚拟环境,然后使用django-admin命令初始化新项目.

(djenv)〜/ django-projects > django-admin startproject wiht_site

现在您有了:

– / wiht_site /
– manage.py
– wiht_site /
– __init__.py
– settings.py
– urls.py
– wsgi.py

现在运行测试服务器以确保一切正确.

(djenv)〜/ django-projects > cd wiht_site
(djenv)〜/ django-projects / wiht_site > python manage.py运行服务器

您会得到一些输出,例如:

执行系统检查…

系统检查未发现问题(0静音).

您有未应用的迁移;您的应用在应用之前可能无法正常运行.
运行’python manage.py migration’来应用它们.

2016年4月22日-17:45:53
Django版本1.9,使用设置“ wiht_site.settings”
在http://127.0.0.1:8000/上启动开发服务器
用CONTROL-C退出服务器.

在浏览器中打开http://127.0.0.1:8000,您应该会看到一些有效的信息:“欢迎使用Django”消息.

初始化您的第一个应用程序

从这里开始,假设我们始终处于激活djenv环境的顶层wiht_site目录(子目录)中.

在示例中看到以下内容时:

>

假设您在这里:

(djenv)〜/ django-projects / wiht-app >

使用manage.py创建一个新应用.

> python manage.py startapp wiht_app

这将创建一个新目录/ wiht_app /,其中包含以下内容:

– __init__.py
– 管理员
– apps.py
– 迁移/
– __init__.py
– models.py
– tests.py
– views.py

现在,您需要“安装”该应用程序。打开/wiht_site/wiht_site/settings.py,然后找到INSTALLED_APPS。需要对其进行编辑以包括您的新应用.

INSTALLED_APPS = [
‘wiht_app’,
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
]

发展事物

Django应用程序具有类似于Model-View-Controller架构的东西,Django文档有时将其称为Model-View-Template。.

这导致了易于采用的迭代开发模式:

  • 在模型上工作,定义要跟踪的数据类型以及它们之间的关系;
  • 在视图上工作,定义应该如何访问数据以及在处理数据时该怎么做;
  • 在模板上工作,定义数据在显示给用户或被其他应用程序使用时的外观.
模型与迁移

建立新功能通常始于创建模型。模型是类(在OOP意义上),它们定义系统中的各种对象以及它们之间的关系。因此,在博客应用程序中,您可能具有Post,Page,Category,Comment等模型–注释可能是帖子的子类(一种类型),也许帖子和页面是ContentItem的子类。.

模型写在每个应用程序的models.py文件中。这是一个非常简单的博客文章模型的开始.

从django.db导入模型
从django.contrib.auth.models导入用户

#在这里创建模型.
类Post(models.Model):

标题= models.CharField(
max_length = 100,

slug = models.SlugField(
unique =真,

摘录= models.TextField(
max_length = 255,

内容= models.TextField(
空白=真,

作者= models.ForeignKey(
用户,

创建= models.DateTimeField(
auto_now_add =真实,

def __str __():
返回self.title

Django拥有自己的对象关系映射器(ORM),它为数据库提供了抽象层。这使您无需参考特定的数据库管理系统即可定义数据模型,而无需编写SQL.

添加模型时,您将创建然后运行迁移。迁移是一种自动生成的SQL命令集,可更改数据库设计以匹配模型-Django的ORM将您的模型转换为SQL迁移.

在此之前,您需要设置数据库并进行连接。您在这里有很多选择,但是大多数Django用户更喜欢PostgreSQL,并且有适用于Django的特殊PostgreSQL工具,其他工具则无法使用.

数据库运行后,即可迁移.

> python manage.py makemigrations
> python manage.py迁移

管理员

Django为您的数据提供一个自动的Admin视图,因此您几乎可以立即对模型进行基本的CRUD操作。而且,如果您对编辑UI的需求并非十分复杂,则只需使用管理网站即可,而无需构建自己的编辑视图。您所要做的就是向Admin模块注册模型。这是在应用程序目录中的admin.py中完成的.

从django.contrib导入管理员
来自.models import Post

admin.site.register(发布)

现在登录并访问Admin,从命令行创建一个超级用户。.

> python manage.py createsuperuser

按照终端内的提示输入用户名,电子邮件和密码。然后启动服务器:

> python manage.py运行服务器

并且您应该能够登录http://127.0.0.1:8000/admin/。如果一切配置正确,您应该能够查看,添加,编辑和删除简单的博客文章.

现在是创建少量示例帖子的好时机。这将使下一步变得更有意义.

风景

在Django中,“视图”不是前端显示代码(称为“模板”)。 Django所谓的View更像是其他框架中的“控制器”。该函数接收HTTP请求作为参数,然后返回响应。通常,响应是网页的内容,然后可以从模板访问该网页的内容;响应也可以是重定向,错误消息,文件或其他内容.

最常见的情况是您要发送对特定内容的请求(例如,一个特定的帖子),然后取回与该内容相关的所有数据(标题,摘录,内容,作者)。另一个常见的情况是您想要显示内容项列表,例如在博客或新闻源的首页上.

Django提供了内置的通用视图来快速完成这些操作。我们将使用的两个是ListView和DetailView。如果您想扩展它们或创建自己的视图,可以在views.py中进行,但是我们现在将按原样使用它们。.

现在,我们只需要将这些视图映射到URL。在/wiht_site/urls.py中,您需要包含特定于应用程序的网址映射.

从django.conf.urls导入URL,包括
从django.contrib导入管理员

urlpatterns = [
网址(r’^ admin /’,admin.site.urls),
url(r’^’,include(’wiht_app.urls’)),
]

然后修改您应用的urls.py.

从django.conf.urls导入URL,包括
来自。导入视图
从django.views.generic导入ListView,DetailView
来自.models import Post

urlpatterns = [
网址(
r’^ blog /

定义每个模式的url()函数具有一系列用逗号分隔的参数:

  • 一个正则表达式,它定义一个URL模式以匹配传入的请求;
  • 具有参数的已定义视图:
    • 模型;
    • 模板文件名;
  • 这个网址格式的名称.

上面的模式将/ blog /和/ blog / post-slug / URL模式与ListView和DetailView匹配,然后指定它们的模板(index.html和post.html).

模板

剩下的就是创建一个模板来显示此内容。 Django使用Jinja模板.

创建三个新文件:

/wiht_site/wiht_app/templates/wiht_app/main.html

{%封锁内容%}
{%endblock%}

/wiht_site/wiht_app/templates/wiht_app/index.html

{%延伸 "wiht_app / main.html" %}

{%封锁内容%}

帖子

{%用于输入object_list%}

{{entry.title}}

{{entry.excerpt}}

{%endfor%}

{%endblock%}

/wiht_site/wiht_app/templates/wiht_app/post.html

{%延伸 "wiht_app / main.html" %}

{%封锁内容%}

{{ 帖子标题 }}

{{post.author}}
发表于:{{post.created}}
{{post.content}}

{%endblock%}

恭喜,您现在应该已经可以使用博客应用程序了.

进一步阅读和资源

我们有更多与编码和开发有关的指南,教程和信息图:

  • Python简介,资源和常见问题解答:本文包含许多资源,可帮助您成为Python专业人士.
  • Web服务器网关接口入门手册:了解如何使用此规范在Django中使用Python框架.
  • Ruby on Rails简介:本文将向您介绍Python和Django的替代方法.

,
ListView.as_view(
queryset = Post.objects.all()。order_by(“已创建”)[:50],
template_name =” wiht_app / index.html”
),
名称=“后列表”
),
网址(
r’blog /(?P [a-zA-Z0-9] +(?:-[a-zA-Z0-9] +)*)/定义每个模式的url()函数具有一系列逗号分隔参数:

  • 一个正则表达式,它定义一个URL模式以匹配传入的请求;
  • 具有参数的已定义视图:
    • 模型;
    • 模板文件名;
  • 这个网址格式的名称.

上面的模式将/ blog /和/ blog / post-slug / URL模式与ListView和DetailView匹配,然后指定它们的模板(index.html和post.html).

模板

剩下的就是创建一个模板来显示此内容。 Django使用Jinja模板.

创建三个新文件:

/wiht_site/wiht_app/templates/wiht_app/main.html

/wiht_site/wiht_app/templates/wiht_app/index.html

/wiht_site/wiht_app/templates/wiht_app/post.html

恭喜,您现在应该已经可以使用博客应用程序了.

进一步阅读和资源

我们有更多与编码和开发有关的指南,教程和信息图:

  • Python简介,资源和常见问题解答:本文包含许多资源,可帮助您成为Python专业人士.
  • Web服务器网关接口入门手册:了解如何使用此规范在Django中使用Python框架.
  • Ruby on Rails简介:本文将向您介绍Python和Django的替代方法.

,
DetailView.as_view(
型号=发布,
template_name ="wiht_app / post.html"),
名称="发布"

]

定义每个模式的url()函数具有一系列用逗号分隔的参数:

  • 一个正则表达式,它定义一个URL模式以匹配传入的请求;
  • 具有参数的已定义视图:
    • 模型;
    • 模板文件名;
  • 这个网址格式的名称.

上面的模式将/ blog /和/ blog / post-slug / URL模式与ListView和DetailView匹配,然后指定它们的模板(index.html和post.html).

模板

剩下的就是创建一个模板来显示此内容。 Django使用Jinja模板.

创建三个新文件:

/wiht_site/wiht_app/templates/wiht_app/main.html

/wiht_site/wiht_app/templates/wiht_app/index.html

/wiht_site/wiht_app/templates/wiht_app/post.html

恭喜,您现在应该已经可以使用博客应用程序了.

虚拟主机优惠券

在Django托管上寻找大量东西?
在我们最近的速度和性能测试中,A2 Hosting排名第一。现在,您可以节省高达50%的面向开发人员的计划.
使用此折扣链接
得到交易.

进一步阅读和资源

我们有更多与编码和开发有关的指南,教程和信息图:

  • Python简介,资源和常见问题解答:本文包含许多资源,可帮助您成为Python专业人士.
  • Web服务器网关接口入门手册:了解如何使用此规范在Django中使用Python框架.
  • Ruby on Rails简介:本文将向您介绍Python和Django的替代方法.
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map