从零创建一个 Django 项目

1. 准备环境

在开始之前,确保你的开发环境满足以下要求:

  • 安装了 Python (推荐 3.8 或更高版本)。
  • 安装 pip 包管理工具。
  • 如果要使用 MySQL 或 PostgreSQL,确保对应的数据库已安装。

创建虚拟环境

在项目目录中创建并激活虚拟环境,保证项目依赖隔离:

bash 复制代码
# 创建虚拟环境
python -m venv env

# 激活虚拟环境
# Windows
env\Scripts\activate
# Linux/Mac
source env/bin/activate

2. 安装 Django 和数据库驱动

在激活的虚拟环境中安装 Django:

bash 复制代码
pip install django

如果使用 MySQL 或 PostgreSQL,还需要安装相应的驱动:

  • MySQL : 安装 mysqlclient:

    bash 复制代码
    pip install mysqlclient
  • PostgreSQL : 安装 psycopg2:

    bash 复制代码
    pip install psycopg2-binary

如果只是使用 SQLite,Django 默认支持,无需额外安装。


3. 创建 Django 项目

使用 django-admin 创建一个新的项目:

bash 复制代码
django-admin startproject myproject

项目结构

创建后,项目的基本结构如下:

myproject/
    manage.py         # 项目管理脚本
    myproject/
        __init__.py   # 包标识
        settings.py   # 项目设置
        urls.py       # URL 配置
        asgi.py       # ASGI 配置
        wsgi.py       # WSGI 配置

4. 配置数据库

打开 myproject/myproject/settings.py,找到 DATABASES 配置项,根据数据库类型修改配置:

默认的 SQLite 配置

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

使用 MySQL

如果你使用 MySQL,修改为:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'localhost',  # 数据库主机地址,通常是 localhost
        'PORT': '3306',       # MySQL 默认端口
    }
}

使用 PostgreSQL

如果你使用 PostgreSQL,修改为:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'localhost',  # 数据库主机地址,通常是 localhost
        'PORT': '5432',       # PostgreSQL 默认端口
    }
}

5. 创建 Django 应用

在项目目录中创建一个新的 Django 应用:

bash 复制代码
python manage.py startapp myapp

应用结构

创建后,应用的结构如下:

myapp/
    migrations/         # 数据库迁移文件目录
        __init__.py
    __init__.py         # 包标识
    admin.py            # 管理后台配置
    apps.py             # 应用配置
    models.py           # 数据模型定义
    tests.py            # 单元测试
    views.py            # 视图函数

6. 配置应用

打开 myproject/myproject/settings.py,在 INSTALLED_APPS 中添加你的新应用:

python 复制代码
INSTALLED_APPS = [
    # Django 自带的应用
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # 你的应用
    'myapp',
]

7. 创建模型并生成数据库表

myapp/models.py 中定义数据模型。例如:

python 复制代码
from django.db import models

class Lesson(models.Model):
    id = models.CharField(max_length=20, primary_key=True)
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

生成迁移文件

运行以下命令生成迁移文件:

bash 复制代码
python manage.py makemigrations

Django 会检测到模型更改并生成迁移文件,例如:

Migrations for 'myapp':
  myapp/migrations/0001_initial.py
    - Create model Lesson

应用迁移文件

运行以下命令将迁移文件应用到数据库,生成表结构:

bash 复制代码
python manage.py migrate

生成并应用迁移文件的目的

  • 模型定义数据库表结构同步,确保模型中的字段和属性能够在数据库中对应为实际的表和列;
迁移文件的作用
  • 迁移文件是 Django 提供的一种机制,用于跟踪和记录数据模型的变化,然后将这些变化应用到数据库中。

  • **作用1:**将模型转换为数据库表; (在 models.py 中定义的模型只是 Python 的类,它们描述了表的结构(如字段、类型、约束等),但它们并不会自动创建数据库中的实际表。)

    • 迁移文件将这些模型转化为一组可以执行的指令(SQL 语句),以在数据库中创建实际的表。
  • 举例: 在models.py中定义

    from django.db import models

    class User(models.Model):
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=100)
    email = models.EmailField()

  • 迁移文件会生成相应的SQL语句;

    CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100) NOT NULL,
    email VARCHAR(254) NOT NULL
    );

  • **作用2:**跟踪和管理模型的变更; (当你对 models.py 中的模型做出修改(如新增字段、修改字段类型、删除字段等)时,Django 会通过迁移文件记录这些变化。)应用迁移文件后,Django 会将这些更改同步到数据库中,而不会丢失现有数据。

  • 举例:假设你为User模型添加了一个新的字段age

    age = models.IntegerField(default=18)

  • 生成迁移文件以后,Django会创建一个指令来添加字段;

    ALTER TABLE user ADD COLUMN age INT NOT NULL DEFAULT 18;

  • **作用3:**管理多开发者协作中的数据库一致性; (在多人开发时,每个开发者可能对模型进行不同的更改,通过迁移文件可以记录这些更改,并在团队中共享。迁移文件以增量的形式记录每次更改,确保所有开发者和环境中的数据库表结构保持一致。)

8. 运行开发服务器

使用以下命令启动 Django 开发服务器:

bash 复制代码
python manage.py runserver

打开浏览器访问 http://127.0.0.1:8000/ 以查看项目是否正常运行。


9. 添加管理后台支持

如果需要通过 Django 的管理后台管理数据库,可以为模型添加管理支持。

注册模型

打开 myapp/admin.py,注册模型:

python 复制代码
from django.contrib import admin
from .models import Lesson

admin.site.register(Lesson)

创建超级用户

运行以下命令创建管理员账户:

bash 复制代码
python manage.py createsuperuser

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

访问管理后台

启动开发服务器后,访问 http://127.0.0.1:8000/admin,使用管理员账户登录即可管理数据库中的数据。


10. 测试操作数据库

可以通过 manage.py shell 交互式操作数据库:

bash 复制代码
python manage.py shell

在交互环境中:

python 复制代码
from myapp.models import Lesson

# 创建记录
lesson = Lesson.objects.create(id='1', name='Django Basics')

# 查询记录
lesson = Lesson.objects.get(id='1')
print(lesson.name)

# 更新记录
lesson.name = 'Advanced Django'
lesson.save()

# 删除记录
lesson.delete()

总结

通过以上步骤,你可以从零创建一个 Django 项目,并设置数据库支持。核心流程包括:

  1. 安装 Django 和数据库驱动。
  2. 配置数据库连接。
  3. 创建应用和模型。
  4. 生成并应用迁移文件。
  5. 运行开发服务器并使用 Django 提供的管理后台。

项目结构解读

env文件夹

  • 概念;env 文件夹是一个 虚拟环境 的文件夹。

  • 什么是虚拟环境?【虚拟环境是 Python 提供的一种工具,用于隔离项目的依赖。它允许你在每个项目中独立安装 Python 包,而不会干扰全局 Python 环境或其他项目的依赖。】

  • 为什么需要虚拟环境?

    • 依赖隔离:每个项目可能需要不同版本的库,如果不使用虚拟环境,可能会导致版本冲突。
    • 防止污染全局环境:全局环境中的库安装可能会影响其他项目的正常运行。
  • env文件夹的作用

    • 环境隔离:当你激活虚拟环境时,所有安装的依赖包(如 Django)都被存储在 env 文件夹中。
    • 存储依赖包:例如,你安装的 Django 和 MySQL 驱动等依赖,都会存储在 env/Lib/site-packages 下。
  • 激活虚拟环境(window)

    env\Scripts\activate

  • 激活虚拟环境(Linux/Mac)

    source env/bin/activate

  • 关闭虚拟环境

    deactivate

项目目录结构以及Django项目开发注意点

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
    myapp/
        migrations/
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py
manage.py
  • 概念;manage.py 是 Django 项目的入口点。它是一个命令行工具,允许你管理项目(如运行开发服务器、数据库迁移等)。常见的命令包括:

  • 启动开发服务器

    python manage.py runserver

  • 创建数据库迁移

    python manage.py makemigrations
    python manage.py migrate

  • 创建超级用户

    python manage.py createsuperuser

myproject/(同名的文件夹)
  • 概念;这个文件夹是Django项目的配置文件夹,它的名字和项目名一致
  • settings.py:项目的核心配置文件,包括数据库配置、已安装的应用、静态文件路径等。
  • urls.py:项目的 URL 路由配置文件,用于将 URL 路径映射到对应的视图函数。
  • asgi.py:ASGI(异步服务器网关接口)配置,用于支持异步请求处理。
  • wsgi.py:WSGI(Web服务器网关接口)配置,用于部署 Django 项目到生产环境。
myapp(创建的应用目录)
  • myapp/ 是你创建的应用目录。Django 项目可以包含多个应用,每个应用负责不同的功能模块。
  • 各文件的作用
    • models.py:定义数据模型(数据库表结构)。
    • views.py:处理用户的请求,并返回响应。
    • admin.py:配置管理后台(Django admin)。
    • apps.py:管理应用的配置信息。
    • migrations/:存储数据库迁移文件,用于跟踪模型的变化。
    • tests.py:定义测试用例,用于自动化测试。
    • init: 标识这是一个Python包; (文件夹可以被 Python 识别为模块)
为什么 myproject 文件夹下有一个和项目同名的文件夹?
  • 这是Django项目默认的目录结构
    • 最外层的 myproject/ 是项目的根目录,存放项目入口点 manage.py 和其他项目相关的文件。
    • 内层的 myproject/ 是项目的 配置文件夹,存放项目的配置(如 settings.pyurls.py 等)。
  • 这样设计的目的
    • Django 这样设计的原因是为了方便管理项目的全局文件和应用文件。分开这两层结构,可以更清晰地区分项目的配置文件和其他文件。
修改项目名称会影响哪些地方?
  • 如果你需要修改项目名称,内层文件夹(myproject)中的配置文件需要同步更新。例如:
    • asgi.pywsgi.py 中引用的模块路径需要修改。
    • 项目运行时的模块路径也需要更新。
如何添加更多的应用到项目中?
  • Django 支持模块化的开发,可以为项目添加多个应用,每个应用负责不同的功能。

  • 创建新的应用;使用startapp命令创建新应用;例如

    python manage.py startapp blog

    1. 注册应用;将新应用注册到项目的 INSTALLED_APPS 中:

    settings.py

    INSTALLED_APPS = [
    # 默认应用
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

      # 你的自定义应用
      'myapp',
      'blog',
    

    ]

    1. 添加URL路由;为新应用配置URL,例如,在新应用blog中创建urls.py

    blog/urls.py

    from django.urls import path
    from . import views

    urlpatterns = [
    path('', views.index, name='index'), # 主页
    ]

    1. 在项目的urls.py中包含这个应用的URL;

    myproject/urls.py

    from django.contrib import admin
    from django.urls import path, include

    urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')), # 包含 blog 的路由
    ]

项目结构总结
  • env 文件夹:是虚拟环境的文件夹,用于隔离项目依赖。
  • 项目结构:
    • 外层 myproject/ 是根目录,存放入口文件(如 manage.py)。
    • 内层 myproject/ 是项目的配置文件夹,存放 settings.py 等配置。
    • myapp/ 是一个应用目录,你可以创建多个应用,每个应用负责不同的功能模块。
  • 模块化开发:
    • Django 项目可以包含多个应用,通过 startapp 命令创建新应用,并通过 INSTALLED_APPS 注册到项目中。
相关推荐
啦啦右一1 小时前
Spring Boot | (一)Spring开发环境构建
spring boot·后端·spring
森屿Serien1 小时前
Spring Boot常用注解
java·spring boot·后端
盛派网络小助手3 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
算法小白(真小白)3 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭3 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
007php0073 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
∝请叫*我简单先生3 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
Chinese Red Guest3 小时前
python
开发语言·python·pygame
骑个小蜗牛4 小时前
Python 标准库:string——字符串操作
python