Python+Django+H5+MySQL项目搭建

1、环境安装

python是解释型的语言,需要安装python解释器。下载路径:Welcome to Python.org

鼠标放在Downloads 按钮上,会自动识别当前系统提供下载版本。点击 Python3.14.2 即可下载。 安装完成后使用命令进行验证:python --version,Mac/Linux需要跟上版本:python3 --version

2、项目创建

创建Django项目的方式有很多种,使用Django插件提供的命令或者使用PyCharm编译器直接创建。

2.1 基于命令行创建

ini 复制代码
# 安装django插件
pip install django
# 创建项目
[python安装路径]\Python313\Scripts\django-admin.exe startproject [项目名称]

2.2 使用Pycharm编译器

3、使用虚拟环境

Python 的虚拟环境(Virtual Environment)是一个独立的、隔离的 Python 运行环境,它的核心作用是解决项目间的依赖冲突,并确保不同项目使用不同版本的库和 Python 解释器。虚拟环境有很多种,python自带的venv,第三方工具virtualenv等等。下面介绍一下使用venv。

bash 复制代码
python -m venv myenv # 创建名为 myenv 的虚拟环境 (在项目根目录下执行,成功后可以看到myenv的目录)
myenv\Scripts\activate #激活虚拟环境(激活后命令行会有myenv的提示)
# 执行一些操作,比如安装django插件,当前安装只在这个环境内生效。启动项目、迁移数据等操作。
# 开发完成后,退出虚拟环境
deactivate # 退出虚拟环境

使用命令行操作比较麻烦,可以使用Pycharm绑定虚拟环境。下面演示绑定一个已经创建好的虚拟环境,当然Pycharm也支持创建项目的同时创建一个虚拟环境并且绑定。 Setting->Python->Interpreter->Add Interpreter->Add Local Interpreter->select existing

绑定成功后,后续所有的操作都会在当前虚拟环境内,打开终端命令行,可以看到myenv的提示:

3、目录结构

bash 复制代码
MyBlog/
├── manage.py              # Django 命令行工具
├── db.sqlite3             # SQLite 数据库文件
├── myenv/                 # Python 虚拟环境
│   ├── Lib/site-packages/ # 安装的第三方包
│   └── Scripts/activate*  # 虚拟环境激活脚本
└── MyBlog/                # 项目配置目录(项目名)
    ├── __init__.py        # 标识为 Python 包
    ├── settings.py        # 项目配置文件
    ├── urls.py            # URL 路由配置
    ├── asgi.py            # ASGI 服务器配置(异步)
    └── wsgi.py            # WSGI 服务器配置(同步

各文件/目录作用

根目录文件:

  • manage.py - Django 的命令行入口文件,用于执行管理任务

    bash 复制代码
    python manage.py runserver    # 启动开发服务器
    python manage.py migrate      # 数据库迁移
    python manage.py createsuperuser  # 创建超级用户
  • db.sqlite3 - SQLite 数据库文件,存储应用数据

虚拟环境 myenv/

  • 隔离 Python 环境,包含项目所需的依赖包
  • 使用前需激活: myenv\Scripts\activate

项目配置目录 MyBlog/

  • settings.py - 核心配置文件

    • DEBUG : 调试模式开关
    • INSTALLED_APPS : 已安装的应用列表
    • DATABASES : 数据库配置
    • MIDDLEWARE : 中间件列表
    • STATIC_URL : 静态文件路径
  • urls.py - URL 路由配置,定义 URL 到视图的映射

    • 当前配置: /admin/ 映射到管理后台
  • wsgi.py - WSGI 应用入口,用于部署到生产服务器(如 Gunicorn、uWSGI)

  • asgi.py - ASGI 应用入口,用于异步服务器(如 Daphne)

4、新建APP

在 Django 中,App(应用)是项目的功能模块,每个 App 通常对应一个特定的业务功能(如博客、用户管理)。 新建app命令:

bash 复制代码
# 在项目根目录下执行该命令
python .\manage.py startapp user apps

这是在根目录下面直接创建一个app,小项目不需要分模块,直接建一个app就行了,如果是大型项目需要分模块时,可以在根目录下新建一个apps目录,然后把app建在这个目录下面。但是要对新建好的apps.py文件里的name进行修改:从name = "user"修改为name = "apps.user"

bash 复制代码
# 在项目根目录下执行该命令
 python .\manage.py startapp user apps/user 

建好的app需要在项目配置目录下的setting.py文件的INSTALLED_APPS进行注册:

ini 复制代码
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "apps.user.apps.UserConfig" # 注意路径不要写错,这里对应的时user app下面的apps.py文件内容
]

以下是完整目录结构:

bash 复制代码
MyBlog/
├── manage.py              # Django 命令行管理工具
├── db.sqlite3             # SQLite 数据库文件(空)
├── myenv/                 # Python 虚拟环境
│   ├── Scripts/          # 激活/停用脚本(Windows)
│   ├── Lib/              # Python 库
│   └── site-packages/    # 已安装包(Django 6.0.1 等)
├── MyBlog/               # 项目配置目录
│   ├── __init__.py
│   ├── settings.py       # 项目配置文件
│   ├── urls.py           # URL 路由配置
│   ├── wsgi.py           # WSGI 应用入口
│   └── asgi.py           # ASGI 应用入口
└── apps/                 # 自定义应用目录
    └── user/             # 用户应用
        ├── __init__.py
        ├── apps.py       # 应用配置
        ├── models.py     # 数据模型(空)
        ├── views.py      # 视图函数(空)
        ├── admin.py      # 后台管理(空)
        ├── tests.py      # 测试文件
        └── migrations/   # 数据库迁移记录

5、视图函数关联路由地址

在apps/user目录下新建urls.py文件,可以使用pathre_path配置路径,re_path可以通过正则表达式匹配路由。

python 复制代码
from django.urls import path
from . import views  # 导入当前 App 的视图

urlpatterns = [ # 路径:/blog/
    path('list/', views.list),
]

在MyBlog/urls建立路由:

php 复制代码
from django.urls import path, include

urlpatterns = [
    path('user/', include('apps.user.urls')),
]

跟路由文件也可以自定义位置,通过setting.py可以进行配置:

ini 复制代码
ROOT_URLCONF = 'MyBlog.urls'

在apps/views.py中新建方法:

python 复制代码
from django.http import HttpResponse

def list(request):
    return HttpResponse("this user list")

启动运行后,可以通过访问 http://127.0.0.1:8000/user/list/ 看到返回结果:this user list。

6、视图函数返回HTML模板

apps/user下新建templates目录。然后新增html文件:user.html

css 复制代码
<html>
    <header></header>
    <body>
        <div>
            这是用户页面!!!
        </div>
    </body>
</html>

在apps/user/urls.py新增路由:

lua 复制代码
path('list-page/', views.listPage),

在apps/user/views.py新增函数:

python 复制代码
def listPage(request):
    return render(request, "user.html")

关于模板代码的路径,django会按照app的注册顺序依次去对应app目录下的templates去找。如果app里没有,会去根目录里的templates找。也可以通过项目配置templates指定路径,把所有html文件都放在一个指定目录里,通过配置DIRS实现:

js 复制代码
import os
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, 'templates')],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

测试发现,如果根目录下没有templates,还是会去apps/user的templates目录去加载html文件。

7、静态文件

django的静态文件需要放到指定目录下。每个app下面可以创建static目录存放静态文件,图片、css、js文件都可以放进去。与此同时根目录下也可以建static目录,但需要通过配置文件指定路径。管理静态文件的配置属性主要有以下三个:

python 复制代码
# 静态文件访问的 URL 前缀(开发环境) 通过http://127.0.0.1:8000/static/img/wifi.png 访问
# 生产环境使用 nginx 反向代理,通过 http://127.0.0.1/static/img/wifi.png 访问。
# 比如nginx 配置:
#      location /static/ {
#         alias /path/to/your/staticfiles/;
#     }
# 其中代理的路径static就是STATIC_URL,staticfiles就是STATIC_ROOT
# {% load static %} 使用 {% static 'img/wifi.png' %} 访问,会自动映射到 STATIC_URL
STATIC_URL = "static/"

# 静态文件收集路径(生产环境使用),运行 collectstatic 时的输出目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static_build')

# 静态文件搜索路径(开发环境使用)默认会从会自动从 STATICFILES_DIRS 和各应用的 static/ 目录中查找文件。
# 如果需要在多个目录中查找文件,可以将多个目录添加到 STATICFILES_DIRS 中。
# 查找顺序:STATICFILES_DIRS > 各应用的 static/ 目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

在模板Html中可以通过硬编码和动态标签的方式引用图片:

html 复制代码
{% load static %}
<html>
    <header></header>
    <body>
        <div>
            这是用户页面!!!
        </div>
    <img src="{% static 'img/wifi.png' %}" alt="动态引用">
    <img src="/static/img/wifi.png" alt="硬编码">
    </body>
</html>

开发环境中的静态文件服务

在开发阶段(DEBUG=True),Django 会自动处理静态文件的请求,无需额外配置 Web 服务器。具体实现方式如下:

  1. 自动转发机制 :当通过 runserver 启动开发服务器时,Django 会自动转发以 STATIC_URL 开头的请求到对应的静态文件。

  2. 模板引用方式

    • 硬编码方式 :直接在模板中写入完整路径,如 /static/my_app/example.jpg

    • static 模板标签 :推荐使用此方式,可自动处理路径拼接。使用前需加载 static 标签库:

      ini 复制代码
      html
      {% load static %}
      <img src="{% static 'my_app/example.jpg' %}" alt="My image">
  3. 注意事项

    • 开发环境中的静态文件服务效率较低,且存在安全风险,不适用于生产环境
    • 确保静态文件保存在应用的 static 目录或 STATICFILES_DIRS 指定的目录中。

生产环境中的静态文件服务

在生产环境(DEBUG=False)中,Django 不会自动处理静态文件请求,需通过以下步骤配置:

  1. 收集静态文件 :运行 collectstatic 命令,将所有静态文件复制到 STATIC_ROOT 指定的目录:

    复制代码
    bash
    python manage.py collectstatic
  2. 配置 Web 服务器 :使用 Nginx、Apache 等 Web 服务器为 STATIC_ROOT 目录下的文件提供服务。以 Nginx 为例:

    bash 复制代码
    nginx
    server {
        listen 80;
        server_name example.com;
    
        location /static/ {
            alias /path/to/your/staticfiles/;
        }
    
        # 其他配置...
    }

    这里就相当于配置了STATIC_ROOT='/path/to/your/staticfiles'

8、MySQL数据库连接

Django 6.0版本支持以下5种数据库:

首先要在项目配置setting.py添加数据库配置:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_test',
        'USER': 'root',
        'PASSWORD': '1234',
        'HOST': 'localhost',
        'PORT': '3306'
    }
}

Django对MySQL数据库的版本有要求,5.1之后貌似只支持MySQL8.0+的版本。

在自定义app目录下的models.py添加class对象,class属性就是字段名字,表名字是 [app名称 ]_[class名称]

python 复制代码
from django.db import models

class User(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    email = models.EmailField()
    create_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)

model定义好之后,执行两个命令:

shell 复制代码
python .\manage.py makemigrations # 生成迁移文件
python .\manage.py migrate # 执行迁移文件

两个命令执行完后,数据库中就可以看到model对应的表。 Django是自带ORM框架的,数据库的增删改查操作起来比较方便。

ini 复制代码
# 创建用户
User.objects.create(username="test", password="123", email="111@qq.com")
# 查询用户
User.objects.all()
# 删除用户
User.objects.filter(username="test").delete()
# 更新用户
User.objects.filter(username="test").update(password="123")

使用Django Admin管理数据库表

项目配置目录的urls.py添加admin访问路由:

python 复制代码
path("admin/", admin.site.urls),

使用python manage.py createsuperuser创建用户,然后按照提示输入用户名和密码。通过http://127.0.0.1:8100/admin/ 路径进行登录。

app目录下的admin.py注册数据库表:

javascript 复制代码
from django.contrib import admin
from apps.user.models import User

admin.site.register(User)

注册后可以在管理后台看到注册的表,然后进行操作。

9、模板的继承

相关推荐
GinoWi2 小时前
Chapter 2 - Python中的变量和简单的数据类型
python
JordanHaidee2 小时前
Python 中 `if x:` 到底在判断什么?
后端·python
ServBay2 小时前
10分钟彻底终结冗长代码,Python f-string 让你重获编程自由
后端·python
闲云一鹤3 小时前
Python 入门(二)- 使用 FastAPI 快速生成后端 API 接口
python·fastapi
Rockbean4 小时前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
曲幽4 小时前
FastAPI + Ollama 实战:搭一个能查天气的AI助手
python·ai·lora·torch·fastapi·web·model·ollama·weatherapi
用户60648767188965 小时前
国内开发者如何接入 Claude API?中转站方案实战指南(Python/Node.js 完整示例)
人工智能·python·api
只与明月听6 小时前
RAG深入学习之Chunk
前端·人工智能·python
用户8356290780517 小时前
自动化文档处理:Python 批量提取 PDF 图片
后端·python