当前位置: 首页 > news >正文

Python web实战 | 使用 Django 搭建 Web 应用程序 【干货】

概要

从社交媒体到在线购物,从在线银行到在线医疗,Web 应用程序为人们提供了方便快捷的服务。Web 应用程序已经成为了人们日常生活中不可或缺的一部分。搭建一个高效、稳定、易用的 Web 应用程序并不是一件容易的事情。本文将介绍如何使用 Django 快速搭建一个强大的 Web 应用程序。我将从如何安装 Django 开始,一步一步地讲解如何创建、设计和部署一个完整的 Web 应用程序。

 

安装 Django

在开始之前,我们需要安装 DjangoDjango 是一个开源的 Web 应用框架,基于 Python 编程语言。它提供了一系列工具和库,可以帮助我们快速地搭建 Web 应用程序。以下是安装 Django 的步骤:

步骤 1:安装 Python

步骤 2:安装 Django

安装 Python 之后,我们需要安装 Django。打开终端或命令提示符,输入以下命令:

pip install Django

创建 Django 项目

安装 Django 之后,我们可以开始创建 Django 项目了。以下是创建 Django 项目的步骤:

步骤 1:创建项目

首先,我们需要在命令提示符或终端中进入我们要存放项目的目录。然后,输入以下命令,创建一个 Django 项目:

django-admin startproject myproject

这将会创建一个名为 myproject Django 项目。myproject 目录下的文件和子目录如下:

myproject/manage.pymyproject/__init__.pysettings.pyurls.pyasgi.pywsgi.py

manage.py 是一个命令行工具,可以用来执行各种 Django 命令,例如启动开发服务器、执行数据库迁移等等。

myproject 目录是我们的项目主目录。

init.py 文件是一个空文件,用于指示 Python 解释器将该目录视为 Python 包。

settings.py 文件包含了 Django 项目的设置,例如数据库配置、静态文件路径、模板路径等等。

urls.py 文件包含了 Django 项目的 URL 映射关系。

asgi.py 文件是使用 ASGI(异步服务器网关接口)的入口文件。

wsgi.py 文件是使用 WSGIWeb 服务器网关接口)的入口文件。

步骤 2:运行开发服务器

创建项目之后,我们可以运行开发服务器来测试我们的项目。在命令提示符或终端中进入 myproject 目录,然后输入以下命令:

python manage.py runserver

这将会启动开发服务器,默认监听本地的 8000 端口。打开浏览器,访问 http://localhost:8000/ ↗,我们应该能够看到 Django 的欢迎页面。

👉当运行 python manage.py runserver 命令时,Django 会启动一个本地服务器,并实时监听你的项目文件的修改。

如果你修改了你的 Django 项目中的任何文件(如视图、模板、静态文件等),服务器会自动重新加载,并反映出你所做的更改。这羊开发过程更加高效和便捷,因为你不需要手动重启服务器来查看修改后的效果。

请注意,如果修改了 settings.py 文件,需要重新启动服务器才能使更改生效。

步骤 3:创建一个 Django 应用程序

现在我们已经创建了一个 Django 项目,接下来我们需要创建一个 Django 应用程序。Django 应用程序是 Django 项目的一个组成部分,用于处理特定的功能或业务逻辑。以下是创建 Django 应用程序的步骤:

1、创建应用程序

在命令提示符或终端中进入项目主目录 myproject,然后输入以下命令:

python manage.py startapp myapp

这将会创建一个名为 myapp Django 应用程序。myapp 目录下的文件和子目录如下:

myapp/__init__.pyadmin.pyapps.pymodels.pytests.pyviews.pymigrations/__init__.py

init.py 文件是一个空文件,用于指示 Python 解释器将该目录视为 Python 包。

admin.py 文件用于定义 Django 管理后台的配置。

apps.py 文件用于定义应用程序的配置。

models.py 文件用于定义应用程序的数据模型。

tests.py 文件用于编写应用程序的单元测试。

views.py 文件用于定义应用程序的视图函数。

migrations 目录用于存放应用程序的数据库迁移脚本。

2、注册应用程序

在项目主目录 myproject 中的 settings.py 文件中,我们需要将应用程序添加到 INSTALLED_APPS 列表中,以便 Django 知道我们要使用哪些应用程序。我们需要将 myapp 添加到 INSTALLED_APPS 列表中,如下所示:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','myapp',]

3、定义模型

Django 中,数据模型是使用 Python 类来定义的。我们需要在 myapp 应用程序的 models.py 文件中定义数据模型。以下是一个简单的例子:

from django.db import modelsclass Book(models.Model):title = models.CharField(max_length=100)author = models.CharField(max_length=100)pub_date = models.DateField()price = models.DecimalField(max_digits=5, decimal_places=2)

在上面的例子中,我们定义了一个名为 Book 的数据模型,它包含了 titleauthorpub_date price 四个属性。title author 属性都是字符串类型,最大长度为 100pub_date 属性是一个日期类型,表示出版日期。price 属性是一个十进制数,共有五位数字,其中两位小数。

👉您可以使用Djangoinspectdb命令来快速根据MySQL数据库生成模型。inspectdb命令会根据数据库中的表结构自动生成相应的Django模型代码。

以下是使用inspectdb命令生成模型的步骤:

a. 确保您的Django项目已经连接到MySQL数据库。在settings.py文件中DATABASES字典中的相关配置正确。

b. 打开终端,进入项目根目录,并执行以下命令:

python manage.py inspectdb > models.py

该命令会将生成的模型代码输出到models.py文件中。

c. 在生成的代码中进行必要的修改。由于MySQL的表可能包含一些与Django模型不兼容的特性,例如自增长主键和命名不规范的列名,因此您需要手动修改生成的代码以适应您的项目需求。

d. models.py文件中导入必要的模块和类,例如:

from django.db import modelsclass YourModel(models.Model):# your fields herepass

e. 运行数据迁移命令,将模型同步到数据库中:

python manage.py makemigrationspython manage.py migrate

步骤 4:生成数据库迁移脚本

在定义完数据模型之后,我们需要使用 Django 的数据库迁移工具来生成数据库迁移脚本。以下是生成数据库迁移脚本的步骤:

1、创建迁移文件

在命令提示符或终端中进入项目主目录 myproject,然后输入以下命令:

python manage.py makemigrations

这将会根据我们在数据模型中定义的信息,生成一个新的迁移文件。迁移文件将被保存在应用程序的 migrations 目录中。

2、应用迁移文件

在命令提示符或终端中进入项目主目录 myproject,然后输入以下命令:

python manage.py migrate

这将会将我们的数据库迁移到最新的状态。如果我们之前没有使用过 Django 的数据库迁移工具,则该命令将会创建一个新的数据库。

👉如果你已经有了一个存在的数据库,并修改了某个模型类的字段或删除了某个模型类,执行 python manage.py makemigrations 会生成对应的迁移文件,再执行 python manage.py migrate 命令则会将这些修改应用到数据库中,并且可能会导致数据丢失或出现其他问题。

因此,在执行 migrate 命令之前,建议先备份数据库以避免数据丢失。

步骤 5:编写视图函数

Django 中,视图函数用于处理 HTTP 请求并生成 HTTP 响应。我们需要在应用程序的 views.py 文件中编写视图函数。以下是一个简单的例子:

from django.shortcuts import renderfrom django.http import HttpResponsefrom .models import Bookdef index(request):books = Book.objects.all()context = {'books': books}return render(request, 'index.html', context)

在上面的例子中,我们定义了一个名为 index 的视图函数。该函数使用 Book.objects.all() 查询所有的书籍,并将其存储在一个名为 books 的变量中。然后,我们创建了一个字典 context,将 books 变量添加到其中。最后,我们使用 render 函数将 index.html 模板渲染成 HTML 并返回给客户端。

步骤 6:创建模板

Django 中,模板用于生成 HTML 页面。我们需要在应用程序的 templates 目录中创建一个名为 index.html 的模板。以下是一个简单的例子:

<!DOCTYPE html><html><head><title>My Bookstore</title></head><body><h1>My Bookstore</h1><ul>{% for book in books %}<li>{{ book.title }} by {{ book.author }}</li>{% endfor %}</ul></body></html>

在上面的例子中,我们定义了一个 HTML 页面,使用 Django 的模板语言来遍历所有的书籍,并将它们显示在一个无序列表中。

步骤 7:配置 URL 映射

Django 中,URL 映射用于将 URL 请求映射到相应的视图函数。我们需要在应用程序的 urls.py 文件中定义 URL 映射。以下是一个简单的例子:

from django.urls import pathfrom . import viewsurlpatterns = [path('', views.index, name='index'),]

在上面的例子中,我们定义了一个 URL 映射,将根 URL 映射到 index 视图函数。我们还为该 URL 映射指定了一个名为 index 的名称。

部署 Django 应用程序

在完成开发和测试之后,我们需要将 Django 应用程序部署到生产环境中。以下是部署 Django 应用程序的步骤:

步骤 1:选择 Web 服务器

在部署 Django 应用程序之前,我们需要选择一个 Web 服务器。常见的 Web 服务器包括 ApacheNginxGunicorn 等等。在选择 Web 服务器时,我们需要考虑服务器的性能、稳定性、安全性等因素。

👉Nginx 擅长处理反向代理和负载均衡,而 Apache 擅长处理静态文件和动态内容。Gunicorn 则是 Python WSGI 应用程序的常用服务器。一般Web首选Nginx

步骤 2:安装 Web 服务器和数据库

在选择好 Web 服务器之后,我们需要在生产服务器上安装 Web 服务器和数据库。具体的安装方法因服务器和操作系统而异。我们需要根据服务器和操作系统的文档来完成安装。

步骤 3:部署 Django 应用程序

在安装好 Web 服务器和数据库之后,我们可以开始部署 Django 应用程序了。以下是部署 Django 应用程序的步骤:

1、将应用程序上传到服务器

将我们的 Django 应用程序上传到服务器。我们可以使用 FTPSCP 或其他文件传输工具来完成上传。

2、配置 Web 服务器

在部署 Django 应用程序之前,我们需要配置 Web 服务器。具体的配置方法因 Web 服务器而异。我们需要根据 Web 服务器的文档来完成配置。

在配置 Web 服务器时,我们需要指定 Django 应用程序的 WSGI 入口文件。以下是一个简单的例子:

import osfrom django.core.wsgi import get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')application = get_wsgi_application()

在上面的例子中,我们将 Django 应用程序的设置文件指定为 myproject.settings,然后调用 get_wsgi_application() 函数,返回一个 WSGI 应用程序对象。

3、设置静态文件和媒体文件

在部署 Django 应用程序时,我们需要处理静态文件和媒体文件。静态文件包括 CSSJavaScript、图片等文件,媒体文件包括用户上传的文件。我们需要在 Web 服务器中配置静态文件和媒体文件的访问。

对于静态文件,我们可以使用 Django 提供的 collectstatic 命令来收集静态文件,然后将其存储在一个指定的目录中。我们需要在 Web 服务器中配置该目录的访问。

对于媒体文件,我们需要在 Django 应用程序中设置媒体文件的存储路径,并在 Web 服务器中配置该路径的访问。

4、启动 Web 服务器

在完成以上步骤之后,我们可以启动 Web 服务器,让 Django 应用程序在生产环境中运行。

技术总结

本文介绍了 Django 的基本概念,包括模型、视图、模板、URL 映射等。我们还学习了如何使用 Django 创建一个简单的书店应用程序,并将其部署到生产环境中。

Django 是一个功能强大的 Web 框架,它提供了许多便捷的功能,例如 ORM、模板引擎、表单处理等。使用 Django 可以大大简化 Web 应用程序的开发过程,并提高开发效率。

相关文章:

Python web实战 | 使用 Django 搭建 Web 应用程序 【干货】

概要 从社交媒体到在线购物&#xff0c;从在线银行到在线医疗&#xff0c;Web 应用程序为人们提供了方便快捷的服务。Web 应用程序已经成为了人们日常生活中不可或缺的一部分。搭建一个高效、稳定、易用的 Web 应用程序并不是一件容易的事情。本文将介绍如何使用 Django 快速搭…...

UE5自定义蓝图节点(二)

继承于UBlueprintAsyncActionBase的类&#xff0c;异步输出节点的实现方法&#xff0c;代码测试正常 .h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Kismet/BlueprintA…...

Bean容器中的ThreadPoolTaskExecutor需要手动关闭吗

ThreadPoolTaskExecutor 是 Spring 提供的一个方便的线程池实现&#xff0c;用于异步执行任务或处理并发请求。 在使用 ThreadPoolTaskExecutor 作为 Spring Bean 注册到容器中后&#xff0c;Spring 会负责在应用程序关闭时自动关闭所有注册的线程池&#xff0c;所以不需要手动…...

Redis学习路线(3)——Redis的Java客户端

一、如何使用Redis的Java客户端 官方文档&#xff1a; https://redis.io/docs/clients/java/ Java-Redis客户端使用场景Jeids 以Redis命令作为方法名称&#xff0c;学习成本低&#xff0c;简单实现&#xff0c;但是Jedis实例是线程不安全的&#xff0c;多线程环境下需要基于连…...

行车遥控接线图

这个一般只有电工才会用。 主要是 【共线和总电】让人疑惑。 这图实际就是PLC的梯形图。 共电&#xff1a;接主电源。【它串联10A保险丝&#xff0c;再到继电器】 总电&#xff1a;它是所有继电器的公共端。【共电的继电器吸合&#xff0c;共电和总电就直通了。】共电的继电器…...

区块链实验室(11) - PBFT耗时与流量特征

以前面仿真程序为例&#xff0c;分析PBFT的耗时与流量特征。实验如下&#xff0c;100个节点构成1个无标度网络&#xff0c;节点最小度为5&#xff0c;最大度为38. 从每个节点发起1次交易共识。统计每次交易的耗时以及流量。本文所述的流量见前述仿真程序的说明:区块链实验室(3)…...

Shell编程基础(三)环境变量 位置变量 系统内置变量

环境变量 & 环境变量环境变量范围父子进程之间有效指定用户有效所有用户有效 位置变量系统内置变量 环境变量 在脚本种直接定义的变量&#xff0c;只能在当前shell进程中使用 若想要在其他shell进程中使用&#xff0c;可以将变量声明为 环境变量 export 变量名 &#xff…...

P5718 【深基4.例2】找最小值

题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​&#xff0c;求这 n n n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n n n&#xff0c;表示数字个数。 第二行输入 n n n 个非负整数&#xff0c;表示 a 1 , a 2 … a n a_1,a_2 \dots a_n a1​,a2​……...

C++——STL容器之list链表的讲解

目录 一.list的介绍 二.list类成员函数的讲解 2.2迭代器 三.添加删除数据&#xff1a; 3.1添加&#xff1a; 3.2删除数据 四.排序及去重函数&#xff1a; 错误案例如下&#xff1a; 方法如下&#xff1a; 一.list的介绍 list列表是序列容器&#xff0c;允许在序列内的任何…...

使用for循环输出左上三角、右上三角、左下三角、右下三角、上下三角

1、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图形 666666666666666*/for(int i1;i<5;i){for(int j1;j<i;j){putchar(6);}printf("\n"); } return 0; } 2、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图…...

CAXA中.exb或者.dwg文件保存为PDF

通常CAXAZ中的文件为.exb或者.dwg格式&#xff0c;我们想打印或者保存为PDF文件格式&#xff0c;那么就用一下的方法&#xff1a; CAXA文件如图所示&#xff1a; 框选出你要打印的图纸&#xff01;&#xff01;&#xff01;&#xff01; 我们选择"菜单"->"…...

华为刷题:HJ3明明随机数

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int N scan.nextInt();int[] arr new int[N];for (int i 0; i < N; i) {int n sca…...

ENVI提取NDVI与植被覆盖度估算

目标是通过ENVI计算植被覆盖度结合ArcGIS出图得到植被覆盖图。 一、植被覆盖度的定义: 植被覆盖度( FractionalVegetation Cover,FVC) 通常定义为植被( 包括叶、茎、枝) 在地面的垂直投影面积占统计区总面积的百分比,它量化了植被的茂密程度,反应了植被的生长态势,是刻画…...

Arm 扩大开源合作伙伴关系,加强投入开放协作

作者&#xff1a;Arm 开源软件副总裁 Mark Hambleton Arm 和我们的生态系统的关键信念之一是与开源社区合作&#xff0c;共创一个高度发达的 Arm 架构&#xff0c;使软件的落地更加稳定&#xff0c;从而让全球数百万开发者能够测试并创建自己的应用。 为此&#xff0c;Arm 支…...

Kubernetes 的核心概念:Pod、Service 和 Namespace 解析

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…...

互联网搜索的学习笔记

1. 参考资料 《Internet Search Tips》《Google Search Operators: The Complete List (42 Advanced Operators)》 2. 预备知识 2.1 查询语法 2.1.1 -&#xff1a;排除符 用于排除指定关键字。例如&#xff0c;如果想搜索“苹果”但不想看到“苹果手机”的结果&#xff0c;…...

vue事件修饰符

vue事件修饰符 1、目标2、语法 1、目标 在事件后面.修饰符名-给事件带来强大功能 2、语法 事件名.修饰符“methods里的函数” 修饰符列表 .stop - 阻止事件冒泡 示例&#xff1a; <template><div id"app"><div click"fatherFn"><…...

【安全】web中的常见编码浅析浏览器解析机制

目录 常见编码 一、ASCII码 二、URL编码 三、Unicode编码 四、HTML实体编码 结合编码理解浏览器解析机制 常见编码 一、ASCII码 ASCII (American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09; 计算机内部&#xff0…...

Ceph概述、准备ceph部署环境、cephadm概述、安装Ceph集群、ceph块存储、存储池、rbd镜像管理、ceph客户端配置

day03 day03ceph概述部署Ceph节点准备cephadm准备基础环境安装ceph实现块存储块存储基础存储池镜像ceph客户端 ceph概述 ceph可以实现的存储方式&#xff1a; 块存储&#xff1a;提供像普通硬盘一样的存储&#xff0c;为使用者提供“硬盘”文件系统存储&#xff1a;类似于NFS…...

python selenium爬虫自动登录实例

拷贝地址&#xff1a;python selenium爬虫自动登录实例_python selenium登录_Ustiniano的博客-CSDN博客 一、概述 我们要先安装selenium这个库&#xff0c;使用pip install selenium 命令安装&#xff0c;selenium这个库相当于机器模仿人的行为去点击浏览器上的元素&#xff0…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...