杰瑞科技汇

PyCharm Django教程,新手如何快速上手开发?

PyCharm + Django 完整入门教程

本教程将涵盖以下核心步骤:

PyCharm Django教程,新手如何快速上手开发?-图1
(图片来源网络,侵删)
  1. 环境准备: 安装 Python 和 PyCharm。
  2. 项目创建: 使用 PyCharm 创建一个新的 Django 项目。
  3. 应用创建: 在项目中创建一个用于博客的 Django 应用。
  4. 模型定义: 创建一个 Post 模型来存储文章数据。
  5. 后台管理: 注册模型到 Django Admin,方便管理数据。
  6. 视图编写: 编写处理业务逻辑的视图函数。
  7. URL 配置: 设置 URL 路由,将 URL 映射到视图。
  8. 模板创建: 创建 HTML 模板来展示页面。
  9. 静态文件处理: 添加 CSS 样式。
  10. 数据迁移与服务器运行: 将模型变更同步到数据库并启动项目。

第一步:环境准备

在开始之前,请确保你已经安装了以下软件:

  1. Python: 从 Python 官网 下载并安装,安装时请勾选 "Add Python to PATH" 选项。
  2. PyCharm: 从 JetBrains 官网 下载并安装。
    • 强烈推荐使用 PyCharm Professional Edition (专业版),因为它对 Django 的支持更完善(如数据库工具、模板调试等),社区版也可以完成本教程,但某些高级功能不可用。

第二步:创建 Django 项目

  1. 打开 PyCharm,点击 File -> New Project

  2. 在弹出的窗口中:

    • Name: 输入你的项目名称,myblog
    • Location: 选择项目存放的位置。
    • New environment using: 选择 Virtualenv,这会为你的项目创建一个独立的虚拟环境,避免不同项目之间的依赖冲突。
    • Base interpreter: 确保指向你安装的 Python 解释器。
    • Django: 勾选这个复选框,PyCharm 会自动为你配置好 Django 项目结构。
    • Application name: 输入初始应用的名称,main
  3. 点击 Create,PyCharm 会自动完成以下操作:

    PyCharm Django教程,新手如何快速上手开发?-图2
    (图片来源网络,侵删)
    • 创建一个虚拟环境。
    • 安装 Django 包。
    • 生成标准的 Django 项目文件和目录。

项目创建后,你会看到如下的目录结构:

myblog/
├── myblog/                 # 项目配置目录
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py         # 核心配置文件
│   ├── urls.py             # 项目主 URL 配置
│   └── wsgi.py
├── manage.py               # Django 命令行工具
└── venv/                   # 虚拟环境目录

第三步:创建 Django 应用

一个 Django 项目可以包含多个应用,我们将创建一个专门用于博客的应用。

  1. 在 PyCharm 的右下角,找到 Terminal (终端) 标签并点击打开。
  2. 在终端中,输入以下命令来创建一个名为 blog 的应用:
    python manage.py startapp blog
  3. 执行后,项目根目录下会多出一个 blog 文件夹。

我们需要告诉 Django 这个新应用的存在,打开 myblog/settings.py 文件,找到 INSTALLED_APPS 列表,将 'blog' 添加进去:

# myblog/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # 在这里添加你的应用
]

第四步:定义模型

模型是数据库中数据的唯一、权威的信息源,我们将创建一个 Post 模型来存储文章标题、内容、作者和发布时间。

PyCharm Django教程,新手如何快速上手开发?-图3
(图片来源网络,侵删)
  1. 打开 blog/models.py 文件,将其内容修改为:
# blog/models.py
from django.db import models
from django.contrib.auth.models import User # 引入内置的 User 模型
class Post(models.Model):= models.CharField(max_length=200, verbose_name='标题')
    content = models.TextField(verbose_name='内容')
    author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    def __str__(self):
        return self.title
    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章'
  • verbose_name: 在后台管理中显示的中文名称。
  • __str__: 定义对象的字符串表示形式,方便在后台识别。

第五步:后台管理

为了让 Django Admin 能够管理我们新创建的 Post 模型,我们需要在 blog/admin.py 中注册它。

  1. 打开 blog/admin.py 文件,修改为:
# blog/admin.py
from django.contrib import admin
from .models import Post
@admin.register(Post)  # 使用装饰器注册模型
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'created_at')  # 在列表页显示的字段
    list_filter = ('created_at', 'author')            # 过滤器
    search_fields = ('title', 'content')              # 搜索字段
    raw_id_fields = ('author',)                      # 作者字段使用搜索框

第六步:数据迁移

将我们定义的模型同步到数据库中。

  1. 在 PyCharm 的 Terminal 中,依次执行以下两条命令:

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

    你会看到 Django 为你创建了一系列数据表,包括我们自定义的 blog_post 表。


第七步:创建超级用户

为了登录后台管理系统,我们需要创建一个管理员账户。

  1. Terminal 中运行:
    python manage.py createsuperuser
  2. 按照提示输入:
    • Username: 用户名
    • Email address: 邮箱地址
    • Password: 密码 (输入时不会显示)
    • Password (again): 确认密码

第八步:运行服务器并测试后台

  1. Terminal 中运行:
    python manage.py runserver
  2. 打开你的浏览器,访问 http://127.0.0.1:8000/admin/
  3. 使用你刚刚创建的超级用户名和密码登录。
  4. 登录后,你应该能看到 "BLOG" 应用,点击 "Posts",你就可以在这里添加、修改和删除文章了,先手动创建几篇文章,方便后续测试。

第九步:编写视图

视图是接收 Web 请求并返回响应的 Python 函数,我们将创建三个视图:文章列表、文章详情和创建文章。

  1. 打开 blog/views.py,编写以下代码:
# blog/views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Post
from django.utils import timezone
from .forms import PostForm # 我们将在下一步创建这个表单
def post_list(request):
    posts = Post.objects.filter(created_at__lte=timezone.now()).order_by('-created_at')
    return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    return render(request, 'blog/post_detail.html', {'post': post})
def post_new(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm()
    return render(request, 'blog/post_edit.html', {'form': form})
def post_delete(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        post.delete()
        return redirect('post_list')
    return render(request, 'blog/post_confirm_delete.html', {'post': post})
  • post_list: 获取所有已发布的文章并按创建时间倒序排列。
  • post_detail: 根据 pk (主键) 获取单篇文章。
  • post_new: 处理文章创建表单的提交。
  • post_delete: 处理文章的删除。

第十步:创建表单

为了方便创建文章,我们需要一个表单。

  1. blog 目录下新建一个 forms.py 文件,并添加以下内容:
# blog/forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('title', 'content')

第十一步:配置 URL

URLconf 是 Django 项目的目录,它像网站的“目录”一样,将 URL 路径映射到相应的视图。

  1. 在项目的主 urls.py (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')),  # 所有开头的请求都交给 blog.urls 处理
    ]
  2. blog 应用中创建一个 urls.py 文件:

    blog 目录上右键 -> New -> Python File,命名为 urls.py

    # blog/urls.py
    from django.urls import path
    from . import views
    urlpatterns = [
        path('', views.post_list, name='post_list'),      # 首页 -> 文章列表
        path('post/<int:pk>/', views.post_detail, name='post_detail'), # 文章详情
        path('post/new/', views.post_new, name='post_new'), # 新建文章
        path('post/<int:pk>/delete/', views.post_delete, name='post_delete'), # 删除文章
    ]
    • name='...' 给 URL 起了个名字,方便在模板中反向解析。

第十二步:创建模板

模板是 HTML 文件,其中包含一些特殊的 Django 标签和变量,用于动态生成页面。

  1. blog 应用下创建模板目录结构

    • blog 目录上右键 -> New -> Directory,命名为 templates
    • templates 目录上右键 -> New -> Directory,命名为 blog
    • 最终路径应为:blog/templates/blog/
  2. 创建 base.html (基础模板): 在 blog/templates/blog/ 目录下创建 base.html,其他模板会继承这个基础模板,以保持网站风格一致。

    <!-- blog/templates/blog/base.html -->
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}我的博客{% endblock %}</title>
        <style>
            body { font-family: sans-serif; margin: 40px; }
            .container { max-width: 800px; margin: 0 auto; }
            nav a { margin-right: 15px; text-decoration: none; color: #007bff; }
            nav a:hover { text-decoration: underline; }
            .post { border: 1px solid #ccc; padding: 15px; margin-bottom: 20px; border-radius: 5px; }
            .post h2 { margin-top: 0; }
            .post-meta { color: #666; font-size: 0.9em; }
        </style>
    </head>
    <body>
        <div class="container">
            <nav>
                <a href="{% url 'post_list' %}">首页</a>
                {% if user.is_authenticated %}
                    <a href="{% url 'post_new' %}">写新文章</a>
                {% endif %}
            </nav>
            <hr>
            {% block content %}
            {% endblock %}
        </div>
    </body>
    </html>
  3. 创建 post_list.html (文章列表页): 在 blog/templates/blog/ 目录下创建 post_list.html

    <!-- blog/templates/blog/post_list.html -->
    {% extends 'blog/base.html' %}
    {% block title %}文章列表 - 我的博客{% endblock %}
    {% block content %}
        <h1>所有文章</h1>
        {% for post in posts %}
            <div class="post">
                <h2><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h2>
                <div class="post-meta">
                    作者: {{ post.author }} | 发布于: {{ post.created_at|date:"Y-m-d H:i" }}
                </div>
            </div>
        {% empty %}
            <p>暂无文章。</p>
        {% endfor %}
    {% endblock %}
  4. 创建 post_detail.html (文章详情页): 在 blog/templates/blog/ 目录下创建 post_detail.html

    <!-- blog/templates/blog/post_detail.html -->
    {% extends 'blog/base.html' %}
    {% block title %}{{ post.title }} - 我的博客{% endblock %}
    {% block content %}
        <article class="post">
            <h1>{{ post.title }}</h1>
            <div class="post-meta">
                作者: {{ post.author }} | 发布于: {{ post.created_at|date:"Y-m-d H:i" }}
            </div>
            <hr>
            <p>{{ post.content|linebreaksbr }}</p>
        </article>
        {% if user == post.author %}
            <a href="{% url 'post_delete' pk=post.pk %}">删除这篇文章</a>
        {% endif %}
    {% endblock %}
  5. 创建 post_edit.html (新建/编辑文章页): 在 blog/templates/blog/ 目录下创建 post_edit.html

    <!-- blog/templates/blog/post_edit.html -->
    {% extends 'blog/base.html' %}
    {% block title %}{% if form.instance.pk %}编辑文章{% else %}新建文章{% endif %} - 我的博客{% endblock %}
    {% block content %}
        <h1>{% if form.instance.pk %}编辑文章{% else %}新建文章{% endif %}</h1>
        <form method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">保存</button>
        </form>
    {% endblock %}
  6. 创建 post_confirm_delete.html (删除确认页): 在 blog/templates/blog/ 目录下创建 post_confirm_delete.html

    <!-- blog/templates/blog/post_confirm_delete.html -->
    {% extends 'blog/base.html' %}
    {% block title %}确认删除 - 我的博客{% endblock %}
    {% block content %}
        <h1>你确定要删除 "{{ post.title }}" 吗?</h1>
        <form method="post">
            {% csrf_token %}
            <button type="submit">确认删除</button>
            <a href="{% url 'post_detail' pk=post.pk %}">取消</a>
        </form>
    {% endblock %}

第十三步:运行和测试

  1. 确保你的开发服务器正在运行 (python manage.py runserver)。
  2. 在浏览器中访问 http://127.0.0.1:8000/
    • 你应该能看到你在后台创建的所有文章列表。
    • 点击文章标题,可以进入详情页。
    • 如果你以超级用户身份登录,你会在导航栏看到“写新文章”的链接,点击它可以创建新文章。
    • 在文章详情页,如果你是文章作者,你会看到“删除这篇文章”的链接。

进阶提示

  • PyCharm 的 Django Console: 在 PyCharm 右下角,你可以找到 Django Console,它是一个已经配置好 Django 环境的 Python 交互式控制台,你可以直接在里面执行 Post.objects.all() 这样的代码来调试。
  • 数据库工具: PyCharm Professional 版提供了强大的数据库工具,你可以在右下角的 Database 标签页中直接连接和操作你的 SQLite 数据库,非常方便。
  • 静态文件: 在 settings.py 中配置 STATIC_URLSTATICFILES_DIRS,在生产环境中,你需要使用 python manage.py collectstatic 来收集所有静态文件到一个地方。
  • 调试: 在代码的任意一行行号左侧点击,可以设置断点,然后以 Debug 模式运行服务器(点击工具栏上的虫子图标),程序会在断点处暂停,你可以查看变量值,单步执行,是调试代码的利器。

恭喜你!你已经成功使用 PyCharm 和 Django 从零开始构建了一个功能完整的博客应用,这个项目涵盖了 Django 开发的核心流程,是学习 Django 的绝佳起点。

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