Py学习  »  Django

Django快速入门

Python程序员 • 4 年前 • 354 次点击  

预备知识

Python 基础HTMLCSS 以及 Unix 命令行。如果你已经掌握了这些,学习本课程会很轻松。


介绍


这不是一个教程。这个快速入门课是一个快速制作基本的 Django 网站的方法,而无需深入了解制作网站应用程序的基本概念。对于快速入门课的每一步,我都会对正在使用的工具和概念添加一个解释更全面的链接,以便于你在创建你的第一个项目时更好的理解 Django。


我们的目标


我们要制作一个网站,你可以用来上传带有标题、日期和描述的图像。很简单的。


何为 Django?


Django(/JANG-oh/),一个以帮助人们快速创建简洁稳定的网站而广为人知的工具(Web 框架)。

使用 Django 遵循以下几种模式:

1. 模型(Model),如何存储数据。我们会告诉 Django 在这里存储我们的图像,标题,数据和描述。

2. 视图(View),项目中在哪里处理数据。我们的网站在这里为用户处理取自模型的数据。 

3. 模板(Template),项目如何呈现它所处理的数据。视图会使用模板来展示基于我们的模型处理的数据。


Django 做了很多复杂(且很有趣)的事情,但是如果你是刚开始接触,那么了解这些内容就足够了。


安装配置我们的项目


Windows用户请注意!


默认情况下,Windows 没有 Unix 命令行,而 Unix 命令行是本速成课的先决条件。Windows 10 在 2018 年 10 月更新的版本中提供了 Linux 子系统(Ununtu)。请安装并设置 Linux 子系统以使用 Unix 命令行。


我们将使用你计算机的终端来安装 python 环境和 Django。我们先输入以下命令,在计算机的 Documents 文件夹创建项目:

python3 -m venv django_cc 会使用名为 django_cc 文件夹为我们的项目创建一个虚拟环境,因此我们为其安装的所有内容都不会干扰系统中的其他任何内容。

之后我们进入项目文件夹,激活 python 环境并安装 Django。

  • source bin/activate 会激活我们创建的虚拟环境。这意味着如果我们安装 Django 的话,只会在我们项目中安装,而不会安装到整个系统环境中。

  • pip install django 会使用 Python 的包管理器安装最新版本的 Django。


现在已经安装好了 Django,并且我们得到了一些新的命令。现在我们首先使用 Django 创建一个项目,迁移开发数据库,最后尝试首次启动本地开发服务器,并确保每一步都正确执行。

  • django-admin startproject django_cc 告知 Django 制作我们项目的框架,并且准备接入其他东西(即 django 应用)

    • 这也是我找到manage.py的地方,我们使用manage.py跟Django进行交互

  • python3 manage.py migrate 用于告知 Django 我们的模型已经发生改变。由于我们的项目刚刚开始,这将是我们的初始迁移操作,建立了 Django 自有的各种模型(即,账户,活动日志,权限等)。更多...

  • python3 manage.py runserver 用于启动我们的开发服务器,并用于测试。


要查看正在运行的开发服务器,在浏览器打开 127.0.0.1:8000,可以看到 Django 的启动页。


数据库


接下来选择你最喜欢的文本编辑器或 python IDE,然后开始深入研究 Django。我们首先创建一个 Django 应用程序,并在此为项目编写所有模型。


为了让我们的核心项目能识别到这个应用,我们需要像下面这样将 blog 添加到 django_cc/settings.py 文件的 INSTALLED_APPS 中:


媒体文件支持


将以下内容添加到 settings.py 的底部,以便 Django 知道我们上传的媒体文件保存在哪里:

为了在开发服务器上访问这些文件,我们还需要在 django_cc/urls.py 文件底部导入一些包并添加一些条件:

很好,我们现在已经建立项目了,下面就开始编写模型。

编写模型


在我们新建的 blog 应用中找到 models.py 文件,我们将在此编写数据库模型。Post 类作为上传帖子的第一个模型,其中包含已发布的图像,标题,描述和日期。

  • models.FileField(upload_to='images/') 作为保存我们上传的图像的属性,并指明将图像上传到我们在配置文件中设置的媒体路径。

  • models.CharField(default="", max_length=n) 是一个基本的文本属性,并且最大长度为 n。

  • models.DateField(default=datetime.date.today) 是一个 日期/时间 自解析字段,并且设置为当前的日期和时间。


我们还需要告知 Django 根据时间逆序排列,然后完成这个模型:

  • Meta 类可以做很多事情,这里我们用它为我们的模型根据时间排序。

  • __str__ 方法告知 Django,稍后我们在与管理面板交互时显示标题(而不是 Post 1,Post 2,等)。


迁移我们的新模型


完成模型后执行下面两个命令,有必要告知 Django 我们对模型做了一些修改并需要将之应用于数据库:

恭喜!现在我们已经为发帖子准备好了数据库。但是有一个问题,我们现在还不能编辑。我们先在 Django 管理面板配置一下,然后就可以发帖了。


管理控制面板


进入我们的 blog 应用的 admin.py 文件并添加以下内容:

  • from blog.models import * 导入我们刚刚创建的所有模型。

  • admin.site.register(Post) 告诉 Django 在控制面板展示模型。

接下来我们将创建一个超级用户,来登录控制面板。输入以下命令并根据提示操作,你只需要填写提示的用户名和密码。

完成后,请转到 127.0.0.1:8000/admin 并使用刚刚设定的登录密码。你会看到这个页面:

从这里你可以看到向 Django 项目中添加帖子。我们已经正式完成了模型部分。接下来设计视图部分,让 Django 来为我们的帖子服务。


视图逻辑


视图是当我们请求页面时 Django 处理逻辑的媒介。我们要做的第一件事是在 django_cc 中创建一个 views.py。在文件中粘贴以下内容:

  • from django.views.generic import TemplateView 允许我们使用 Django 的基本模板视图,视图中我们展示帖子的全部内容。

  • from database.models import Post 导入全部数据库模型用于视图处理方法。

  • PostFeed 是我们的基本模板视图,它会使用我们接下来创建的 index.html 来渲染我们的数据库内容。

  • get_context_data 是我们从数据库向模板发送信息的方法。

    • context["posts"] = Post.objects.all() 我们的模板会从上下文字典中引用帖子,这些帖子被数据库使用 Post.objects.all() 收集到列表中。

我们在 urls.py 中添加一个新的路径,告知 Django 请求该 URL 时调用我们的视图:

我们的基本视图逻辑已经完成了,现在需要构建用于展示帖子的索引模板。


模板风格


在 Django 项目的根目录中,你可以找到 database 和 django_cc 文件夹,然后创建一个 templates 文件夹并在其内创建一个 index.html 文件。我们将使用 Bulma 来设计我们的站点,所以不需要编写任何 CSS。这里有一个可以作为模板的样板文件.

Django 模板使用名为 Django HTML 的 DRY 版本的 HTML。这是我们将向 index.html 模板中发送上下文信息并渲染的方式。在样板文件的主体中,我们使用帖子中的上下文添加一张卡片。

  • {% for post in posts %} 充任 for 循环,将迭代 posts 中每一个帖子信息。

  • for 循环每次运行时,如果使用了 {{ < variable > }} 的方式,当前迭代器中帖子的上下文信息回替换到 HTML中。

    • {{ post.image.url }} 是你引用图片 URL 的方式,这里不能仅仅是引用图片本身。


当我们访问 127.0.0.1:8000 是,应该展示我们在控制面板中添加的帖子列表:

现在我们有一个网站,可以整齐的展示我们在 Bulma 控制面板中添加的内容。


结束


Django 是一个构建网站以及其他事物的绝佳框架。今天你已经一个非常基本的网站,能够像 Instagram 一样展示帖子,并且希望以后构建一个自己的 Instagram。现在我建议你通过文档或者这个(我以之入门的)介绍来学习更多关于 Django 的信息。


英文原文:https://ceiphr.com/blog/a-crash-course-in-django 
译者:敦伟
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/32986
 
354 次点击