杰瑞科技汇

Django web开发如何快速上手?

目录

  1. Django 是什么?
  2. 为什么选择 Django?
  3. 环境准备
  4. 核心概念:MTV 架构
  5. 开发流程:一个完整的 Django 项目示例
    • 步骤 1:创建项目和应用
    • 步骤 2:定义模型
    • 步骤 3:配置数据库
    • 步骤 4:创建和管理后台
    • 步骤 5:创建视图和 URL 路由
    • 步骤 6:编写模板
    • 步骤 7:静态文件处理
  6. Django 进阶
    • 表单处理
    • 用户认证系统
    • 类视图
    • 中间件
  7. 项目部署
  8. 学习资源和最佳实践

Django 是什么?

Django 是一个由 Python 编写的高级 Web 框架,它遵循 "电池已 included"(Batteries Included) 的理念,意味着它自带了许多 Web 开发中常用的功能模块,让你可以专注于业务逻辑,而不用重复造轮子。

Django web开发如何快速上手?-图1
(图片来源网络,侵删)

Django 遵循 MVC 设计模式,但在 Django 中,它被具体化为 MTV 模式。

为什么选择 Django?

  • 快速开发:Django 的高度抽象和丰富的内置库让你能快速构建原型和完整的应用。
  • 安全:Django 默认提供了许多安全措施,如防止 SQL 注入、跨站脚本攻击、跨站请求伪造等。
  • 可扩展:从一个小型博客到像 Instagram、Pinterest 这样的大型网站,Django 都能很好地应对。
  • 强大的 ORM:对象关系映射让你可以用 Python 代码操作数据库,而无需编写复杂的 SQL 语句。
  • 完善的管理后台:几行代码就能自动生成一个功能强大的后台管理界面,用于管理你的数据。
  • 活跃的社区:拥有庞大而活跃的开发者社区,文档齐全,第三方库丰富。

环境准备

在开始之前,你需要准备好 Python 环境。

  1. 安装 Python:从 Python 官网 下载并安装最新稳定版的 Python。

  2. 安装虚拟环境:强烈建议为每个项目创建一个独立的虚拟环境,以避免包版本冲突。

    Django web开发如何快速上手?-图2
    (图片来源网络,侵删)
    # 创建一个名为 myproject_env 的虚拟环境
    python -m venv myproject_env
    # 激活虚拟环境
    # Windows:
    myproject_env\Scripts\activate
    # macOS / Linux:
    source myproject_env/bin/activate
  3. 安装 Django:在激活的虚拟环境中,使用 pip 安装 Django。

    pip install django

核心概念:MTV 架构

理解 MTV 是学习 Django 的关键。

  • M - Model (模型):负责与数据库交互,定义你的数据结构(如文章、用户、评论等),Django 会根据这些模型自动创建数据库表。
  • T - Template (模板):负责展示层,是 HTML 文件,其中可以嵌入 Django 的模板语言 来动态地显示数据。
  • V - View (视图):业务逻辑层,它是 Python 函数或类,接收 Web 请求,从 Model 中获取数据,然后将数据传递给 Template,最后生成一个 HTTP 响应返回给用户。

数据流URL -> View -> Model -> View -> Template -> Response

开发流程:一个完整的 Django 项目示例

我们将创建一个简单的博客应用,包含文章列表和文章详情页。

Django web开发如何快速上手?-图3
(图片来源网络,侵删)

步骤 1:创建项目和应用

  • 项目:一个 Django 项目的实例,是配置和应用的集合。
  • 应用:一个 Web 应用,实现特定的功能(如博客、商店、论坛等)。
# 创建一个名为 myblog 的新项目
django-admin startproject myblog
# 进入项目目录
cd myblog
# 创建一个名为 blog 的新应用
python manage.py startapp blog

现在你的项目结构应该如下:

myblog/
├── myblog/
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── blog/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations/
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── manage.py

注册应用:打开 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',  # 添加这行
]

步骤 2:定义模型

打开 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)
    content = models.TextField()
    # 作者关联到内置的 User 模型
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    created_at = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.title

创建数据库迁移:Django 需要将你的模型定义转换为数据库表结构。

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

步骤 3:配置数据库

默认情况下,Django 使用 SQLite,这是一个轻量级的文件数据库,非常适合开发,在生产环境中,你可能会使用 PostgreSQL 或 MySQL。

  • SQLite: 无需额外配置,直接使用。
  • PostgreSQL/MySQL: 需要安装相应的数据库客户端库(如 psycopg2-binary),然后在 settings.pyDATABASES 设置中配置连接信息。

步骤 4:创建和管理后台

Django 最酷的功能之一就是自动生成后台。

  1. 创建超级用户

    python manage.py createsuperuser

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

  2. 注册模型:打开 blog/admin.py,将你的 Post 模型注册到后台。

    # blog/admin.py
    from django.contrib import admin
    from .models import Post
    admin.site.register(Post)
  3. 运行服务器并访问后台

    python manage.py runserver

    打开浏览器,访问 http://127.0.0.1:8000/admin/,用你刚才创建的超级用户登录,你就可以在这里创建、编辑和删除文章了!

步骤 5:创建视图和 URL 路由

视图是处理请求并返回响应的核心。

  1. 编写视图:打开 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().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})
  2. 配置 URL 路由

    • 在应用内部创建 urls.py 文件 (blog/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'),
      ]
    • 在主项目的 urls.py (myblog/urls.py) 中包含应用的 URL。

      # myblog/urls.py
      from django.contrib import admin
      from django.urls import path, include
      urlpatterns = [
          path('admin/', admin.site.urls),
          path('blog/', include('blog.urls')),  # 添加这行
      ]

步骤 6:编写模板

模板是用户最终看到的 HTML 页面。

  1. 创建模板目录结构:Django 默认在 templates 目录下查找模板,你需要按照应用的名称创建子目录,以避免模板名冲突。

    blog/
    └── templates/
        └── blog/
            ├── base.html      # 基础模板,包含通用的头部和尾部
            ├── post_list.html # 文章列表页
            └── post_detail.html # 文章详情页
  2. 编写模板代码

    • blog/templates/blog/base.html

      <!DOCTYPE html>
      <html lang="zh">
      <head>
          <meta charset="UTF-8">
          <title>我的博客</title>
      </head>
      <body>
          <header>
              <h1><a href="{% url 'post_list' %}">我的博客</a></h1>
          </header>
          <main>
              {% block content %}
              {# 子模板将在这里填充内容 #}
              {% endblock %}
          </main>
      </body>
      </html>
    • blog/templates/blog/post_list.html

      {% extends 'blog/base.html' %}
      {% block content %}
          <h2>文章列表</h2>
          {% for post in posts %}
              <article>
                  <h3><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h3>
                  <p>{{ post.created_at }}</p>
              </article>
          {% empty %}
              <p>暂无文章。</p>
          {% endfor %}
      {% endblock %}
    • blog/templates/blog/post_detail.html

      {% extends 'blog/base.html' %}
      {% block content %}
          <article>
              <h2>{{ post.title }}</h2>
              <p><small>作者: {{ post.author }} | 发布于: {{ post.created_at }}</small></p>
              <hr>
              <p>{{ post.content }}</p>
          </article>
      {% endblock %}

步骤 7:静态文件处理

静态文件是 CSS、JavaScript、图片等不随每次请求而改变的内容。

  1. 创建静态文件目录:与 templates 类似,推荐在应用下创建 static 目录,并按应用名组织。

    blog/
    └── static/
        └── blog/
            └── css/
                └── style.css
  2. 在模板中引用静态文件

    • 首先在模板的顶部加载 static
    • 然后使用 {% static %} 标签来引用文件路径。
    <!-- blog/templates/blog/base.html -->
    {% load static %}
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>我的博客</title>
        <link rel="stylesheet" href="{% static 'blog/css/style.css' %}">
    </head>
    <!-- ... -->
  3. 配置 STATIC_URL:在 settings.py 中,STATIC_URL = '/static/' 已经默认配置好了,当你在 DEBUG=True(开发模式)时,Django 会自动提供这些静态文件。

Django 进阶

表单处理

Django 的 Form 类可以轻松处理用户输入、验证数据并生成 HTML 表单。

  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')
  2. 在视图中使用表单:处理 GET 和 POST 请求。

  3. 在模板中渲染表单{{ form.as_p }} 可以快速生成表单段落。

用户认证系统

Django 自带一个强大的用户认证系统,处理用户注册、登录、注销、密码管理等,你可以直接使用它,也可以进行自定义。

类视图

视图不一定要是函数,也可以是类,类视图提供了更强大的代码组织和复用能力,ListView(列表视图)、DetailView(详情视图)、CreateView(创建视图)等,可以大大减少视图中的代码量。

中间件

中间件是一个轻量级的“插件”,用于在请求和响应处理的整个生命周期中执行代码,你可以用中间件来实现用户认证、CSRF 保护、记录请求日志等。

项目部署

开发完成后,你需要将项目部署到生产服务器上。

  1. 设置 DEBUG = False:在 settings.py 中,将 DEBUG 设置为 False,并设置 ALLOWED_HOSTS

    # myblog/settings.py
    DEBUG = False
    ALLOWED_HOSTS = ['yourdomain.com', 'your_server_ip']
  2. 使用 WSGI 服务器:Django 自带的开发服务器 (runserver) 不适合生产环境,你需要使用 WSGI 服务器,如 GunicornuWSGI

    # 安装 Gunicorn
    pip install gunicorn
    # 运行 Gunicorn
    gunicorn --workers 3 myblog.wsgi:application
  3. 使用反向代理:直接让用户访问 Gunicorn 端口不安全,通常使用 Nginx 或 Apache 作为反向代理。

    • Nginx:接收来自外部的 HTTP/HTTPS 请求。
    • Gunicorn:在内部运行你的 Django 应用,处理 Nginx 转发过来的请求。
  4. 使用环境变量:将敏感信息(如数据库密码、密钥)存储在环境变量中,而不是硬编码在 settings.py 中,可以使用 python-decoupledjango-environ 库。

  5. 使用 Docker:将你的应用、依赖和配置打包到一个 Docker 容器中,实现环境一致性和简化部署。

学习资源和最佳实践

  • 官方文档Django Documentation 是最权威、最全面的学习资料。
  • Django Girls Tutorial:一个非常好的入门教程,手把手教你构建一个博客。
  • 最佳实践
    • 保持应用小而专注。
    • 善用 Django 的内置功能,不要重复造轮子。
    • 编写可复用的模板标签和过滤器。
    • 使用 get_absolute_url() 为模型定义规范的 URL。
    • 定期更新你的依赖包以获取安全补丁。

希望这份指南能帮助你顺利入门 Django 开发!祝你编码愉快!

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