主页 > 手机  > 

从零创建一个Django项目

从零创建一个Django项目
1. 准备环境

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

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

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

# 创建虚拟环境 python -m venv env # 激活虚拟环境 # Windows envScriptsactivate # Linux/Mac source env/bin/activate
2. 安装 Django 和数据库驱动

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

pip install django

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

MySQL: 安装 mysqlclient:

pip install mysqlclient

PostgreSQL: 安装 psycopg2:

pip install psycopg2-binary

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


3. 创建 Django 项目

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

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 配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } 使用 MySQL

如果你使用 MySQL,修改为:

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,修改为:

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 应用:

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 中添加你的新应用:

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 中定义数据模型。例如:

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 生成迁移文件

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

python manage.py makemigrations

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

Migrations for 'myapp': myapp/migrations/0001_initial.py - Create model Lesson 应用迁移文件

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

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 开发服务器:

python manage.py runserver

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


9. 添加管理后台支持

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

注册模型

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

from django.contrib import admin from .models import Lesson admin.site.register(Lesson) 创建超级用户

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

python manage.py createsuperuser

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

访问管理后台

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


10. 测试操作数据库

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

python manage.py shell

在交互环境中:

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 项目,并设置数据库支持。核心流程包括:

安装 Django 和数据库驱动。配置数据库连接。创建应用和模型。生成并应用迁移文件。运行开发服务器并使用 Django 提供的管理后台。 项目结构解读

env文件夹

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

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

为什么需要虚拟环境?

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

env文件夹的作用

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

激活虚拟环境(window)

envScriptsactivate

激活虚拟环境(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.py、urls.py 等)。 这样设计的目的 Django 这样设计的原因是为了方便管理项目的全局文件和应用文件。分开这两层结构,可以更清晰地区分项目的配置文件和其他文件。 修改项目名称会影响哪些地方? 如果你需要修改项目名称,内层文件夹(myproject)中的配置文件需要同步更新。例如: asgi.py 和 wsgi.py 中引用的模块路径需要修改。项目运行时的模块路径也需要更新。 如何添加更多的应用到项目中?

Django 支持模块化的开发,可以为项目添加多个应用,每个应用负责不同的功能。

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

python manage.py startapp blog

注册应用;将新应用注册到项目的 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',

]

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

from django.urls import path from . import views

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

在项目的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 注册到项目中。 编辑数据库时,是否需要书写models.py文件 1. 使用models.py的场景 在大多数情况下,推荐通过models.py 文件来定义和操作数据库,这是 Django 的核心功能之一。优点 **ORM提供抽象层;**通过Django的ORM(对象关系映射),你可以直接使用Python类和方法操作数据库,而无需手写SQL;**数据变更自动管理:**通过迁移(migrations)功能,可以轻松跟踪和管理数据库结构的变更。代码可维护性强: models.py 中的类定义直接对应数据库表,代码更直观、更易维护。**跨数据库支持:**通过 Django 的 ORM,同一套代码可以适配不同的数据库(如 SQLite、MySQL、PostgreSQL)。 2. 直接操作数据库的场景(无需models.py) 场景1:已有数据库表; 如果你的项目需要操作一个已有的数据库(非 Django 管理的表),你可以直接通过 SQL 或第三方库操作它,而不定义模型。也可以使用Django的inspectdb功能自动生成模型; 场景2:复杂SQL查询 如果某些操作难以通过 ORM 实现(例如复杂的联表查询、多级嵌套查询等),可以直接使用 SQL 查询。 场景3:一次性脚本或数据迁移 如果只是临时操作数据库(如迁移数据、批量更新等),可以直接运行原生 SQL,而不需要定义模型。 利用Django操作数据库(编写接口) 目的:想要获取my_db_01数据库下的users表中的所有用户数据; 步骤1:在myproject文件夹下的settings.py文件中配置数据库信息 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 使用 MySQL 驱动 'NAME': 'my_db_01', # 数据库名 'USER': 'your_mysql_username', # MySQL 用户名 'PASSWORD': 'your_mysql_password', # MySQL 密码 'HOST': 'localhost', # 数据库主机,通常是 localhost 'PORT': '3306', # MySQL 默认端口 } } 步骤2:定义users表的类型; (方法一)

Django中可以操作多个应用,

打开myapp/models.py,并定义User模型

from django.db import models

class User(models.Model): id = models.AutoField(primary_key=True) # 自增主键 username = models.CharField(max_length=45) # 用户名 password = models.CharField(max_length=45) # 密码 status = models.BooleanField(default=True) # 状态 (映射为 TINYINT(1))

class Meta: db_table = 'users' # 映射到 MySQL 中的 users 表 managed = False # 告诉 Django 不去管理(创建/迁移)此表 步骤3:编写视图获取所有用户信息;

在 myapp/views.py 中编写一个视图函数,用于获取 users 表的所有记录

from django.http import JsonResponse from .models import User

def get_all_users(request): try: # 查询所有用户 users = User.objects.all().values(‘id’, ‘username’, ‘password’, ‘status’) users_list = list(users) # 转换为列表以便返回 JSON 响应 return JsonResponse({‘status’: ‘success’, ‘data’: users_list}, safe=False) except Exception as e: return JsonResponse({‘status’: ‘error’, ‘message’: str(e)}, status=500)

步骤4:配置URL路由

在myapp/urls.py 中添加路由,让接口与视图函数关联;

from django.urls import path from .views import get_all_users

urlpatterns = [ path(‘users/’, get_all_users, name=‘get_all_users’), # 绑定接口到视图函数 ]

然后在主项目中的urls.py中包含myapp路由即可;

from django.urls import path from .views import get_all_users

urlpatterns = [ path(‘users/’, get_all_users, name=‘get_all_users’), # 绑定接口到视图函数 ]

步骤5:测试接口(浏览器/postman都可)

操作数据库的时候为啥没有直接书写SQL代码? 使用了Django ORM(对象关系映射,Object-Relational Mapping),它是 Django 提供的一个强大的抽象工具,用于代替直接写 SQL 语句来操作数据库。 Django ORM的工作原理;

模型与数据库表的映射;

在 models.py 中定义的 User 模型,对应的是数据库中的 users 表。**Django会根据模型自动生成SQL语句来增删改查数据库; **

Django ORM 方法与 SQL 的关系

当你使用 ORM 的方法(如 User.objects.all())时,Django 会在内部转换成对应的 SQL 查询,并向数据库发送请求。你不需要手动书写 SQL,Django 会为你生成高效的 SQL 查询。

例如

users = User.objects.all().values(‘id’, ‘username’, ‘password’, ‘status’)

相当于sql

SELECT id, username, password, status FROM users;

Django ORM的优势 提高开发效率:通过 Python 代码实现数据库操作,无需手动编写 SQL。跨数据库兼容性:同一段代码可以在不同数据库(如 SQLite、MySQL、PostgreSQL)上运行,Django 自动生成对应数据库的 SQL。安全性:Django ORM 内部会自动处理一些常见的安全问题,如 SQL 注入。 使用raw() 方法来执行自定义SQL; 方法1,

如果需要执行更复杂的SQL查询(联表查询、子查询), 可以使用raw()方法;

from django.db import connection from .models import User

def get_all_users_raw(request): with connection.cursor() as cursor: cursor.execute(“SELECT id, username, password, status FROM users”) rows = cursor.fetchall() users_list = [ {‘id’: row[0], ‘username’: row[1], ‘password’: row[2], ‘status’: row[3]} for row in rows ] return JsonResponse({‘status’: ‘success’, ‘data’: users_list})

方法2;使用raw()和ORM

可以结合ORM的raw()方法来直接执行SQL查询;即将SQL语句直接放到raw()中, 具体效果如下:

users = User.objects.raw(“SELECT id, username, password, status FROM users”) for user in users: print(user.username)

标签:

从零创建一个Django项目由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“从零创建一个Django项目