记录一下Django开发的基本项目搭建流程-快速基础Django搭建篇

Django 的完整工作流程梳理

Django 是一个功能强大且灵活的 Python Web 框架。最近在搞一个简单的抽奖页面制作,以下将从安装 Django 开始,梳理整个工作流程,包括Django安装、应用的创建、 URL 路由、视图函数、模板渲染等概念的理解和作用,都进行了简短的分析,让初学者能快速理解其整个实现的流程和需要注意的操作规范。

1. 安装 Django

在安装 Django 之前,建议创建虚拟环境来隔离项目的依赖,但是我觉得还是使用pycharm,很简单的就可以完成操作了。

# 方法1
# 创建虚拟环境---指令的操作---个人不是很建议使用这个方法
python -m venv myvenv

# 激活虚拟环境 (Windows)
myvenv\Scripts\activate

# 或 (Linux/macOS)
source myvenv/bin/activate

# 安装 Django
pip install django
# 方法2----强烈推荐
# 在pycharm中,  文件----> 设置 ------> 项目 -----> Python解释器新建一个解释器----->Python版本就根据自己的需要进行选择即可
# 新建好后,此时就相当于有了一个新的虚拟环境了,可以在Python的终端中,打开(command Prompt)
# 此时可以用指令进行 安装 Django, 当然也可以通过设置的方式,直接在新建成功的那个环境界面点+号进行安装
pip install django

2. 创建 Django 项目

Django 项目是一个完整的 Web 应用,包含配置文件和多个子应用,第一步,先创建一个新的Django项目。

# 创建一个新的 Django 项目---直接pycharm终端运行即可(注意环境选中新建的那个)
django-admin startproject myproject2

# 进入项目目录
cd myproject

3. 创建 Django 应用

Django 项目可以包含多个应用,每个应用处理一个独立的功能模块,并且Django 的默认结构是将每个应用单独放在项目根目录下,与主项目目录(例如 myproject/)平级。每个应用都作为一个独立的模块,具有自己的视图、模型、模板和静态资源等。没有必要将所有应用集中到一个特定的目录中。。

# 创建新的 Django 应用----一定要cd到manage.py的目录下
python manage.py startapp myapp

创建后,需要在 Django 项目中注册这个应用,否则 Django 不会识别它。

在 myproject/settings.py 文件中找到 INSTALLED_APPS 部分,将 myapp 添加进去。具体操作如下:

# myproject/settings.py

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

    # 自己创建的应用
    'myapp',  # 注册你的抽奖应用
]

这样 Django 就知道需要加载并处理你定义的 myapp 应用了。

4. 配置数据库

settings.py 中配置数据库。默认使用 SQLite,无需额外配置。
如果你使用的是默认的 SQLite3 数据库,那么在 Django 的 settings.py 文件中,默认已经配置好了相关的数据库设置。因此你无需额外配置或修改 DATABASES 字段。数据库相关的配置在 DATABASES 字段中。

# myproject/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

5. 定义模型(数据库表)

在 Django 中,模型是与数据库交互的核心。你可以通过定义模型来设计数据库的表结构。
Django 通过 MVT 模型组织代码,以简化和清晰地进行 Web 开发。模型(Model) 是 MVT 模式中的一个重要部分,负责处理与数据库的交互,包括数据的存储、读取、更新和删除。

以抽奖记录表为例:

# myapp/models.py

from django.db import models

# 套餐抽奖记录表 (PackageDrawRecord)
class PackageDrawRecord(models.Model):
    user_name = models.CharField(max_length=100)  # 用户名
    package_type = models.CharField(max_length=50)  # 套餐类型,如"9.9套餐"、"19.9套餐"
    prize = models.CharField(max_length=100)  # 奖项名称,如"一等奖"
    draw_date = models.DateField()  # 抽奖日期
    is_shipped = models.BooleanField(default=False)  # 发货状态:是否发货

    def __str__(self):
        return f'{self.user_name} - {self.package_type} - {self.prize}'

当然,如果你对这部分不懂,其实问题也不大,我们也可以采用AI工具帮我们进行相关的生成,这个如有需要可以再联系我进行指导~

6. 迁移模型到数据库

定义好模型后,需要将模型迁移到数据库中。这是 Django 自动生成 SQL 并应用到数据库的过程。

# 创建迁移文件
python manage.py makemigrations

# 应用迁移,创建数据库表
python manage.py migrate

这里如果想去查看相对应的数据库结构及内容,可以直接用pycharm自带的工具查看,或者安装下面的这个工具也可以
下载链接-点击

7. 配置 URL 路由

Django 的 URL 路由机制将 URL 请求分发到对应的视图函数。我们在 urls.py 文件中配置路由。

# myproject/urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # 将所有根路径交由 `myapp` 处理
]

# myapp/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='myapp'),  # 配置主页
    path('result/', views.result, name='result'),  # 配置结果页
    # name` 参数的作用 为 URL 模式提供了一个名称,方便我们在模板中通过 `{% url 'myapp' %}` 来反向解析该 URL,无需硬编码 URL。
]

8. 创建视图函数

视图函数负责处理逻辑和渲染 HTML 页面。

# myapp/views.py

from django.shortcuts import render

def home(request):
    context = {'welcome_message': '欢迎来到抽奖系统'}
    return render(request, 'myapp/home.html', context)  # 渲染模板并传参

def result(request):
    # 假设你从某处获取了奖项名称,如从数据库或抽奖逻辑中获取
    prize_name = "一等奖"
    
    # 将 prize_name 传递给模板
    context = {'prize_name': prize_name}
    return render(request, 'myapp/result.html',context)

9. 创建模板

模板文件夹默认放置在 app_name/templates/app_name/ 中。可以在模板中使用 Django 模板语言来动态生成内容。

<!-- myapp/templates/myapp/home.html -->

<!DOCTYPE html>
<html>
<head>
    <title>抽奖页面</title>
</head>
<body>
    <h1>{{ welcome_message }}</h1>  <!-- 显示传入的参数 -->
    <a href="{% url 'result' %}">查看抽奖结果</a>  <!-- 通过 name 属性反向解析 URL -->
</body>
</html>

<!-- myapp/templates/myapp/result.html -->

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>抽奖结果</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f4f4f9;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }
        .container {
            background-color: white;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
            text-align: center;
        }
        h1 {
            color: #4CAF50;
        }
        .prize {
            font-size: 1.5em;
            color: #333;
        }
        .button {
            margin-top: 20px;
            display: inline-block;
            padding: 10px 20px;
            background-color: #4CAF50;
            color: white;
            text-decoration: none;
            border-radius: 5px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>抽奖结果</h1>
        <p class="prize">恭喜您获得 <strong>{{ prize_name }}</strong></p>
        <a href="/myapp" class="button">返回抽奖页</a> <!-- 通过 name 属性反向解析 URL -->
    </div>
</body>
</html>


10. 启动 Django 项目

一切配置完成后,可以启动 Django 项目。

python manage.py runserver

在浏览器中打开 http://127.0.0.1:8000/,你将会看到主页。

11. 数据库操作

在 Django 中,你可以使用 ORM 来操作数据库,如添加、查询、更新和删除数据。

# myapp/views.py

from .models import User

def create_user(request):
    # 创建新用户
    new_user = User.objects.create(name="张三", email="zhangsan@example.com")
    new_user.save()

    # 查询用户
    user = User.objects.get(name="张三")
    
    # 更新用户信息
    user.name = "李四"
    user.save()

    # 删除用户
    user.delete()

    return render(request, 'myapp/home.html')

12. 对过程的理解和一些说明

接下来我会更详细地梳理整个过程,包括 URL 解析、视图调用以及模板渲染等步骤,希望能帮助你更加清楚地理解 Django 的请求处理流程。

Django 请求处理流程
  1. 客户端请求发起:
    用户在浏览器中输入一个 URL 地址,向服务器发起 HTTP 请求,比如 http://127.0.0.1:8000/generate/

  2. 主路由 urls.py 文件:
    Django 的 urls.py 文件位于项目的主目录下(如 myproject/urls.py),负责处理所有进入的请求。它根据请求的 URL,将其分发给不同的应用。

    示例:myproject/urls.py

    from django.contrib import admin
    from django.urls import include, path
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('generate/', include('generate_prizes_app.urls')),  # 发送到 `generate_prizes_app`
        path('draw/', include('draw_app.urls')),  # 发送到 `draw_app`
    ]
    
    • path('generate/', include('generate_prizes_app.urls')) 的作用是将所有以 /generate/ 开头的 URL 请求转发给 generate_prizes_app 应用的 urls.py 处理。
  3. 应用内的 urls.py 文件:
    每个 Django 应用都会有一个自己的 urls.py 文件,用来定义应用内部的 URL 路由。它会根据具体的 URL 地址找到对应的视图函数(views)进行处理。

    示例:generate_prizes_app/urls.py

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.generate_prizes, name='generate_prizes'),  # 处理 /generate/
        path('result/', views.result_view, name='result'),  # 处理 /generate/result/
    ]
    
    • path('', views.generate_prizes, name='generate_prizes') 表示 /generate/ 对应视图函数 generate_prizes,这个函数负责处理这个 URL 请求。
    • path('result/', views.result_view, name='result') 表示 /generate/result/ 对应视图函数 result_view,处理这个 URL 请求。
  4. 视图函数 (views.py):
    当 Django 找到对应的 URL 路径后,会调用指定的视图函数来处理请求。视图函数的作用是接收请求,处理业务逻辑,并决定返回什么样的响应。

    示例:generate_prizes_app/views.py

    from django.shortcuts import render
    
    def generate_prizes(request):
        # 处理生成奖项的业务逻辑
        return render(request, 'generate_prizes_app/home.html')  # 渲染页面并返回
    
    def result_view(request):
        # 处理显示抽奖结果的业务逻辑
        return render(request, 'generate_prizes_app/result.html')  # 渲染抽奖结果页面
    
    • generate_prizes 函数通过 render 函数渲染 generate_prizes_app/home.html 页面。
    • result_view 函数渲染 generate_prizes_app/result.html 页面。
  5. 模板渲染 (templates):
    render(request, 'generate_prizes_app/home.html') 函数会寻找模板文件夹下的 home.html 文件,并将其渲染为 HTML 页面返回给用户。

    模板目录结构:

    generate_prizes_app/
    ├── templates/
    │   └── generate_prizes_app/
    │       ├── home.html  # 生成奖项的页面
    │       └── result.html  # 显示抽奖结果的页面
    

    在视图函数中,render 函数接收两个参数:

    • request:请求对象。
    • 'generate_prizes_app/home.html':模板路径。

    这表示 Django 将从 templates 文件夹中寻找 home.html 并将其渲染为 HTML 页面返回。

  6. 响应返回给客户端:
    最终,Django 会将渲染后的 HTML 作为响应返回给浏览器,用户就可以看到生成的页面了。

URL 解析与渲染流程总结

  1. 请求进入 Django 项目,主路由 myproject/urls.py 检查请求路径 /generate/ 并将其转发给应用 generate_prizes_appurls.py

  2. 应用路由 generate_prizes_app/urls.py 根据具体的路径 /generate//generate/result/,决定调用哪个视图函数。

  3. 视图函数 (views.py) 负责处理请求的业务逻辑,使用 render 函数来渲染相应的 HTML 模板。

  4. 模板引擎 根据模板路径加载对应的 HTML 文件,将模板中的动态数据与 HTML 结合,生成完整的页面。

  5. Django 返回响应,最终 HTML 页面返回给客户端,用户在浏览器中看到渲染结果。


操作注释:

  1. 虚拟环境:使用虚拟环境隔离项目的依赖,避免与系统中的其他 Python 库产生冲突。
  2. 应用结构:每个应用处理一个独立功能模块。通过 urls.py 管理 URL 路由,views.py 处理请求,models.py 定义数据库结构。
  3. 数据库迁移:使用 makemigrationsmigrate 命令管理数据库表的创建和修改。
  4. 模板渲染:通过 render 函数渲染 HTML 页面,并传递动态数据。

希望这份文档能够帮助你更加清晰地理解 Django 请求处理、URL 路由、视图函数和模板渲染的整个过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keith~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值