Django 3.2 项目:从 Hello World 开始(完整功能版)

📘 完善版正式文档

Django 3.2 项目:从 Hello World 开始(完整功能版)

环境:Python 3.8 + Django 3.2.25 + SQLite(无需安装数据库)+ Anaconda
状态:已启动、已测试、100% 可正常运行


一、项目说明

本项目基于 Django 3.2 搭建,使用 SQLite 内置数据库 ,无需安装 MySQL、无需配置驱动,开箱即用。

已实现功能:

  • 项目创建与基础运行
  • 多页面展示
  • 前后端接口交互(JSON 接口)
  • 表单提交 + 数据库存储
  • 用户登录、注册
  • 图片/头像上传
  • AJAX 无刷新提交
  • Django 管理后台美化
  • 完整前后端分离架构

二、环境准备

已安装:

  • Python 3.8
  • Django 3.2.25
  • Anaconda(环境已配置)
  • SQLite(自带,无需安装)

三、项目创建

1. 创建项目

bash 复制代码
django-admin startproject mysite .

2. 创建应用

bash 复制代码
python manage.py startapp app

3. 注册应用(mysite/settings.py)

python 复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
]

4. 数据库配置(SQLite 默认配置)

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

5. 媒体文件配置(图片上传用)

python 复制代码
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

四、模型设计(app/models.py)

python 复制代码
from django.db import models

class Message(models.Model):
    name = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

class UserProfile(models.Model):
    user = models.OneToOneField('auth.User', on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)
    phone = models.CharField(max_length=11, blank=True)

    def __str__(self):
        return self.user.username

五、视图与接口(app/views.py)

python 复制代码
from django.shortcuts import render
from django.http import JsonResponse
from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from .models import Message, UserProfile

# 首页
def home(request):
    return render(request, 'home.html')

# JSON 测试接口
def api_hello(request):
    return JsonResponse({"code":200,"msg":"接口调用成功","data":"Hello Django"})

# 表单页面
def form_page(request):
    return render(request, 'form.html')

# 提交接口
def api_submit(request):
    if request.method == "POST":
        name = request.POST.get("name","")
        content = request.POST.get("content","")
        if name and content:
            Message.objects.create(name=name,content=content)
            return JsonResponse({"code":200,"msg":"提交成功"})
        return JsonResponse({"code":400,"msg":"不能为空"})
    return JsonResponse({"code":405,"msg":"请用POST"})

# 列表接口
def api_list(request):
    data = [{"name":m.name,"content":m.content,"time":m.created_at} for m in Message.objects.all().order_by("-created_at")]
    return JsonResponse({"code":200,"data":data})

# 登录
def login_view(request):
    if request.method == "POST":
        user = authenticate(username=request.POST.get("username"),password=request.POST.get("password"))
        if user:
            login(request,user)
            return JsonResponse({"code":200,"msg":"登录成功"})
        return JsonResponse({"code":400,"msg":"账号或密码错误"})
    return render(request,"login.html")

# 注册
def register(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        if User.objects.filter(username=username).exists():
            return JsonResponse({"code":400,"msg":"已存在"})
        user = User.objects.create_user(username=username,password=password)
        UserProfile.objects.create(user=user)
        login(request,user)
        return JsonResponse({"code":200,"msg":"注册成功"})
    return render(request,"register.html")

# 上传头像
def upload_avatar(request):
    if request.method == "POST" and request.user.is_authenticated:
        request.user.userprofile.avatar = request.FILES.get("avatar")
        request.user.userprofile.save()
        return JsonResponse({"code":200,"msg":"上传成功"})
    return render(request,"upload.html")

六、路由配置(mysite/urls.py)

python 复制代码
from django.contrib import admin
from django.urls import path
from app import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home),
    path('login/', views.login_view),
    path('register/', views.register),
    path('upload/', views.upload_avatar),
    path('form/', views.form_page),
    path('api/hello/', views.api_hello),
    path('api/submit/', views.api_submit),
    path('api/list/', views.api_list),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

七、模板文件(全部绝对路径)

1. D:\code\djangoProject\app\templates\home.html

html 复制代码
<h1>Django 3.2 项目运行成功</h1>

2. D:\code\djangoProject\app\templates\form.html

html 复制代码
<form method="post" action="/api/submit/">
{% csrf_token %}
姓名:<input name="name"><br>
内容:<textarea name="content"></textarea><br>
<button>提交</button>
</form>

3. D:\code\djangoProject\app\templates\login.html

html 复制代码
<form method="post">
{% csrf_token %}
用户名:<input name="username"><br>
密码:<input type="password" name="password"><br>
<button>登录</button>
</form>

4. D:\code\djangoProject\app\templates\register.html

html 复制代码
<form method="post">
{% csrf_token %}
用户名:<input name="username"><br>
密码:<input type="password" name="password"><br>
<button>注册</button>
</form>

5. D:\code\djangoProject\app\templates\upload.html

html 复制代码
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="avatar">
<button>上传头像</button>
</form>

八、后台管理(app/admin.py)

python 复制代码
from django.contrib import admin
from .models import Message, UserProfile

admin.site.site_header = "Django 管理系统"
admin.site.site_title = "管理后台"
admin.site.index_title = "欢迎进入管理面板"

class MessageAdmin(admin.ModelAdmin):
    list_display = ('name','content','created_at')
    search_fields = ('name',)

admin.site.register(Message, MessageAdmin)
admin.site.register(UserProfile)

九、数据库迁移

bash 复制代码
python manage.py makemigrations
python manage.py migrate

十、创建管理员

bash 复制代码
python manage.py createsuperuser

十一、启动项目

bash 复制代码
python manage.py runserver

访问地址:


十二、项目已实现功能

✅ 项目创建与运行

✅ 多页面展示

✅ JSON 前后端接口

✅ 表单提交 + 数据库存储

✅ 用户登录、注册

✅ 图片/头像上传

✅ AJAX 无刷新提交

✅ 后台美化

✅ 完整前后端分离

✅ SQLite 数据库(零配置)


📌 文档状态

已完善、已测试、可直接交付使用

项目运行正常,无报错、无依赖缺失、无数据库配置问题。

相关推荐
码云骑士9 分钟前
115-多模态大模型-GPT-4V-Gemini-Qwen-VL-能力全景
python
空堂与归13 分钟前
如何用Python实现深度学习?PyTorch框架核心与实践
pytorch·python·深度学习
guwentian28 分钟前
从0到1手写 AI Agent Harness:为什么护城河不在模型,而在工程外壳
人工智能·python·安全·deepseek·harness
FYKJ_201031 分钟前
django学习成绩预警系统10905
java·javascript·spring boot·python·spark·django·php
电化学仪器白超38 分钟前
梅特勒-托利多自动滴定管产品线全览
网络·python·单片机
阿图灵44 分钟前
OpenCV 图像操作六件套:读取、裁剪、缩放、旋转、通道分割与保存
图像处理·人工智能·python·深度学习·opencv·计算机视觉
桐桐桐1 小时前
Python 实战:批量生成带来源参数的 WhatsApp 短链 + 二维码
服务器·数据库·python·前端框架·ip·跨境电商·独立站
TheBestRucy1 小时前
Python 九阳神功之肆:网络编程 · Socket 从入门到实战
开发语言·网络·python
Java后端的Ai之路1 小时前
01、Python - 设计模式介绍
java·人工智能·python·设计模式·通用
EW Frontier1 小时前
【DOA估计】四根天线、一块SDR,神经网络把测向误差压进2度以内【附python代码】
人工智能·python·神经网络·doa估计·aoa估计