杰瑞科技汇

python django开发网站

第一部分:Django 核心概念

在开始编码前,理解 Django 的核心思想至关重要,Django 遵循 MVT (Model-View-Template) 架构模式。

python django开发网站-图1
(图片来源网络,侵删)
  1. Model (模型)

    • 作用:定义你的数据结构,它就像是数据库的“蓝图”,描述了你的网站有哪些数据(文章、用户、评论),以及这些数据有哪些字段(标题、内容、发布日期)。
    • 对应关系Model 最终会映射到数据库中的表。
  2. View (视图)

    • 作用:业务逻辑的核心,它接收来自用户的请求(比如用户访问 /articles/1/),处理数据(从数据库读取文章),然后决定将什么数据返回给用户。
    • 对应关系View 是一个 Python 函数或类,它连接 ModelTemplate
  3. Template (模板)

    • 作用:负责展示数据,它是一个包含 HTML 代码和特殊 Django 模板语言(DTL)的文件,视图将数据传递给模板,模板将这些数据渲染成最终的 HTML 页面发送给用户的浏览器。
    • 对应关系Template 决定了用户最终看到的样子。

数据流程:用户请求 URL -> URLs (路由) -> View (处理逻辑,从 Model 获取数据) -> Template (渲染数据,生成 HTML) -> 返回给用户。

python django开发网站-图2
(图片来源网络,侵删)

第二部分:开发一个简单的博客网站

我们将开发一个简单的博客,包含以下功能:

  • 首页:显示所有文章列表。
  • 文章详情页:显示单篇文章的完整内容。
  • 后台管理:一个自动生成的管理界面,用于发布和管理文章。

步骤 1:环境准备

  1. 安装 Python:确保你的系统已经安装了 Python (推荐 3.8+ 版本)。

  2. 创建虚拟环境:这是一个好习惯,可以隔离不同项目的依赖。

    # 创建一个名为 myblog 的虚拟环境
    python -m venv myblog
    # 激活虚拟环境
    # Windows:
    myblog\Scripts\activate
    # macOS/Linux:
    source myblog/bin/activate
  3. 安装 Django:在激活的虚拟环境中,使用 pip 安装 Django。

    pip install Django

步骤 2:创建 Django 项目和应用

  1. 创建项目:使用 django-admin 命令创建一个名为 mysite 的项目。

    django-admin startproject mysite

    这会创建一个 mysite 目录,包含以下文件:

    • manage.py: 一个命令行工具,用于与你的项目进行交互。
    • mysite/: 项目的主包。
      • __init__.py: 一个空文件,告诉 Python 这是一个包。
      • settings.py: 项目的所有设置(数据库、应用、中间件等)。
      • urls.py: 项目的 URL 声明(URL 路由表)。
      • asgi.pywsgi.py: 用于部署的文件。
  2. 创建应用:一个项目可以包含多个应用,每个应用负责一项具体功能,我们创建一个名为 blog 的应用来处理博客功能。

    cd mysite
    python manage.py startapp blog

    这会创建一个 blog 目录,包含模型、视图、模板等文件。

  3. 注册应用:必须告诉 Django 这个 blog 应用是项目的一部分,打开 mysite/settings.py 文件,在 INSTALLED_APPS 列表中添加 'blog'

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

步骤 3:定义模型 (Model)

我们定义文章的数据结构,编辑 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="创建时间")
    author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
    class Meta:
        verbose_name = "文章"
        verbose_name_plural = "文章"
        ordering = ['-created_at'] # 按创建时间降序排列
    def __str__(self):
        return self.title
  • CharFieldTextField 是不同的字段类型。
  • created_at = models.DateTimeField(auto_now_add=True) 表示创建文章时自动记录时间。
  • __str__ 方法定义了对象的字符串表示形式,这在后台管理中很有用。

步骤 4:创建和迁移数据库

Django 的模型需要被转换成实际的数据库表。

  1. 生成迁移文件:这个命令会检查你的模型变化并生成一个迁移脚本。
    python manage.py makemigrations
  2. 应用迁移:这个命令会执行迁移脚本,在数据库中创建相应的表。
    python manage.py migrate

    默认情况下,Django 使用 SQLite 数据库,它会创建一个 db.sqlite3 文件。

步骤 5:配置 URL 和视图 (View & URL)

  1. 配置项目 URL:打开 mysite/urls.py,将所有请求转发给 blog 应用的 urls.py

    # mysite/urls.py
    from django.contrib import admin
    from django.urls import path, include
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('blog.urls')),  # 添加这一行,将根路径的请求交给 blog.urls 处理
    ]
  2. 创建应用 URL:在 blog 目录下创建一个 urls.py 文件。

    # blog/urls.py
    from django.urls import path
    from . import views
    urlpatterns = [
        # 首页,显示所有文章列表
        path('', views.post_list, name='post_list'),
        # 文章详情页,/post/1/
        path('post/<int:pk>/', views.post_detail, name='post_detail'),
    ]
    • path('', views.post_list, name='post_list'):当访问根路径时,调用 blog.views.post_list 函数。
    • <int:pk> 是一个 URL 捕获器,它会捕获一个整数作为 pk (primary key),并将其传递给视图函数。
  3. 编写视图函数:编辑 blog/views.py 文件。

    # blog/views.py
    from django.shortcuts import render, get_object_or_404
    from .models import Post
    def post_list(request):
        # 获取所有已发布的文章,按创建日期降序排列
        posts = Post.objects.all()
        # 渲染模板,并传递 posts 变量
        return render(request, 'blog/post_list.html', {'posts': posts})
    def post_detail(request, pk):
        # 根据 pk 获取单篇文章,如果不存在则返回 404 错误
        post = get_object_or_404(Post, pk=pk)
        return render(request, 'blog/post_detail.html', {'post': post})

步骤 6:创建模板

  1. 创建模板目录:Django 默认在 templates 目录下寻找模板,为了组织清晰,我们创建 blog/templates/blog/ 目录结构。

    mysite/
    └── blog/
        └── templates/
            └── blog/
                └── post_list.html
                └── post_detail.html
  2. 编写 post_list.html (首页)

    <!-- blog/templates/blog/post_list.html -->
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>我的博客</title>
    </head>
    <body>
        <h1>文章列表</h1>
        <ul>
            {% for post in posts %}
                <li>
                    <a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
                </li>
            {% empty %}
                <li>暂无文章</li>
            {% endfor %}
        </ul>
    </body>
    </html>
    • {% for ... %}{% endfor %} 是循环标签。
    • {{ post.title }} 是变量输出标签。
    • {% url 'post_detail' pk=post.pk %} 使用了我们在 urls.py 中定义的 name 来生成 URL,这是一种好习惯。
  3. 编写 post_detail.html (详情页)

    <!-- blog/templates/blog/post_detail.html -->
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>{{ post.title }}</title>
    </head>
    <body>
        <h1>{{ post.title }}</h1>
        <p><strong>作者:</strong> {{ post.author.username }}</p>
        <p><strong>发布时间:</strong> {{ post.created_at }}</p>
        <hr>
        <p>{{ post.content }}</p>
        <a href="{% url 'post_list' %}">返回文章列表</a>
    </body>
    </html>

步骤 7:创建超级用户并访问后台管理

Django 自带一个非常强大的后台管理系统。

  1. 创建超级用户

    python manage.py createsuperuser

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

  2. 启动开发服务器

    python manage.py runserver
  3. 访问网站

    • 打开浏览器,访问 http://127.0.0.1:8000/,你应该能看到文章列表页面(虽然现在是空的)。
    • 访问 http://127.0.0.1:8000/admin/,用你刚刚创建的超级用户名和密码登录,登录后,你可以在 "Content types" 和 "Sessions" 下面看到 "Posts",点击 "Posts" -> "Add",就可以创建新文章了!创建几篇文章后,再回到首页查看效果。

第三部分:进阶主题与最佳实践

当你掌握了基础后,可以探索更多强大的 Django 功能:

  1. 静态文件处理

    • 作用:处理 CSS、JavaScript、图片等文件。
    • 配置:在 settings.py 中设置 STATIC_URLSTATICFILES_DIRS,在模板中使用 {% load static %}{% static 'path/to/file.css' %} 来引用静态文件。
  2. 表单处理

    • 作用:创建用户提交表单的页面(如评论、登录、注册)。
    • 实现:Django 提供了 django.forms 模块,可以轻松创建表单类,处理用户输入、验证数据并保存到数据库。
  3. 用户认证系统

    • 作用:处理用户注册、登录、注销、密码修改等功能。
    • 实现:Django 内置了完整的用户认证系统,你只需要在 urls.py 中引入 django.contrib.auth.urls,并创建相应的登录/注销模板即可。
  4. 类视图

    • 作用:将视图函数封装成类,使代码更结构化、可复用。

    • 实现ListView 可以自动为你获取一个列表并渲染到模板,DetailView 可以自动获取单个对象,你的 views.py 会变成这样:

      from django.views.generic import ListView, DetailView
      from .models import Post
      class PostListView(ListView):
          model = Post
          template_name = 'blog/post_list.html'
          context_object_name = 'posts'
      class PostDetailView(DetailView):
          model = Post
          template_name = 'blog/post_detail.html'
          context_object_name = 'post'
  5. 部署

    • 作用:将你的本地网站部署到云服务器上,让所有人都能访问。
    • 流程
      1. 使用 Gunicorn 或 uWSGI 作为应用服务器。
      2. 使用 Nginx 作为反向代理和静态文件服务器。
      3. 配置数据库(如 PostgreSQL)。
      4. 使用 Docker 可以极大地简化部署流程。

使用 Django 开发网站是一个结构化、高效的过程,从 MVT 架构开始,通过定义模型、编写视图、创建模板和配置 URL,你可以快速构建功能强大的 Web 应用。

推荐资源

  • 官方文档Django Documentation (强烈推荐,非常详尽)
  • Django Girls Tutorial:一个为初学者准备的免费在线教程,非常经典。
  • 实践项目:尝试添加评论功能、分页、搜索等功能来巩固你的知识。
分享:
扫描分享到社交APP
上一篇
下一篇