主页 > 开源代码  > 

《Python实战进阶》专栏No.3:Django项目结构解析与入门DEMO

《Python实战进阶》专栏No.3:Django项目结构解析与入门DEMO
《Python实战进阶》专栏 第3集:Django 项目结构解析与入门DEMO


在本集中,我们将深入探讨 Django 的项目结构,并实际配置并运行一个入门DEMO博客网站,帮助你在 Web 开发中更高效地使用 Django。Django 是一个功能强大的 Python Web 框架,它提供了开箱即用的工具和清晰的项目结构,但要真正掌握它,需要理解其内部机制并遵循良好的开发习惯。

本文将涵盖以下内容:

Django 项目结构解析项目结构的最佳实践实际代码示例:构建一个简单的博客系统总结与建议
一、Django 项目结构解析

当你运行 django-admin startproject myproject 创建一个新的 Django 项目时,Django 会生成一个默认的项目结构。以下是典型的 Django 项目结构:

myproject/ ├── manage.py ├── myproject/ │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── app1/ ├── migrations/ │ └── __init__.py ├── admin.py ├── apps.py ├── models.py ├── tests.py ├── views.py └── __init__.py 1. 核心文件说明 manage.py: 项目的命令行工具,用于运行服务器、迁移数据库等。settings.py: 项目的配置文件,包含数据库设置、应用注册、中间件等。urls.py: 定义项目的 URL 路由规则。wsgi.py: 用于部署 WSGI 应用的入口文件。app1/: 这是一个应用目录,Django 鼓励将功能模块化为多个应用。 2. 应用结构说明

每个 Django 应用通常包含以下文件:

models.py: 定义数据模型。views.py: 处理请求并返回响应。admin.py: 配置 Django 管理后台。tests.py: 编写单元测试。migrations/: 数据库迁移文件。
二、项目结构的最佳实践

项目最终总体结构图如下:

1. 模块化设计

Django 提倡“可插拔的应用”理念。每个应用应该专注于一个特定的功能模块,例如用户管理、博客文章、评论系统等。这样可以提高代码的复用性和可维护性。

建议:

将通用功能(如用户认证、日志记录)封装成独立的应用。使用 INSTALLED_APPS 注册所有应用。 2. 配置分离

在实际项目中,开发环境和生产环境的配置可能不同。可以通过以下方式实现配置分离:

创建 settings/ 目录,分为 base.py, dev.py, prod.py。在 manage.py 和 wsgi.py 中动态加载配置。 # manage.py import os import sys def main(): os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.dev') try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed?" ) from exc execute_from_command_line(sys.argv) if __name__ == '__main__': main() 3. 遵循 MVC 模式

虽然 Django 更像是 MTV(Model-Template-View),但核心思想是一致的:

Model: 数据层,负责与数据库交互。Template: 视图层,负责渲染 HTML。View: 控制层,处理业务逻辑。 4. 使用 Django REST Framework (DRF)

如果你需要构建 API,推荐使用 DRF。它可以快速创建 RESTful 接口,并支持序列化、权限控制等功能。


三、实际代码示例:构建一个简单的博客系统

我们将通过一个简单的博客系统来演示 Django 的项目结构和最佳实践。

1. 创建项目和应用 pip install django # 等待安装完成 pip show django # 显示Django版本信息,我使用的是最新的 5.1.6版本 Name: Django Version: 5.1.6 Summary: A high-level Python web framework that encourages rapid development and clean, pragmatic design. Home-page: Author: Author-email: Django Software Foundation <foundation@djangoproject > License: BSD-3-Clause Location: D:\python_projects\django_demo\Lib\site-packages Requires: asgiref, sqlparse, tzdata Required-by: # 新建一个Django项目,名字为 blog_project django-admin startproject blog_project cd blog_project python manage.py startapp blog 2. 定义数据模型

在 blog/models.py 中定义博客文章模型:

from django.db import models from django.utils import timezone class Post(models.Model): title = models.CharField(max_length=200) content = models.TextField() created_at = models.DateTimeField(default=timezone.now) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.title

运行迁移命令以创建数据库表:

python manage.py makemigrations python manage.py migrate

命令执行结果:

Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK 3. 创建视图和模板

在 blog/views.py 中定义视图函数:

from django.shortcuts import render, get_object_or_404 from .models import Post def post_list(request): posts = Post.objects.all().order_by('-created_at') return render(request, 'blog/post_list.html', {'posts': posts}) def post_detail(request, pk): post = get_object_or_404(Post, pk=pk) return render(request, 'blog/post_detail.html', {'post': post}) # 示例数据,创建一条博客 Post.objects.create(title='新文章标题', content='这是文章的内容') # 示例数据,创建一条博客 Post.objects.create(title='今日日记', content='今天我创建了第一个django项目。')

在 blog_project/blog/templates/blog/ 目录下创建模板文件 post_list.html 和 post_detail.html:

<!-- post_list.html --> <h1>Blog Posts</h1> <ul> {% for post in posts %} <li><a href="{% url 'post_detail' post.pk %}">{{ post.title }}</a></li> {% endfor %} </ul> <!-- post_detail.html --> <h1>{{ post.title }}</h1> <p>{{ post.content }}</p> <p>Created at: {{ post.created_at }}</p> 4. 配置 URL 路由

在 blog/urls.py 中定义路由:

from django.urls import path from . import views urlpatterns = [ path('', views.post_list, name='post_list'), path('<int:pk>/', views.post_detail, name='post_detail'), ]

在主项目的 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_project 下面的 settings.py 配置文件中注册APP和路由:

注册一行 ‘blog’, # Application definition INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", 'blog', ] 配置 templates 地址 TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [BASE_DIR / 'templates'],# 如果使用项目根目录的 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", ], }, }, ]

再次运行迁移命令以更新数据库表:

python manage.py makemigrations python manage.py migrate 5. 启动服务器

运行开发服务器并访问博客系统:

python manage.py runserver

打开浏览器访问 http://127.0.0.1:8000/blog/,即可看到博客列表。


要增加博客内容,您可以通过以下几种方式来丰富您的博客:

如果您使用的是 Django 的模型来存储博客文章,您可以通过 Django 管理后台添加更多内容。

使用 Django 管理后台创建超级用户: 如果您还没有创建超级用户,可以在项目根目录下运行以下命令: python manage.py createsuperuser

按照提示输入用户名、电子邮件和密码。

在 admin.py 中注册模型 # blog/admin.py from django.contrib import admin from .models import Post # 注册 Post 模型 admin.site.register(Post) 访问管理后台: 启动 Django 服务器后,访问 http://localhost:8000/admin/,使用您刚刚创建的超级用户登录。

添加博客文章: 在管理后台中,您应该能看到 Blog 应用下的 Posts(或您定义的模型名称)。点击进入后,您可以添加新的博客文章,输入标题、内容等信息。 四、总结与建议

通过本集的学习,你应该对 Django 的项目结构有了更深入的理解,可以发现,由于出色的封装,Django成为一个非常容易上手而且功能强大的CMS,是开发个人博客和网站的利器。 以下是一些额外的建议:

学习 Django REST Framework:如果需要构建 API,请务必掌握 DRF。编写单元测试:确保代码的可靠性。使用 Docker 部署:简化开发和部署流程。关注性能优化:例如缓存、数据库索引等。

希望这篇文章对你有所帮助!如果你有任何问题或想法,欢迎在评论区留言讨论。


下集预告:第4集将聚焦于 GraphQL 与 RESTful API 对比与实现 。敬请期待!

标签:

《Python实战进阶》专栏No.3:Django项目结构解析与入门DEMO由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“《Python实战进阶》专栏No.3:Django项目结构解析与入门DEMO