Django是一个用Python构建的流行的Web框架,它允许开发人员快速创建可维护的Web应用程序。在本教程中,我们将通过安装Django并设置一个简单的项目来了解它。接下来,我们将看看Django中如何使用模型、URL模式、视图和模板来为Web应用程序创建强大的模块化代码。Django是一个拥有数百种功能的大型软件项目,但我们会尽可能地让它变得容易理解。让我们开始学习Django吧。
什么是Django
当看了djangoproject.com的官方网站后,我们了解到Django是一个Python网络框架,可以让你以简洁、务实的设计快速开发网络项目。网络框架是一个用于构建网络应用程序和网站的工具集合。Django自带的工具包括对象关系映射器,或称ORM,它可以帮助我们进行数据库查询。它还提供了URL路由,根据网络请求的URL来决定遵循什么逻辑。HTML模板是Django的另一个功能,它可以帮助我们在网络浏览器中以HTML形式查看数据。Django本身并不是一种编程语言。Python是Django所使用的编程语言。Django也不是一个网络服务器,但它确实有一个内置的网络服务器用于本地开发。
安装Django
你可能想建立一个[Python虚拟环境]来开始,但这并不是必须的。要安装Django,你首先需要在你的机器上安装最新版本的Python。这很容易做到,只需按照Python主网站上的说明就可以了。这也会安装PIP,即Python的软件包管理器。一旦准备好了,你需要做的就是打开一个终端窗口并输入以下命令。
pip install django
这将在你的电脑上安装最新版本的Django。你可以像这样在Python命令提示符下检查Django的状态。
>>> import django
>>> django.get_version()
'3.0'
>>>
这应该是你需要做的所有事情了,以便开始工作!
创建一个Django项目
Django提供了一个简单的命令来为你搭建一个新的项目的框架。在你运行该命令之前,你要导航到一个你将存储项目的目录。对于我们来说,这将是在 C:python.在这里,我将使用Django自带的一个命令为我们的Django项目创建一组初始文件,这个命令叫做Django admin。要创建一个项目,我们可以输入django-admin.py startproject,然后输入我们项目的名称。我们可以直接叫它djangotutorial。我们可以打出以下命令,然后按回车键。
python $django-admin.py startproject djangotutorial
你会看到一个新的文件夹djangotutorial现在在当前文件夹中。换句话说,我们现在有一个Django项目开始在 C:pythondjangotutorial.现在,我将用PyCharm打开这个文件夹,这是一个神奇的Python IDE。这里我们可以看到为一个新的Django项目创建的文件大纲。

在 djangotutorial 文件夹中,有一个叫做manage.py 的文件。还有一个内部的djangotutorial文件夹,包含四个文件。它们是**_init_.py**、settings.py、urls.py和wsgi.py。让我们来看看这些文件各自的作用。
manage.py manage.py文件用于为我们的项目运行各种命令。
_init_.py _init_.py文件告诉 Python 这个文件夹包含 Python 文件。也被称为dunder init。
settings.pysettings.py文件配置Django概念,如应用程序、中间件、模板等。
urls.pyurls.py文件是路由文件,根据URL路由http请求。
wsgi.pywsgi.py,即wuzgi文件,为Web服务器,如Apache或Nginx提供一个钩。
生成这些文件后,我们就可以第一次运行我们的项目了。我们可以通过在终端中导航到内部的djangotutorial文件夹来开始。在这里,我们可以输入ls,我们应该看到manage.py文件。要运行服务器,我们可以输入命令python manage.py runserver,我们会看到一些像下面这样的输出。
djangotutorial $python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 31, 2020 - 14:45:51
Django version 3.0, using settings 'djangotutorial.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Django服务器现在正在运行。我们可以在浏览器中访[问http://127.0.0.1:8000/,我们应该看到一个漂亮的Django闪屏。

它成功了!现在我们可以看到当我们创建一个新的Django项目时Django做出的默认屏幕。从这里开始,我们的基本项目已经生成,我们已经准备好定制和添加功能了。你可能还注意到,我们的项目中现在有一个db.sqllite文件,而以前是没有的。这是因为当你第一次运行runserver命令时,Django会创建这个文件,这样它就有一个数据库可以使用。
Django应用程序
Django应用程序是Django项目中的一个组件。它是一个文件夹,里面有一系列的Python文件。一个Django项目通常由几个不同的应用组成,每个应用都有不同的用途。可能有一个论坛应用,一个wiki应用,或者一个博客应用。每一个都会在Django项目中拥有自己的文件夹。官方文档中提到了创建一个投票应用程序,我们可以在以后的教程中尝试一下。现在,我们将为 "狗 "建立一个应用程序。我们将其称为DjangoDogs。为了建立我们的应用程序,我们将进入终端并在我们的项目中导航到manage.py所在的文件夹。现在我们要创建这个应用程序。我们可以通过在终端键入以下命令来完成。
djangotutorial $python manage.py startapp djangodogs

现在我们可以看到,有几个文件被添加了,包括一个migrations文件夹。为了完成将Django应用程序添加到项目中,我们还有一个步骤。我们需要在djangotutorial文件夹中导航,然后进入settings.py文件。在设置文件中,我们将向下滚动,直到找到已安装的应用程序设置。在这个列表的末尾,我们将添加字符串,djangodogs。这个列表中的其他应用是Django自带的默认应用。每当我们安装或创建一个新的Django应用时,我们都需要编辑这个设置。下面是setting.py文件,其中突出显示了我们的新条目。
"""
Django settings for djangotutorial project.
Generated by 'django-admin startproject' using Django 3.0.
For more information on this file, see
https://docs.djangoproject.com/en/3.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.0/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'not_the_real_keygo^4gs&^!1d$z7d6#q=)wqx4rt0!q'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'djangodogs'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'djangotutorial.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'djangotutorial.wsgi.application'
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_URL = '/static/'
Django应用程序的文件
| 文件 | 目的 |
|---|---|
| apps.py | 配置和初始化 |
| models.py | 数据层 |
| admin.py | 管理界面 |
| urls.py | URL路由 |
| views.py | 控制层 |
| test.py | 测试应用程序 |
| migrations.py | 存放迁移文件 |
apps.py文件控制该应用的特定设置。models.py文件提供了Django中的模型,用于构建数据库模式和查询。admin.py文件为该应用定义了一个Django管理界面,在这里你可以看到并编辑该应用的相关数据。urls.py文件可用于该应用的特定URL路由。views.py文件定义了处理请求的逻辑和控制流,并定义了返回的HTTP响应。test.py文件用于为这个应用编写单元测试。最后,migrations文件夹保存了Django用来迁移数据库的文件,因为我们随着时间的推移创建和改变数据库模式。这让我们对Django项目中的App有了一个很好的概述。
Django路由视图模型模板

在使用一个Web框架时,了解底层架构是很重要的。Django是一个MVC框架,即模型-视图-控制器架构,然而,Django对这些架构使用了一些不同的名称。Django中需要理解的四个概念是URL模式、视图、模型和模板。其中每一个都有特定的工作。
URL模式:当Django应用程序收到一个网络请求时,它使用URL模式来决定将请求传递给哪个视图进行处理。在这个项目中,URL模式被定义在djangotutorial/urls.py。
视图:Django中的视图将HTTP请求作为一个参数,并返回一个HTTP响应。我们的视图定义在djangodogs/views.py。视图提供了项目的逻辑,或控制流部分。
模型:当你想对数据库进行查询时,每个视图可以根据需要利用Django模型。djangodogs应用程序的模型位于djangodogs/models.py中。Django模型是一个带有属性的类,它定义了一个数据库表的模式。这些类提供了对相关表进行查询的内置方法。
模板:每个被定义的视图都可以利用Django模板,它提供了HTML响应的表现层。每个模板都是一个文件,由HTML以及变量、循环和其他控制流程的额外模板语法组成。模板文件可以放在一个叫做templates的文件夹里,以保持一致性。
配置你的Django主页
在这个项目中,我们想用Django最终呈现一个网页。我们现在就来做这件事。我们需要做的第一件事是在我们的djangodogs应用程序中添加一个模板目录。我们开始吧。

在templates文件夹中,我们现在需要添加一个Html文件,以便我们的应用程序可以渲染。

很好。现在,我们只想添加最简单的HTML标记,这样我们就可以渲染一个页面。
djangotutorial/djangodogs/templates/home.html
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Hello Django!</title>
</head>
<body>
<h1>Hello Django!</h1>
</body>
为了加载一个模板,我们需要一个视图来为我们完成这个任务。如果这对你来说听起来很有趣,你可以把Django中的视图想成是控制器,如果你是用更传统的MVC方法来考虑这个问题。在Django中,视图实际上是一个控制器。下面是我们如何配置我们的views.py。
djangotutorial/djangodogs/views.py
from django.shortcuts import render
def home(request):
return render(request, 'home.html')
在这段代码中,我们简单地定义了一个名为home()的函数。它接受一个HTTP请求,并使用它来渲染我们在上一步中刚刚创建的home.html文件。你可以看到这里的render()函数需要两个参数。第一个是请求,第二个是要显示的模板。
我们可以像这样配置我们的urls.py。
djangotutorial/urls.py
from django.conf.urls import url
from djangodogs import views
urlpatterns = [
url(r'^$', views.home, name='home'),
]
这里的正则表达式的目的是为了匹配根URL,它是一个斜线(/)。胡萝卜的美元符号在这里为我们做了手脚,它是url()函数的第一个参数。现在,当网络请求进入应用程序时,我们要触发views.py文件中的home()函数。url()的第二个参数完成了这个目标。最后,我们将这个模式命名为home,这就像一个命名的路由。现在,当我们访问我们的Django项目的主页时,我们就成功了!

所以我们可以看到在Django中渲染一个网页就像一、二、三一样简单。

from django.urls import path
正则表达式可能有点令人生畏。因此,Django也提供了使用**path()**函数定义路由的能力,其语法要简单得多。在这里,我们更新我们的urls.py文件,以反映这一变化,而且一切仍然工作得很完美。
djangotutorialdjangotutorialurls.py
from django.urls import path
from djangodogs import views
urlpatterns = [
path('', views.home, name='home')
]
通过路由传递一个ID
上面的主页网址、视图和模板的组合可能会被用来显示狗的清单。这就像狗资源的主页。现在,当你想深入到集合中的一个项目并查看该项目细节时,该怎么办?在这种情况下,如果我们想查看一只狗的具体细节,我们要通过url模式传递一个ID。想象一下,我们在数据库中有10只不同的狗,每只都有一个独特的ID。我们可以通过这个ID来获得这些细节。下面是我们如何设置的。
djangotutorialdjangotutorialurls.py
from django.urls import path
from djangodogs import views
urlpatterns = [
path('', views.home, name='home'),
path('dogs/<id>/', views.dog_detail, name='dog_detail'),
]
上面的片段是说我们可以访问一个像mysite.com/dogs/7 这样的网址--这将在请求中发送7的ID。在我们的views.py文件中,我们可以通过返回一个带有给定ID的HttpResponse来测试这个。
from django.shortcuts import render
from django.http import HttpResponse
def home(request):
return render(request, 'home.html')
def dog_detail(request, id):
return HttpResponse(f'<h1>Dog with id {id}</h1>')

这显示了在Django中如何通过URL传递ID。现在,一旦我们实现了一个数据库,我们就可以使用这个ID来查询数据库,以获得关于某只狗的详细信息。
从视图向模板传递数据
与其直接从视图中返回HttpResponse,不如现在渲染一个模板文件,并将数据从视图中的函数传递到模板中。我们还将使用插值法在该模板中显示ID。
djangotutorialdjangodogsviews.py
from django.shortcuts import render
def home(request):
return render(request, 'home.html')
def dog_detail(request, id):
return render(request, 'dog_detail.html', {'id': id})
djangotutorialdjangodogstemplatesdog_detail.html
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Dog Detail!</title>
</head>
<body>
<h1>Dog with id of {{ id }}</h1>
</body>

Django模型介绍
模型指的是Django应用程序的数据层。如果你在各种编程语言或框架中处理过任何类型的MVC项目,那么这个概念是很熟悉的。模型定义了我们的数据结构以及如何将其存储在数据库中。Django有一个内置的对象关系映射器(Object Relational Mapper),即ORM,你可以用它来轻松地将数据放入数据库,并从数据库中获取数据。一个给定的Django应用程序有一个models.py文件,这就是为我们的应用程序定义模型的地方。你可以在同一个文件中拥有一个或多个。在Django中,Model是一个继承自Django.db.models.Model的类。模型使用类的属性来定义它们的字段。我们只是想添加一些字段,这样我们就可以在我们的Django应用程序中跟踪每条狗的名字、品种和描述。
djangotutorialdjangodogsmodels.py
from django.db import models
class Dog(models.Model):
name = models.CharField(max_length=100)
breed = models.CharField(max_length=30, blank=True)
description = models.TextField()
Django迁移
Django模型定义了我们数据库的预期结构。迁移负责创建必要的脚本,以便随着项目的发展而改变这个结构。在Django中,当你在models.py文件中添加一个Model时,相关的数据库表还不存在。当一个新的模型被创建时,一个初始的迁移会创建数据库表。当一个字段从现有模型中被添加或删除,或者一个字段的属性发生变化时,也需要进行迁移。所有这些对models.py文件的改变都需要对数据库进行相应的改变,为此,需要创建并运行一个迁移。Django的好处是,你不需要手动创建迁移,它是由Django为你生成的。其工作方式是,你必须自己定义模型,然后使用 **makemigrations**命令来生成迁移文件。这个命令会读取当前的model文件,并检查数据库的当前状态,以确定需要做哪些改变,使数据库结构与models.py文件相匹配。在以下所有情况下都需要进行迁移。

有了上面定义的模型,我们现在可以使用python manage.py makemigrations 命令进行初始迁移。我们应该看到与下面类似的输出。
djangotutorial $python manage.py makemigrations
Migrations for 'djangodogs':
djangodogsmigrations001_initial.py
- Create model Dog
现在应用程序中有一个名为0001_initial.py的文件,Django自动生成的代码看起来像这样。
djangotutorialdjangodogsmigrations001_initial.py
# Generated by Django 3.0
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Dog',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('breed', models.CharField(blank=True, max_length=30)),
('description', models.TextField()),
],
),
]
Django本身已经内置了许多迁移功能,我们可以使用python manage.py showmigrations命令查看这些迁移功能。这是为认证系统等建立的表格。从下面的输出结果中可以看出,我们现在有0001_initial迁移,这是djangodogs应用程序中自定义的迁移。
djangotutorial $python manage.py showmigrations
admin
[ ] 0001_initial
[ ] 0002_logentry_remove_auto_add
[ ] 0003_logentry_add_action_flag_choices
auth
[ ] 0001_initial
[ ] 0002_alter_permission_name_max_length
[ ] 0003_alter_user_email_max_length
[ ] 0004_alter_user_username_opts
[ ] 0005_alter_user_last_login_null
[ ] 0006_require_contenttypes_0002
[ ] 0007_alter_validators_add_error_messages
[ ] 0008_alter_user_username_max_length
[ ] 0009_alter_user_last_name_max_length
[ ] 0010_alter_group_name_max_length
[ ] 0011_update_proxy_permissions
contenttypes
[ ] 0001_initial
[ ] 0002_remove_content_type_name
djangodogs
[ ] 0001_initial
sessions
[ ] 0001_initial
现在一切都准备就绪了,我们可以运行迁移了。我们可以像这样使用python manage.py migrate命令来做这件事。
djangotutorial $python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, djangodogs, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying djangodogs.0001_initial... OK
Applying sessions.0001_initial... OK
当我们第一次运行showmigrations命令时,我们看到在每个迁移的开头都有一个[ ]。这意味着该迁移存在,但是还没有被运行。如果在每个迁移的左边有一个[x],这意味着该迁移已经被运行。我们可以再使用python manage.py showmigrations命令来显示迁移,并验证它们是否已经被成功运行。
djangotutorial $python manage.py showmigrations
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
[X] 0003_logentry_add_action_flag_choices
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
[X] 0009_alter_user_last_name_max_length
[X] 0010_alter_group_name_max_length
[X] 0011_update_proxy_permissions
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
djangodogs
[X] 0001_initial
sessions
[X] 0001_initial
python manage.py shell
现在我们可以测试一下我们的新模型了。我们需要通过python manage.py shell命令来使用外壳。我们可以像这样把我们的第一只狗添加到系统中。
在数据库中插入记录
djangotutorial $python manage.py shell
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:21:23) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from djangodogs.models import Dog
>>> dog = Dog(name='Winnie', breed='Havanese', description='Fun loving female!')
>>> dog.save()
从数据库中检索记录
在使用Django ORM将我们的第一条记录插入数据库时,我们没有得到任何错误。为了使用ORM查询数据库,以便我们能够查看该记录,我们可以使用这些命令。
>>> dogs = Dog.objects.all()
>>> dog = dogs[0]
>>> dog.name
'Winnie'
>>> dog.breed
'Havanese'
>>> dog.description
'Fun loving female!'
一旦我们向数据库添加另一条记录,.all()命令就会返回不止一个结果。
>>> Dog.objects.all()
<QuerySet [<Dog: Dog object (1)>, <Dog: Dog object (2)>]>
URL -> 视图 -> 模型 -> 模板
我们现在可以把这一切放在一起。当我们访问主页时,我们想显示所有的狗。我们应该能够点击狗的名字,Django会加载细节模板来显示每条特定狗的细节。这是views.py文件中更新的home()函数,用来列出所有的狗。
djangotutorialdjangodogsviews.py
from django.shortcuts import render
from .models import Dog
from django.http import Http404
def home(request):
dogs = Dog.objects.all()
return render(request, 'home.html', {'dogs': dogs})
现在还必须更新home.html模板,以便让我们能够在系统中循环查看任何数量的狗。Django在模板语言中提供了特殊的标签来实现这一点。
djangotutorialdjangodogstemplateshome.html
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Hello Doggies!</title>
</head>
<body>
{% for dog in dogs %}
<a href="{% url 'dog_detail' dog.id %}">
<h1>{{ dog.name|capfirst }}</h1>
</a>
{% endfor %}
</body>
访问主页显示,我们现在看到了系统中的狗的小清单!还注意到,每只狗都可以点击,并在href中使用正确的ID。

为了确保能够点击每只狗,我们需要更新views.py文件中的dog_detail()函数。下面是更新后的代码,它现在使用提供的ID,用我们创建的模型从数据库中获取一个给定的狗。
djangotutorialdjangodogsviews.py
from django.shortcuts import render
from .models import Dog
from django.http import Http404
def home(request):
dogs = Dog.objects.all()
return render(request, 'home.html', {'dogs': dogs})
def dog_detail(request, id):
dog = Dog.objects.get(id=id)
return render(request, 'dog_detail.html', {'dog': dog})
现在的最后一步是简单地更新dog_detail.html模板文件,以显示一只特定狗的详细信息。
djangotutorialdjangodogstemplatesdog_detail.html
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Dog Detail!</title>
</head>
<body>
<h1>Dog with id of {{ dog.id }}</h1>
<h2>This dogs name is {{ dog.name }}</h2>
<h2>The breed of this dog is {{ dog.breed }}</h2>
<h2>Description: {{ dog.description }}</h2>
</body>
我们完成的小程序运行良好 🙂
Django初学者总结
如果你一路看完了这个Django初学者教程,那么恭喜你!你现在已经开始将Django应用于你的生活。你现在已经开始以新的和令人兴奋的方式将Python和Django的力量用于你的工作了。当选择一个Web框架来工作时,Django是Python Web开发者的主要选择。在本教程中,我们涵盖了很多内容,包括。
- Django是什么
- 安装Django
- 创建一个Django项目
- 如何创建Django应用程序
- Django应用程序的文件
- Django路由、视图、模型和模板
- 配置你的Django主页
- URL路由
- 通过路由传递一个ID
- 从视图中向模板传递数据
- Django模型
- Django迁移
- 在数据库中插入记录
- 从数据库中检索记录
- 关于Django的其他资源