01-hello-world

知识库
知识库文档
/tech-stacks/django/examples/01-hello-world.md

文档

Django Hello World —— 你的第一个 Django 项目

目标

创建 Django 项目与第一个应用,理解:

  • Django 项目 vs 应用的区别
  • urls.py 路由与 views.py 视图的关系
  • 模板渲染与动态数据传递
  • manage.py 命令行工具

完整步骤

步骤 1:创建项目

django-admin startproject mysite
cd mysite

生成的结构:

mysite/
├── manage.py           # Django 命令行工具
└── mysite/
    ├── __init__.py
    ├── settings.py     # 全局配置
    ├── urls.py         # 根 URL 路由
    ├── asgi.py         # ASGI 入口
    └── wsgi.py         # WSGI 入口

步骤 2:创建应用

python manage.py startapp hello
hello/
├── __init__.py
├── admin.py        # 管理后台注册
├── apps.py         # 应用配置
├── models.py       # 数据库模型
├── views.py        # 视图函数/类
├── urls.py         # 应用路由(需手动创建)
├── tests.py        # 测试
└── migrations/     # 数据库迁移

步骤 3:编写视图

# hello/views.py
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from django.views import View
from datetime import datetime


# 方式一:函数视图(最简单)
def index(request):
    """首页 —— 返回纯文本"""
    return HttpResponse("""
        <h1>🚀 Hello, Django!</h1>
        <ul>
            <li><a href='/hello/'>/hello/</a> — 问候</li>
            <li><a href='/hello/?name=Vibe'>/hello/?name=Vibe</a> — 带参数</li>
            <li><a href='/api/status/'>/api/status/</a> — JSON 接口</li>
        </ul>
    """)


def hello(request):
    """查询参数问候"""
    name = request.GET.get("name", "World")
    return HttpResponse(f"Hello, {name}!")


def status(request):
    """JSON 响应"""
    return JsonResponse({
        "status": "ok",
        "framework": "Django",
        "version": "5.0",
        "server_time": datetime.now().isoformat(),
    })


# 方式二:类视图(适合 RESTful)
class HelloView(View):
    def get(self, request):
        name = request.GET.get("name", "World")
        return JsonResponse({"message": f"Hello, {name}!", "method": "GET"})

    def post(self, request):
        import json
        try:
            data = json.loads(request.body)
            name = data.get("name", "World")
        except json.JSONDecodeError:
            name = "World"
        return JsonResponse({"message": f"Hello, {name}!", "method": "POST"}, status=201)

步骤 4:配置路由

# hello/urls.py(新建此文件)
from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("hello/", views.hello, name="hello"),
    path("api/status/", views.status, name="status"),
    # 类视图用 as_view()
    path("api/hello/", views.HelloView.as_view(), name="hello_api"),
]
# mysite/urls.py(修改根路由,include 应用路由)
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("hello.urls")),  # 引入应用路由
]

步骤 5:注册应用

# mysite/settings.py
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "hello",  # ← 添加此行
]

步骤 6:运行

python manage.py runserver

# 访问以下 URL:
# http://127.0.0.1:8000/
# http://127.0.0.1:8000/hello/?name=Vibe
# http://127.0.0.1:8000/api/status/
# http://127.0.0.1:8000/api/hello/
# curl -X POST http://127.0.0.1:8000/api/hello/ -H "Content-Type: application/json" -d '{"name":"Django"}'

预期输出

GET /api/status/ 返回:

{
  "status": "ok",
  "framework": "Django",
  "version": "5.0",
  "server_time": "2025-01-15T10:30:00.123456"
}

POST /api/hello/ 返回:

{"message": "Hello, Django!", "method": "POST"}

Django 请求处理流程

浏览器请求
    ↓
URL Dispatcher(urls.py)—— 匹配路由
    ↓
View(views.py) —— 处理业务逻辑
    ↓
Model(models.py)—— 操作数据库(可选)
    ↓
Template(templates/)—— 渲染 HTML(可选)
    ↓
HttpResponse —— 返回给浏览器

关键要点

概念 说明
项目 vs 应用 项目 = 整个网站;应用 = 一个功能模块(如博客、用户)
urlpatterns URL 路由列表,从上到下匹配,先匹配先服务
path(str, view, name) 路由定义:URL模式 → 视图 → 命名(用于反向解析)
include() 将子路由表插入到当前路由,实现模块化
request.GET 查询参数字典(QueryDict)
JsonResponse 自动 JSON 序列化 + Content-Type: application/json

信息

路径
/tech-stacks/django/examples/01-hello-world.md
更新时间
2026/5/30