杰瑞科技汇

Django Python教程,从入门到实战要学多久?

Django Python 全栈开发教程:从零开始构建你的博客

第一部分:Django 简介与环境准备

什么是 Django?

Django 是一个用 Python 编写的高级 Web 框架,它遵循 MVT (Model-View-Template) 架构模式,旨在帮助开发者快速、安全地构建复杂的数据库驱动的网站。

Django Python教程,从入门到实战要学多久?-图1
(图片来源网络,侵删)
  • M (Model - 模型): 定义你的数据结构,它就像你的数据库的“接口”,负责与数据库交互(增、删、改、查)。
  • V (View - 视图): 处理业务逻辑,它接收来自用户的请求,与模型交互获取数据,然后选择一个模板来渲染并返回响应。
  • T (Template - 模板): 负责展示,它是一个包含 HTML 代码和 Django 模板语言的文件,用于将动态数据插入到最终的网页中。

Django 的核心理念是 "Don't Repeat Yourself" (DRY),它提供了许多开箱即用的功能,如:

  • ORM (Object-Relational Mapper): 无需写 SQL,用 Python 对象操作数据库。
  • Admin 后台: 自动生成一个功能强大的网站管理界面。
  • URL 路由: 优雅的 URL 设计。
  • 模板引擎: 强大的模板继承和包含机制。
  • 安全性: 内置了防止常见 Web 攻击(如 CSRF、XSS、SQL 注入)的功能。

环境准备

在开始之前,请确保你的电脑上已安装 Python,我们推荐使用虚拟环境来隔离项目依赖,避免版本冲突。

步骤 1: 创建项目目录

mkdir django_blog
cd django_blog

步骤 2: 创建并激活虚拟环境

Django Python教程,从入门到实战要学多久?-图2
(图片来源网络,侵删)
  • macOS / Linux:
    python3 -m venv venv
    source venv/bin/activate
  • Windows:
    python -m venv venv
    .\venv\Scripts\activate

    激活后,你的命令行提示符前会出现 (venv)

步骤 3: 安装 Django

pip install django

步骤 4: 验证安装

django-admin --version

第二部分:创建你的第一个 Django 项目

使用 startproject 命令

Django 提供了命令行工具来快速生成项目骨架。

Django Python教程,从入门到实战要学多久?-图3
(图片来源网络,侵删)
# 在 django_blog 目录下执行
django-admin startproject myblog .

这个命令会创建一个名为 myblog 的目录,里面包含了项目的核心配置文件,注意最后的点 ,表示在当前目录下创建,避免产生多余的嵌套目录。

你的项目结构现在应该是这样的:

django_blog/
├── venv/
└── myblog/
    ├── manage.py         # 命令行工具,用于与项目交互
    └── myblog/           # 项目包
        ├── __init__.py
        ├── asgi.py       # 用于部署的服务器接口
        ├── settings.py   # 项目的所有配置文件
        ├── urls.py       # 项目的 URL 声明
        └── wsgi.py       # 用于开发的服务器接口

运行开发服务器

python manage.py runserver

打开你的浏览器,访问 http://127.0.0.1:8000/,你应该能看到一个欢迎页面,恭喜,你的 Django 项目已经成功运行!


第三部分:创建博客应用

一个 Django 项目可以包含多个应用,我们将创建一个名为 blog 的应用来处理所有博客相关的功能。

python manage.py startapp blog

现在你的项目结构多了一个 blog 目录:

django_blog/
├── blog/                # 我们的新应用
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations/
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── myblog/
└── manage.py

步骤 1: 注册应用

为了让 Django 知道 blog 应用存在,我们需要在 myblog/settings.py 文件的 INSTALLED_APPS 列表中添加它。

# myblog/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog.apps.BlogConfig',  # 添加这一行
]

我们使用 'blog.apps.BlogConfig' 是一种更规范的方式,它会自动加载 blog/apps.py 中的配置。


第四部分:定义数据模型 (Model)

我们需要在数据库中存储文章,文章有哪些属性呢?标题、内容、创建时间、作者等。

步骤 1: 编辑 blog/models.py

# blog/models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):= models.CharField(max_length=200, verbose_name="标题")
    content = models.TextField(verbose_name="内容")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")
    author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
    def __str__(self):
        return self.title
    class Meta:
        verbose_name = "文章"
        verbose_name_plural = "文章"
        ordering = ['-created_at']
  • CharField: 用于短文本,如标题。
  • TextField: 用于长文本,如内容。
  • DateTimeField: 用于日期和时间。auto_now_add=True 表示在创建时自动设置时间戳,auto_now=True 表示每次保存时都更新时间戳。
  • ForeignKey: 建立了与 User 模型的多对一关系,一篇文章只对应一个作者,一个作者可以有多篇文章。on_delete=models.CASCADE 表示当用户被删除时,其所有文章也会被级联删除。
  • __str__: 定义对象的字符串表示形式,方便在后台识别。
  • Meta: 用于定义模型的元数据,如 verbose_name (后台显示的名称) 和 ordering (默认排序方式)。

步骤 2: 创建并应用数据库迁移

Django 的 ORM 通过“迁移”来同步数据库模型。

# 1. 生成迁移文件
python manage.py makemigrations blog
# 2. 应用迁移,在数据库中创建表
python manage.py migrate

Django 已经为你创建了 blog_post 这张数据表。


第五部分:配置 Django Admin

Django 最强大的功能之一就是自动生成的 Admin 后台,我们可以用它来管理文章。

步骤 1: 创建超级用户

python manage.py createsuperuser

按照提示输入用户名、邮箱和密码。

步骤 2: 注册模型

为了让 Post 模型在 Admin 后台显示,我们需要在 blog/admin.py 中注册它。

# blog/admin.py
from django.contrib import admin
from .models import Post
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'created_at', 'updated_at')
    list_filter = ('created_at', 'author')
    search_fields = ('title', 'content')
admin.site.register(Post, PostAdmin)
  • list_display: 定义在列表页显示哪些字段。
  • list_filter: 添加一个侧边栏过滤器。
  • search_fields: 添加一个搜索框。

步骤 3: 测试 Admin

重新运行开发服务器 (python manage.py runserver),然后访问 http://127.0.0.1:8000/admin/,使用你刚才创建的超级用户账号登录,你应该能看到 "Posts" 选项,点击进去就可以添加、修改和删除文章了!


第六部分:创建视图、模板和 URL

现在我们有了数据,需要让用户在网站上看到它们,这是 MVT 的核心部分。

创建视图

视图是处理请求并返回响应的函数,我们创建一个视图来展示文章列表。

# blog/views.py
from django.shortcuts import render
from .models import Post
def post_list(request):
    posts = Post.objects.all()
    context = {
        'posts': posts
    }
    return render(request, 'blog/post_list.html', context)
  • Post.objects.all(): 从数据库中获取所有文章。
  • render: 一个快捷函数,用于加载模板并返回一个包含模板渲染结果的 HttpResponse 对象,我们将 posts 变量作为 context 传递给模板。

创建模板

模板负责展示数据,我们需要创建一个目录结构来存放模板。

django_blog/
└── blog/
    └── templates/
        └── blog/
            └── post_list.html  # 我们的模板文件

Django 默认在应用的 templates 目录下查找模板,为了避免不同应用间的模板名冲突,我们通常会在 templates 目录下再创建一个与应用同名的子目录(blog)。

编辑 blog/templates/blog/post_list.html

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">我的博客</title>
    <style>
        body { font-family: sans-serif; margin: 40px; }
        .post { border: 1px solid #ccc; padding: 10px; margin-bottom: 20px; border-radius: 5px; }
        .post h2 { margin-top: 0; }
        .post-meta { color: #777; font-size: 0.9em; }
    </style>
</head>
<body>
    <h1>我的博客</h1>
    <hr>
    {% for post in posts %}
        <div class="post">
            <h2>{{ post.title }}</h2>
            <p class="post-meta">作者: {{ post.author }} | 发布于: {{ post.created_at }}</p>
            <p>{{ post.content|truncatewords:30 }}</p>
        </div>
    {% empty %}
        <p>还没有文章。</p>
    {% endfor %}
</body>
</html>
  • {% for post in posts %} ... {% endfor %}: Django 的模板 for 循环。
  • {{ post.title }}: 变量替换, 用于输出变量值。
  • |truncatewords:30: 过滤器,将文本截断为 30 个单词。

配置 URL

我们需要将 URL 路径映射到我们创建的视图。

步骤 1: 应用级 URL

blog 应用中创建一个 urls.py 文件。

# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
    path('', views.post_list, name='post_list'),
]
  • path('', ...): 空路径,表示 blog 应用的根 URL。
  • views.post_list: 指向 blog/views.py 中的 post_list 函数。
  • name='post_list': 给这个 URL 起一个名字,方便在模板和代码中反向解析。

步骤 2: 项目级 URL

myblog/urls.py 中包含 blog 应用的 URL 配置。

# myblog/urls.py
from django.contrib import admin
from django.urls import path, include  # 别忘了导入 include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),  # 添加这一行
]
  • path('', include('blog.urls')): 任何指向项目根路径 () 的请求,都会被传递给 blog.urls 来处理。

步骤 3: 访问网站

重新运行开发服务器,访问 http://127.0.0.1:8000/,现在你应该能看到你在 Admin 后台创建的文章列表了!


第七部分:总结与下一步

恭喜!你已经成功地用 Django 从零开始构建了一个功能完整的博客应用,在这个过程中,你学习了:

  • 项目和应用的结构
  • 定义数据模型
  • 使用 Django Admin 管理数据
  • 创建视图、模板和 URL 来展示数据

接下来的学习方向:

  1. 创建文章详情页: 为每篇文章创建一个详情页,点击标题或“阅读更多”链接可以跳转。
  2. 实现用户认证: 允许用户注册、登录和登出。
  3. 创建和编辑文章: 允许登录用户通过表单创建和编辑自己的文章。
  4. 美化页面: 使用 CSS 框架(如 Bootstrap 或 Tailwind CSS)来美化你的网站。
  5. 部署: 将你的网站部署到云服务器上,让全世界的人都能访问。

Django 的世界非常广阔,这个教程只是一个开始,继续探索,你会发现它更加强大的功能!

分享:
扫描分享到社交APP
上一篇
下一篇