校园快递网站开发实战:运用Python的Django框架

  • 2024-09-21
  • dfer
  • 113

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:利用Python的Django框架,本项目构建了一个便于学生查询和领取校园内快递的网站。项目将涵盖Django框架的基础知识点,如模型设计、视图处理、模板渲染、URL路由、数据库操作、用户认证、表单处理以及集成爬虫技术。通过本项目,学习者将深入了解Django框架的应用,提高Web开发实战能力。

1. Django框架基础和MTV设计模式

Django框架简介

Django是一个开放源代码的高级Python Web框架,设计用来鼓励快速开发和干净、实用的设计。它遵循MVC架构模式,将应用程序划分为三个主要部分:模型(Model)、模板(Template)、视图(View),这种设计模式被称为MTV设计模式。

MTV设计模式

  • 模型(Model) :代表数据结构以及业务规则。在Django中,模型映射到数据库中的表。
  • 模板(Template) :用于呈现信息的文本文件。模板决定数据如何显示在用户界面上。
  • 视图(View) :处理用户输入,选择模板,并返回最终的HTTP响应。

Django核心组件

Django框架的核心组件包括了管理界面、ORM(对象关系映射)、模板系统和表单处理等。通过这些组件,开发人员能够快速构建Web应用程序,而不需要从头开始编写大量的代码。

  • 管理界面 :Django自带一个强大的管理后台,允许开发者管理数据。
  • ORM :提供了一种通过Python代码操作数据库的方式,使得开发者无需编写SQL语句。
  • 模板系统 :用来生成HTML、XML或其他类型的文档。
  • 表单处理 :允许开发者创建表单,处理表单数据,并验证用户输入。

通过本章的学习,读者将掌握Django的基础知识和MTV设计模式的核心概念,为后续深入学习和开发打下坚实的基础。

2. 项目结构和核心文件解析

2.1 Django项目结构概览

Django项目结构是组织代码和资源的蓝图,确保项目清晰且可维护。当我们用Django的 django-admin startproject 命令创建新项目时,会生成以下默认的项目结构:

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • manage.py : 一个用于管理和运行Django项目的实用程序脚本,可以用来启动服务器、运行数据库迁移等。
  • myproject/ : 一个包含项目设置和子应用的Python包。
  • __init__.py : 告诉Python这个目录应该被视为一个Python包。
  • settings.py : 包含项目的所有配置,包括数据库设置、中间件、应用配置等。
  • urls.py : URL模式的容器,用于将URL映射到视图。
  • asgi.py : 项目的异步服务器网关接口配置文件。
  • wsgi.py : 项目的Web服务器网关接口配置文件,用于生产环境部署。

2.2 manage.py 文件解析

manage.py 是项目的主要入口点。这是一个Python脚本,允许你通过命令行接口与Django项目进行交互。它主要的作用是设置项目环境,确保系统路径和Django设置正确加载。

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
    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 and "
            "available on your Python path? Did you forget to activate a "
            "virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

上面的代码在运行时会从环境变量中获取 DJANGO_SETTINGS_MODULE ,这个环境变量决定了项目的设置模块的位置。之后,脚本尝试从 django.core.management 导入 execute_from_command_line 函数,这是Django管理命令的执行入口。

2.3 settings.py 配置详解

settings.py 文件是Django项目配置的核心。它定义了项目的各种选项,如数据库配置、中间件、应用列表和模板配置等。下面是一些关键配置的示例和解释:

# 项目基础配置
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 应用配置
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 添加你的应用名称
]

# 中间件配置
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    '***monMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 模板配置
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 安全配置
SECRET_KEY = 'django-insecure-@j21z4j@&d6jg6^a4xw!1i2z2r1i2z3r3e5p'
  • BASE_DIR : 项目的基础目录路径。
  • INSTALLED_APPS : 在这个列表中添加应用名称来启用Django的内建应用和第三方应用。
  • MIDDLEWARE : 中间件是Django请求/响应处理过程中的框架级钩子。每个中间件组件负责执行一些特定的操作。
  • TEMPLATES : 配置模板后端和选项。
  • DATABASES : 配置数据库连接和设置。
  • SECRET_KEY : 用于Django内部验证的随机字符串,必须保密。

2.4 urls.py 文件的重要性

urls.py 文件用于定义项目的URL模式,它负责将URL映射到对应的视图函数。对于Django应用来说,灵活的URL设计是非常重要的,因为它们是用户访问的入口点。

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

urlpatterns = [
    path('admin/', ***.urls),
    path('app/', include('app.urls')),
]

# app/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('about/', views.about, name='about'),
]
  • admin/urls.py : Django默认提供的管理界面的URL配置。
  • app/urls.py : 应用级别的URL配置,你可以在其中定义应用特有的URL模式。

通过合理组织 urls.py 文件,可以保持项目的清晰和可维护性。同时,使用视图函数和类视图可以优化URL的处理和请求的分发。

2.5 wsgi.py asgi.py 文件的作用

随着Web技术的发展,现在不仅仅需要支持传统的同步Web服务器。Django提供了两个文件来支持不同的Web服务器类型。

  • wsgi.py : 用于配置Django项目的WSGI(Web Server Gateway Interface)兼容服务器。WSGI是Python应用程序或框架和Web服务器之间的标准接口。Django自带一个WSGI服务器( wsgi.server ),但通常会使用更健壮的服务器,如Gunicorn或uWSGI,部署生产环境。
  • asgi.py : 用于配置Django项目的ASGI(Asynchronous Server Gateway Interface)兼容服务器。ASGI是WSGI的异步版本,可以处理异步Web请求,这对于现代Web应用是非常重要的,因为异步IO允许更好地处理并发请求。

2.6 如何配置和优化核心文件

配置Django的核心文件通常需要考虑以下几点:

  • 确保 settings.py 中的数据库连接字符串是正确的,数据库服务器运行正常。
  • 适当配置 MIDDLEWARE INSTALLED_APPS ,以优化性能和增加必要的中间件和应用。
  • 管理 SECRET_KEY 和静态文件的存储路径等敏感信息和资源。
  • 使用 urls.py 构建清晰、直观的URL模式,从而提高代码的可读性和可维护性。
  • 对于生产环境,配置 wsgi.py 以使用WSGI服务器,或配置 asgi.py 使用支持异步处理的服务器。

例如,根据负载情况,可以对Django的缓存后端和静态文件服务进行优化,以提高性能和响应速度。

总结以上内容,本章节详细介绍了Django项目结构和核心文件的解析。通过分析每个文件和配置项,我们不仅了解了Django项目的组织方式,也掌握了如何根据项目需求进行优化和配置。接下来的章节将深入探讨数据库模型的建立以及ORM的使用。

3. 数据库模型和ORM使用

理解Django的模型层

Django模型是用于定义数据库表结构的Python类,它们是用户与数据库交互的核心。模型与数据库之间的关系是通过Django的ORM(对象关系映射)系统管理的,该系统允许开发者使用Python代码而不是SQL语句来操作数据库。

创建模型类

创建Django模型很简单,每个模型都是 django.db.models.Model 的子类,并且每个类的属性对应数据库表的一列。

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()

在上面的例子中,我们定义了一个 Book 模型,它具有三个字段: title author publication_date

数据库字段类型

Django为不同的数据类型提供了多种字段类型,例如 CharField 用于存储字符串, DateField 用于存储日期,等等。每个字段类型都有相应的参数,如 max_length 用于限制字符串字段的最大字符数。

字段选项

字段选项允许你指定关于字段的各种参数,例如是否允许为空( blank=True )、是否是数据库的主键( primary_key=True )等等。

title = models.CharField(max_length=200, unique=True)

上面的例子中 title 字段是唯一的,即数据库中不能有重复的 title 值。

模型元数据

元数据(metadata)是定义在模型类中的属性(位于类中的 Meta 子类内),这些属性可以控制模型的一些全局行为,比如默认的排序方式。

class Book(models.Model):
    # ...

    class Meta:
        ordering = ['title']

数据库迁移

当模型改变后,Django使用迁移来同步模型和数据库结构。迁移是一个记录模型变更的文件集,可以应用(migrate)或回滚(migrate back)。

python manage.py makemigrations
python manage.py migrate

ORM操作

Django的ORM系统允许你使用Python对象和方法来执行数据库操作。例如,创建、读取、更新和删除(CRUD)操作都对应相应的ORM方法。

# 创建
book = Book(title='The Great Gatsby', author='F. Scott Fitzgerald')
book.save()

# 读取
all_books = Book.objects.all()

# 更新
book.publication_date = '1925-04-10'
book.save()

# 删除
book.delete()

使用Django的QuerySet API

QuerySet 是Django ORM中非常重要的概念,它是一个可迭代的数据库查询集合。你可以链式调用查询方法来过滤数据。

# 过滤查询集
books_by Fitzgerald = Book.objects.filter(author='F. Scott Fitzgerald')

# 排序查询集
recent_books = Book.objects.order_by('-publication_date')

高级查询和聚合

Django还支持更高级的查询,如跨表的联合查询、聚合操作等。使用 Q 对象可以构建复杂的查询条件。

from django.db.models import Q

# Q对象的使用
books_by Fitzgerald = Book.objects.filter(Q(author='F. Scott Fitzgerald') | Q(title='The Great Gatsby'))

此外,Django提供了聚合函数,如 Sum Avg Max 等,用于计算数值字段的聚合值。

from django.db.models import Sum

# 聚合操作示例
total_price = OrderItem.objects.aggregate(total=Sum('price'))

ORM性能优化

虽然ORM提供了便利,但使用不当可能会导致性能问题。为了优化ORM查询,应尽量减少查询次数,使用 select_related prefetch_related 进行优化。

# 减少查询次数
books = Book.objects.prefetch_related('author').all()

在这里, prefetch_related 用于优化关联对象的查询,它会减少查询次数,提高数据访问性能。

通过本章节的介绍,读者应该可以熟练地在Django项目中设计和操作数据库模型。通过学习本章的内容,开发者能够高效地利用Django的ORM系统来进行数据操作,同时理解和掌握性能优化的方法。接下来的章节将继续深入介绍视图函数和URL路由设计,这两部分与数据库模型和ORM使用紧密相连,共同构成了Django应用程序的强大核心功能。

4. 视图函数与URL路由设计

4.1 视图函数的基本概念和实现方式

在 Django Web 框架中,视图函数(view functions)是处理请求并返回响应的函数。它位于应用程序的 views.py 文件中,是与用户交互的中枢,负责根据不同的请求类型,处理数据和逻辑,最后返回相应的 HTTP 响应。视图函数对于 Web 应用来说,就像大脑控制身体的各个部位一样重要。

在视图函数中,通常会进行数据查询和逻辑处理。一旦获取到数据,就可以将其传递给模板,从而渲染出 HTML 内容返回给用户。开发人员可以使用 Django 的查询集(QuerySet)来与数据库进行交互,执行各种数据检索操作。

下面是一个简单的视图函数示例代码:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, Django!")

在这个例子中,我们定义了一个 index 视图函数,它接收一个名为 request 的参数,这是一个封装了当前 HTTP 请求信息的对象。该函数简单地返回了一个字符串 "Hello, Django!" 包裹在 HttpResponse 中,它告诉 Django 将这个字符串直接返回给用户浏览器。

视图函数的参数说明

  • request :这个参数是一个类 HttpRequest 的对象,它包含了请求的元数据,如请求类型(GET、POST等),请求的 URL,以及 POST 数据等。
  • *args **kwargs :视图函数也可以使用可变数量的参数,这允许开发者在视图函数中添加更多的灵活性。

4.2 URL路由设计的策略和实践

URL 路由在 Django 中是将特定的 URL 映射到视图函数的过程。为了实现这一功能,Django 使用了 urls.py 文件来定义 URL 配置。路由配置告诉 Django 当一个特定的 URL 请求进来时,应该调用哪个视图函数来处理这个请求。

Django 的 URL 路由机制非常强大,它允许正则表达式匹配 URL,同时提供了可选参数和动态段。这样可以灵活地处理各种复杂的 URL 配置,例如带参数的 URL 或者 URL 片段。

以下是一个简单的 URL 路由配置示例:

from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index, name='index'),
]

在这个例子中, urlpatterns 是一个列表,其中的每个元素都是一个路由规则。 path 函数定义了路由的模式、对应的视图函数和可选的路由名称。

URL 路由配置的参数说明

  • route :路由模式字符串,定义了 URL 路径。Django 使用基于类的正则表达式来解析路由模式。
  • view :与路由模式相匹配时,Django 将调用此视图函数。
  • kwargs :传递给视图函数的额外参数,可以是字典形式。
  • name :给路由配置命名,便于在模板和视图中引用。

4.3 URL 路由的高级特性

除了基础的路由配置之外,Django 还提供了许多高级路由特性,比如:

  • include() 函数允许将 URL 配置从一个应用链接到另一个应用。
  • re_path() 函数支持使用正则表达式来定义更复杂的路由规则。
  • register_converter() 可以创建自定义的 URL 转换器,使 URL 路径参数的类型转换更加灵活。

使用 include() 函数链接多个应用

将多个应用链接到一起,是构建复杂 Django 项目时的常见需求。 include() 函数在 urls.py 中被广泛使用,允许从其他应用模块引用 URL 配置。这不仅有助于保持项目的清晰结构,还能使应用模块之间保持低耦合。

from django.urls import include, path

urlpatterns = [
    path('admin/', ***.urls),
    path('blog/', include('blog.urls')),
]

上面的代码将 blog 应用的 URL 配置链接到了项目的主 URL 配置中。

使用 re_path() 定义复杂路由

在某些情况下,简单的字符串模式无法满足需求,这时 re_path() 函数就派上用场了。它允许使用正则表达式来定义 URL 路径,非常适合于复杂的路由规则。

from django.urls import re_path

urlpatterns = [
    # ... other url patterns ...
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    # ... other url patterns ...
]

在这段代码中, re_path() 使用了正则表达式来匹配特定格式的 URL,并将匹配的参数传递给视图函数。

自定义 URL 转换器

Django 默认提供了一组 URL 转换器(如 int , str , slug 等),但如果这些转换器不满足需求,可以通过 register_converter() 函数注册自定义转换器。

from django.urls import register_converter

class FourDigitYearConverter:
    regex = '[0-9]{4}'

register_converter(FourDigitYearConverter, 'yyyy')

urlpatterns = [
    path('articles/2018/', views.special_2018),
    # ... other url patterns ...
]

在这个例子中,自定义了一个名为 FourDigitYearConverter 的转换器,用于将 URL 中的四位数转换为年份。

4.3.1 URL路由设计的总结

在本章节中,我们深入探讨了视图函数与 URL 路由设计的基本概念和实现方式。视图函数负责处理请求和返回响应,而 URL 路由则是连接视图和用户请求的桥梁。理解这些概念对于开发任何 Django 应用都是至关重要的。

我们还学习了 URL 路由的高级特性,如链接多个应用、定义复杂路由以及自定义 URL 转换器。这些高级特性为 Django 应用的扩展性和灵活性提供了坚实的基础。熟练掌握这些知识,可以帮助开发者构建更强大、更具有可维护性的 Web 应用程序。

在下一节中,我们将进一步探讨如何在 Django 中创建动态内容和响应式前端界面,这将为我们的 Web 应用提供丰富的用户体验和交互性。

5. 前端界面开发与动态内容渲染

前端界面开发的基础

Django前端界面开发依赖于其强大的模板系统。该系统允许开发者创建可重用的HTML布局,并通过模板标签和过滤器来动态生成内容。这种分离逻辑和表现层的方法不仅简化了开发流程,而且提高了代码的可维护性。

在开始动态内容渲染之前,先要了解基本的HTML结构。以下是一个简单的HTML5文档结构示例:

<!DOCTYPE html>
<html>
<head>
    <title>示例网页</title>
</head>
<body>
    <header>
        <h1>我的网站</h1>
    </header>
    <nav>
        <ul>
            <li><a href="#">首页</a></li>
            <li><a href="#">关于我们</a></li>
            <li><a href="#">服务</a></li>
        </ul>
    </nav>
    <article>
        <section>
            <h2>文章标题</h2>
            <p>这里是文章内容。</p>
        </section>
    </article>
    <footer>
        <p>版权所有 &copy; 我的网站</p>
    </footer>
</body>
</html>

Django模板系统的基本组成

在Django模板中,基础语法包括标签(Tags)、变量(Variables)和注释(Comments)。模板标签用于控制程序逻辑,比如循环和条件判断。变量用于显示数据,而注释则用来写入模板设计说明或临时注释掉某些内容。

{% if user.is_authenticated %}
    <p>您好, {{ user.username }}.</p>
{% else %}
    <p>您好, 客人. <a href="{% url 'login' %}">登录</a></p>
{% endif %}

<!-- 注释信息 -->

模板继承和包含

模板继承允许你创建一个基础模板,其中包含共有元素,然后让其他模板继承这个基础模板。这样,子模板只需要定义它们特有的部分。包含(include)标签用于将一个模板插入到另一个模板中。

基础模板(base.html):

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}默认标题{% endblock %}</title>
</head>
<body>
    {% include 'header.html' %}
    <div class="content">
        {% block content %}
        {% endblock %}
    </div>
    {% include 'footer.html' %}
</body>
</html>

子模板(about.html):

{% extends 'base.html' %}

{% block content %}
    <h2>关于我们</h2>
    <p>这里是关于我们页面的内容。</p>
{% endblock %}

动态内容渲染

Django模板系统支持动态内容渲染。这是通过在视图中传递上下文(context)给模板实现的。上下文是一个字典,包含键值对,其中键是模板变量的名称,值是将要渲染到模板中的数据。

示例:渲染一个用户列表

视图(views.py):

from django.shortcuts import render
from .models import User

def user_list(request):
    users = User.objects.all()
    return render(request, 'user_list.html', {'users': users})

模板(user_list.html):

{% extends 'base.html' %}

{% block content %}
<h2>用户列表</h2>
<ul>
    {% for user in users %}
    <li>{{ user.name }}</li>
    {% endfor %}
</ul>
{% endblock %}

性能优化:模板缓存

在渲染大量数据时,模板渲染可能会成为性能瓶颈。Django提供了一种缓存机制来优化这一过程,通过缓存整个页面或页面的部分内容,可以显著提高网站的响应速度。

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)  # 缓存15分钟
def user_list(request):
    # ...

响应式设计:Bootstrap集成

创建响应式网页是现代前端开发的必要条件。Bootstrap是一个流行的前端框架,可以帮助开发者快速实现响应式布局。通过将Bootstrap框架集成到Django模板中,可以更容易地创建适应不同设备和屏幕尺寸的界面。

<!-- 在基础模板中引入Bootstrap CSS -->
<link href="***" rel="stylesheet">

<!-- 在基础模板中引入Bootstrap JS -->
<script src="***"></script>

实践:构建一个动态博客系统

博客系统是展示动态内容的典型应用。通过Django,你可以快速搭建一个博客系统,实现文章列表、详情页和编辑器等功能。

文章列表模板(post_list.html):

{% extends 'base.html' %}

{% block content %}
<h2>文章列表</h2>
<div class="row">
    {% for post in posts %}
    <div class="col-sm-4">
        <h3>{{ post.title }}</h3>
        <p>{{ post.excerpt }}</p>
        <a href="{% url 'post_detail' post.id %}">阅读更多...</a>
    </div>
    {% endfor %}
</div>
{% endblock %}

总结

通过本章节的介绍,我们对Django模板系统有了全面的理解。从模板的继承与包含,到动态内容的渲染,再到模板缓存优化和Bootstrap的响应式设计,这些都为创建动态的、用户友好的前端界面提供了坚实的基础。随着实践的深入,我们还将探索模板的高级特性,比如自定义模板标签和过滤器,以及如何高效地进行前端性能优化。在下一章节中,我们将深入了解Django的静态文件管理,以及如何配置和使用第三方静态资源来进一步美化我们的页面。

6. 爬虫集成、用户认证及表单处理

6.1 后台爬虫的集成与应用

集成爬虫到Django项目中可以自动化许多数据抓取任务。我们将使用Django的内置 Crawler 类和视图来创建一个爬虫,它能够定期从一个外部快递信息网站上抓取数据。以下是一个简单的爬虫集成流程:

# 假设我们有一个名为ExternalCourierService的爬虫类
from crawling import ExternalCourierService
from datetime import datetime

class CourierCrawler:
    def __init__(self):
        self.service = ExternalCourierService()

    def crawl_and_save(self):
        data = self.service.get_data()  # 获取数据
        for item in data:
            # 保存数据到数据库模型CourierInfo
            CourierInfo.objects.create(
                package_number=item['package_number'],
                status=item['status'],
                last_updated=datetime.now()
            )
        print("Data crawled and saved successfully.")

这个 CourierCrawler 类的 crawl_and_save 方法将调用 ExternalCourierService 来获取数据,并将每个快递信息保存到数据库中。

6.2 用户认证与权限管理

用户认证是Web应用中不可或缺的部分。Django提供了一套全面的认证系统,可用来管理用户账户和权限。我们将会使用Django的内建用户模型和认证视图来实现用户注册、登录和权限管理。

# urls.py

from django.contrib.auth.views import LoginView, LogoutView
from . import views

urlpatterns = [
    # ... 其他URL配置 ...
    path('login/', LoginView.as_view(template_name='auth/login.html'), name='login'),
    path('logout/', LogoutView.as_view(), name='logout'),
    path('register/', views.register, name='register'),
    # ... 其他URL配置 ...
]

views.py 中,我们将定义 register 视图函数以处理用户注册:

# views.py

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')
    else:
        form = UserCreationForm()
    return render(request, 'auth/register.html', {'form': form})

6.3 前端表单的处理

Django使用 request.POST 字典来处理用户提交的表单数据。对于复杂的数据提交,我们会使用 ModelForm 来自动将表单数据映射到模型实例上。下面是一个简单的表单处理示例:

# forms.py

from django import forms
from .models import CourierInfo

class CourierForm(forms.ModelForm):
    class Meta:
        model = CourierInfo
        fields = ['package_number', 'status']

在视图中处理表单提交:

# views.py

from django.shortcuts import render, redirect
from .forms import CourierForm
from .models import CourierInfo

def submit_courier_info(request):
    if request.method == 'POST':
        form = CourierForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('info_list')
    else:
        form = CourierForm()
    return render(request, 'courier.submit.html', {'form': form})

6.4 部署与运维

部署Django项目到生产环境是关键的一步,这将确保用户能够访问到我们的应用。这里我们会讲解如何使用Gunicorn作为WSGI服务器,以及如何使用Nginx作为反向代理服务器来部署我们的Django项目。

  • 安装Gunicorn:
pip install gunicorn
  • 运行Gunicorn服务器:
gunicorn myproject.wsgi:application --bind *.*.*.*:8000
  • 配置Nginx以代理Gunicorn:
server {
    listen 80;
    server_***;

    location / {
        proxy_pass ***
        *** $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

在完成部署后,记得对应用进行测试,确保一切正常运行。

通过本章的讨论,我们已经完成了校园快递网站的主要开发和部署工作。接下来是项目的维护和优化工作,确保应用长期稳定运行。在下一章,我们将探讨如何对Django应用进行性能优化和监控。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:利用Python的Django框架,本项目构建了一个便于学生查询和领取校园内快递的网站。项目将涵盖Django框架的基础知识点,如模型设计、视图处理、模板渲染、URL路由、数据库操作、用户认证、表单处理以及集成爬虫技术。通过本项目,学习者将深入了解Django框架的应用,提高Web开发实战能力。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif