Django 项目开发整体步骤(0 开始)+进阶
Django 项目开发整体步骤-基础版
这里从 0 到 1 演示了如何使用 Django 框架。
跟着教程操作,你可以得到一个完整流程:在后台添加商品或订单数据,然后前端页面能够展示这些数据,并支持简单的下单操作。
1. 环境准备
- 安装 Python(推荐 3.10+)。
- 创建虚拟环境(venv 或 virtualenv)。
# Linux / Mac
mkdir django_demo
cd django_demo
python3 -m venv myenv
source myenv/bin/activate
# Windows
python -m venv myenv
myenv\Scripts\activate - 安装 Django(pip install django)。
pip install django
python -m django --version #如果显示版本号,说明安装成功。 - 安装其他可能用到的依赖(如数据库驱动 mysqlclient、psycopg2 等)。
pip install mysqlclient
pip install psycopg2-binary2. 创建 Django 项目
- 使用 django-admin startproject <project_name> 创建项目骨架。
django-admin startproject mysite #项目名叫 mysite
#执行后,目录结构如下:
django_demo/
└── mysite/
├── manage.py #管理项目的命令入口(运行、迁移、创建 app 等)
├── mysite/
│ ├── __init__.py
│ ├── asgi.py #部署入口(生产环境使用)
│ ├── settings.py #项目配置文件(数据库、应用、时区等)
│ ├── urls.py #项目主路由配置
│ └── wsgi.py #部署入口(生产环境使用)
- 配置 settings.py(打开
mysite/settings.py)(数据库、时区、静态文件路径等)。# 修改时区为中国
TIME_ZONE = 'Asia/Shanghai'
# 修改语言为中文
LANGUAGE_CODE = 'zh-hans'
# 允许所有本地访问
ALLOWED_HOSTS = ['*']
- 运行开发服务器
cd mysite
python manage.py runserver
python manage.py runserver 0.0.0.0:8000
#终端显示:
Starting development server at http://127.0.0.1:8000/3. 创建应用(App)
- 使用 python manage.py startapp <app_name> 创建应用。
Django 的项目通常由多个 App(应用) 组成,每个 App 都是一个独立的功能模块,例如:
goods/ 商品模块(商品信息); orders/ 订单模块(下单、查看订单)
python manage.py startapp goods
python manage.py startapp orders
#目录结构会变成这样
mysite/
├── manage.py
├── mysite/
└── goods 和 orders/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
- 在 settings.py(mysite/settings.py) 中 INSTALLED_APPS 注册应用。

4. 设计模型(Models)
- 根据需求设计数据库模型(
goods/models.py)。from django.db import models
class Goods(models.Model):
name = models.CharField(max_length=100, verbose_name="商品名称")
price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name="价格")
stock = models.IntegerField(default=0, verbose_name="库存")
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
def __str__(self):
return self.name
class Meta:
verbose_name = "商品"
verbose_name_plural = "商品"
- 执行 python manage.py makemigrations 和 python manage.py migrate 创建表。
python manage.py makemigrations
python manage.py migrate5. 管理后台(Admin)
- 在 admin.py{} 注册模型,方便后台管理数据。 goods/admin.py
from django.contrib import admin
from .models import Goods
@admin.register(Goods)
class GoodsAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'price', 'stock', 'create_time')
- 创建后台管理员账号:
python manage.py createsuperuser 重启测试效果,通过界面添加商品和订单:【需要先按照第7步 配置一下路由】


6. 创建视图(Views)
- 使用函数视图(Function-Based View)或类视图(Class-Based View)。
- 编写业务逻辑,获取数据、处理请求。
goods/views.py , Function-Based View 示例
from django.shortcuts import render
from .models import Goods
def goods_list(request):
goods = Goods.objects.all() # 查询所有商品
return render(request, 'goods/list.html', {'goods': goods})7. 配置 URL 路由(URLs)
- 在项目主路由(mysite/urls.py)中引入应用路由。
from django.contrib import admin
from django.urls import path, include # include 本来没有的
urlpatterns = [
path('admin/', admin.site.urls),
path('goods/', include('goods.urls', namespace='goods')), # 商品模块
] - 在应用内 urls.py 配置路由 ( goods/urls.py)。
from django.urls import path
from . import views
app_name = 'goods' # 这一行非常关键,与主路由的namespace对应
urlpatterns = [
path('', views.index, name='index'), #默认走这里
path('goods_list/', views.goods_list, name='goods_list'), # 商品列表页
# 以后可以扩展其他路径,比如:
# path('detail/<int:goods_id>/', views.goods_detail, name='goods_detail')
]8. 模板和静态文件
- 配置模板路径。
# 在 mysite/settings.py 中,找到 TEMPLATES 配置:
TEMPLATES = [
{
...
'DIRS': [BASE_DIR / "templates"], # 新增这一行,统一存放模板文件
...
},
]
#根目录执行,就是跟manage.py 同级的目录
mkdir templates
mkdir templates/goods - 编写 HTML 文件,配置静态文件(CSS、JS、图片等)。
templates/goods/list.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>商品列表</title>
</head>
<body>
<h1>商品列表</h1>
<ul>
{% for item in goods %}
<li>
{{ item.name }} - ¥{{ item.price }} - 库存: {{ item.stock }}
<a href="{% url 'orders:create_order' item.id %}">购买</a>
</li>
{% empty %}
<li>暂无商品</li>
{% endfor %}
</ul>
</body>
</html>
测试效果:

进阶
上面是一个数据库查询, 现在实现购买的逻辑。
前置操作:
编写订单模型:orders/models.py:
from django.db import models
from goods.models import Goods
class Order(models.Model):
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品")
quantity = models.PositiveIntegerField(default=1, verbose_name="数量")
total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="总价")
create_time = models.DateTimeField(auto_now_add=True, verbose_name="下单时间")
def __str__(self):
return f"订单 #{self.id} - {self.goods.name}"
class Meta:
verbose_name = "订单"
verbose_name_plural = "订单"
生成并迁移数据库:
python manage.py makemigrations
python manage.py migrate管理后台-订单的:
from django.contrib import admin
from .models import Order
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
list_display = ('id', 'goods', 'quantity', 'total_price', 'create_time')
视图-订单:
from django.shortcuts import render, redirect
from .models import Order
from goods.models import Goods
#下单
def create_order(request, goods_id):
goods = Goods.objects.get(id=goods_id)
if request.method == "POST":
quantity = int(request.POST.get('quantity', 1))
total_price = goods.price * quantity
Order.objects.create(goods=goods, quantity=quantity, total_price=total_price)
return redirect('orders:order_list') # 下单成功后跳转到订单列表
return render(request, 'orders/create_order.html', {'goods': goods})
#查看订单
def order_list(request):
orders = Order.objects.all()
return render(request, 'orders/list.html', {'orders': orders})
路由-订单:
\mysite\urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('goods/', include('goods.urls', namespace='goods')), # 商品模块
path('orders/', include('orders.urls', namespace='orders')), # 订单模块
]
orders/urls.py
from django.urls import path
from . import views
app_name = 'orders'
urlpatterns = [
path('', views.order_list, name='order_list'), # 订单列表页
path('create/<int:goods_id>/', views.create_order, name='create_order'), # 下单页
]模板-订单列表
templates/orders/list.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>订单列表</title>
</head>
<body>
<h1>订单列表</h1>
<ul>
{% for order in orders %}
<li>
订单 #{{ order.id }} - {{ order.goods.name }} - 数量: {{ order.quantity }} - 总价: ¥{{ order.total_price }}
</li>
{% empty %}
<li>暂无订单</li>
{% endfor %}
</ul>
<a href="{% url 'goods:goods_list' %}">返回商品列表</a>
</body>
</html>下单模板
templates/orders/create_order.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>下单 - {{ goods.name }}</title>
</head>
<body>
<h1>购买 {{ goods.name }}</h1>
<form method="post">
{% csrf_token %}
数量: <input type="number" name="quantity" value="1" min="1" max="{{ goods.stock }}">
<button type="submit">下单</button>
</form>
<a href="{% url 'goods:goods_list' %}">返回商品列表</a>
</body>
</html>
商品模板加一句:
<a href="{% url 'orders:create_order' item.id %}">购买</a>
9. 表单和数据验证
- 使用 Django 的表单系统,替代手写的 HTML <form>。
- 数据验证和错误提示。
9.1 创建订单表单类:orders/forms.py
from django import forms
class CreateOrderForm(forms.Form):
quantity = forms.IntegerField(
label="数量",
min_value=1,
widget=forms.NumberInput(attrs={'class': 'form-control', 'value': 1})
)9.2 在视图中使用表单:修改 orders/views.py 中的 create_order:
from django.shortcuts import render, redirect, get_object_or_404
from .models import Order
from goods.models import Goods
from .forms import CreateOrderForm
#下单
def create_order(request, goods_id):
goods = get_object_or_404(Goods, id=goods_id)
if request.method == "POST":
form = CreateOrderForm(request.POST)
if form.is_valid():
quantity = form.cleaned_data['quantity']
total_price = goods.price * quantity
Order.objects.create(goods=goods, quantity=quantity, total_price=total_price)
return redirect('orders:order_list')# 下单成功后跳转到订单列表
else:
form = CreateOrderForm()
return render(request, 'orders/create_order.html', {'form': form, 'goods': goods})
#查看订单
def order_list(request):
orders = Order.objects.all()
return render(request, 'orders/list.html', {'orders': orders})9.3 修改模板使用 Django 表单标签:更新 templates/orders/create_order.html:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>下单 - {{ goods.name }}</title>
</head>
<body>
<h1>购买 {{ goods.name }}</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }} <!-- Django 自动渲染表单 -->
<button type="submit">下单</button>
</form>
<a href="{% url 'goods:goods_list' %}">返回商品列表</a>
</body>
</html>10. 用户认证与权限
- 使用 Django 自带的 auth 系统。
- 注册、登录、登出、权限管理。
11. 调试与测试
- 使用 Django 内置开发服务器 python manage.py runserver 调试。
- 编写单元测试(tests.py)。
- 查看日志、处理报错。
12. 部署与上线
- 配置 WSGI/ASGI(如 Gunicorn + Nginx)。
- 配置数据库(生产环境 MySQL/PostgreSQL)。
- 收集静态文件(python manage.py collectstatic)。
- 配置安全设置(DEBUG=False、ALLOWED_HOSTS 等)。

浙公网安备 33010602011771号