9.3 Django框架
Django 是一个非常流行的 Python Web 开发框架,它是完整且强大的,适用于构建大型 Web 应用。在这一章节中,我们将详细介绍 Django 的基本概念、组件和用法。为了便于理解,我们将使用实例来展示如何使用 Django 构建一个简单的 Web 应用。
9.3.1 安装和创建 Django 项目
首先,使用 pip 安装 Django:
pip install django
接下来,使用 django-admin
命令创建一个新的 Django 项目:
django-admin startproject myproject
这将创建一个名为 myproject
的目录,其中包含 Django 项目的初始文件和目录。进入 myproject
目录:
cd myproject
9.3.2 Django 项目结构
Django 项目由一个或多个应用组成。每个应用代表一个特定的功能,例如博客、论坛、商店等。为了展示如何创建和使用 Django 应用,我们将创建一个简单的博客应用。
首先,使用 startapp
命令创建一个名为 blog
的应用:
python manage.py startapp blog
这将创建一个名为 blog
的目录,其中包含应用的初始文件和目录。以下是一个简要的目录结构说明:
myproject/
:项目根目录。manage.py
:一个用于管理项目的命令行工具。myproject/
:项目的配置目录。__init__.py
:一个空的 Python 文件,用于将目录标记为 Python 包。asgi.py
:ASGI 入口文件,用于部署项目。settings.py
:项目的配置文件。urls.py
:项目的 URL 配置文件。wsgi.py
:WSGI 入口文件,用于部署项目。
blog/
:应用目录。__init__.py
:同上。admin.py
:应用的 Django Admin 配置文件。apps.py
:应用的配置文件。migrations/
:应用的数据库迁移目录。models.py
:应用的数据模型文件。tests.py
:应用的测试文件。views.py
:应用的视图文件。
9.3.3 数据模型
在 Django 中,数据模型用于定义应用的数据结构。为了创建一个简单的博客数据模型,编辑 blog/models.py
,添加以下代码:
from django.db import models
from django.utils import timezone
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
我们定义了一个名为 Post
的数据模型,它具有 title
、content
和 pub_date
三个字段。__str__
方法用于在 Django Admin 界面中显示模型的友好名称。
接下来,将新创建的应用添加到项目的 settings.py
文件中的 INSTALLED_APPS
列表中:
INSTALLED_APPS = [
# ...
'blog',
]
然后,使用 makemigrations
和 migrate
命令创建并应用数据库迁移:
python manage.py makemigrations
python manage.py migrate
这将创建一个名为 db.sqlite3
的 SQLite 数据库文件,其中包含应用的数据表。
9.3.4 Django Admin
Django 提供了一个强大的后台管理界面,用于管理数据模型。首先,创建一个管理员用户:
python manage.py createsuperuser
接下来,注册 Post
模型以在 Django Admin 中使用。编辑 blog/admin.py
,添加以下代码:
from django.contribimport admin
from .models import Post
admin.site.register(Post)
现在,启动开发服务器:
python manage.py runserver
在浏览器中访问 http://127.0.0.1:8000/admin/
,使用先前创建的管理员用户登录。你可以在 Django Admin 中管理 Post
数据模型。
9.3.5 视图和模板
视图用于处理 Web 请求并返回响应。为了创建一个显示博客文章列表的视图,编辑 blog/views.py
,添加以下代码:
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.order_by('-pub_date')
return render(request, 'blog/post_list.html', {'posts': posts})
我们定义了一个名为 post_list
的视图,它从数据库中获取所有的 Post
对象并按发布日期降序排列。视图使用 render
函数将 posts
变量传递给一个名为 blog/post_list.html
的模板。
接下来,创建模板文件。在 blog
目录下创建一个名为 templates
的目录,并在其中创建一个名为 blog
的子目录。然后,在 blog/templates/blog
目录下创建一个名为 post_list.html
的文件,添加以下代码:
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.pub_date }}</p>
<p>{{ post.content }}</p>
{% endfor %}
此模板使用 Django 的模板语言在页面上显示每篇博客文章的标题、发布日期和内容。
9.3.6 URL 配置
最后,我们需要配置 URL 以将请求映射到视图。首先,在 blog
目录下创建一个名为 urls.py
的文件,添加以下代码:
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
]
这将项目的根 URL(/
)映射到 post_list
视图。接下来,将新创建的应用的 URL 配置包含到项目的 urls.py
文件中:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
这告诉 Django 在处理 URL 时要包含 blog
应用的 URL 配置。
现在,重新启动开发服务器:
python manage.py runserver
在浏览器中访问 http://127.0.0.1:8000/
,你应该能看到博客文章列表。
这仅仅是 Django 框架的简要介绍。它还有许多其他功能和组件,例如表单、用户认证、缓存等。要了解更多关于 Django 的信息,请访问其官方文档:https://docs.djangoproject.com/
推荐阅读: