Python 课程11-Web 开发

news2024/11/15 16:19:53

前言

        Web 开发已经成为现代软件开发的核心领域之一,许多应用程序和服务都通过 Web 来与用户和其他系统交互。Python 作为一门广泛使用的编程语言,提供了多种 Web 开发框架,其中最流行的两个框架是 FlaskDjango

  • Flask 是一个轻量级的 Web 框架,灵活、易于学习,适合快速构建简单的 Web 应用。
  • Django 是一个功能齐全的 Web 框架,提供了强大的内置功能,适合开发复杂的 Web 项目。

        本教程将带你通过 Flask 和 Django 了解 Python Web 开发的基础。我们将从创建一个简单的 Flask Web 应用开始,然后逐步介绍如何处理路由和表单,最后介绍如何使用 Django 构建复杂的 Web 项目。


目录

  1. Flask Web 开发

    • 什么是 Flask?
    • 安装与快速入门
    • 路由与视图函数
    • 表单处理与请求方法
    • 模板渲染与静态文件
    • 部署 Flask 应用
  2. Django Web 开发

    • 什么是 Django?
    • 安装与快速入门
    • Django 项目结构解析
    • 路由与视图
    • 模板引擎与表单处理
    • 使用 Django ORM 进行数据库操作
    • Django Admin 后台管理系统
    • 部署 Django 项目

1. Flask Web 开发

什么是 Flask?

Flask 是一个基于 Python 的轻量级 Web 框架。它的设计哲学是简单而灵活,不像 Django 那样具有大量的功能和规则,Flask 提供了极少的工具,并允许开发者根据需求自由选择第三方扩展。这使得 Flask 非常适合快速开发小型 Web 应用。

安装与快速入门

在开始使用 Flask 之前,需要先安装它:

pip install Flask

创建一个简单的 Flask 应用:

from flask import Flask

# 创建 Flask 应用
app = Flask(__name__)

# 定义路由和视图函数
@app.route('/')
def home():
    return "Hello, Flask!"

# 启动应用
if __name__ == '__main__':
    app.run(debug=True)

在这段代码中:

  • 我们创建了一个 Flask 应用实例。
  • 使用 @app.route('/') 定义了一个路由,访问 http://localhost:5000/ 时会触发 home() 函数。
  • app.run(debug=True) 启动 Flask 开发服务器,debug=True 可以在代码更改时自动重新加载应用。
路由与视图函数

Flask 中的路由用于将 URL 与视图函数绑定。视图函数定义了当用户访问特定 URL 时,应该执行的逻辑。

@app.route('/hello/<name>')
def hello(name):
    return f"Hello, {name}!"

在这个例子中,路由 /hello/<name> 使用了动态 URL 参数。当访问 http://localhost:5000/hello/John 时,浏览器将会显示 Hello, John!

表单处理与请求方法

Flask 提供了处理不同 HTTP 请求方法的功能,例如 GETPOST

下面是一个包含表单的示例,通过 POST 请求来提交数据:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/submit', methods=['GET', 'POST'])
def submit():
    if request.method == 'POST':
        name = request.form['name']
        return f"Hello, {name}!"
    return render_template('submit_form.html')

在这里,我们通过 methods=['GET', 'POST'] 指定路由支持 GET 和 POST 请求。request.form 用于获取表单数据。

示例表单模板 submit_form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Submit Form</title>
</head>
<body>
    <form action="/submit" method="post">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name">
        <input type="submit" value="Submit">
    </form>
</body>
</html>
模板渲染与静态文件

Flask 使用 Jinja2 模板引擎来渲染动态 HTML。可以通过 render_template() 函数渲染模板。

from flask import render_template

@app.route('/welcome/<name>')
def welcome(name):
    return render_template('welcome.html', name=name)

 模板文件 welcome.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

在模板中使用 {{ name }} 来插入动态内容。static 文件夹中可以放置静态文件(如 CSS、JavaScript、图片等),并通过 url_for() 函数来引用它们。

部署 Flask 应用

在本地开发完成 Flask 应用后,可以通过多种方式将应用部署到线上服务器。常见的部署方式包括:

  • 使用 GunicornNginx 部署到 Linux 服务器。
  • 部署到 Heroku 等 PaaS 平台。
  • 使用 Docker 容器化部署。

2. Django Web 开发

什么是 Django?

Django 是一个功能齐全、成熟的 Web 框架,旨在帮助开发者快速构建高性能和高可维护性的 Web 应用。与 Flask 的轻量级设计不同,Django 提供了丰富的内置功能,包括 ORM、表单处理、认证系统、管理后台等,适合用于开发复杂的 Web 应用。

安装与快速入门

安装 Django:

pip install django

 创建 Django 项目:

django-admin startproject myproject
cd myproject
python manage.py runserver

使用 Django 内置的开发服务器启动应用,并访问 http://localhost:8000/

Django 项目结构解析

创建 Django 项目后,目录结构如下:

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        wsgi.py
  • manage.py:Django 项目的命令行工具,用于运行服务器、创建数据库、执行迁移等。
  • settings.py:项目的全局设置文件,包括数据库配置、应用列表等。
  • urls.py:用于定义 URL 路由。
  • wsgi.py:WSGI 入口文件,通常用于部署。
路由与视图

在 Django 中,路由由 urls.py 文件管理,视图函数或类定义处理请求的逻辑。

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

urlpatterns = [
    path('', views.home, name='home'),
]
# myproject/views.py
from django.http import HttpResponse

def home(request):
    return HttpResponse("Hello, Django!")
模板引擎与表单处理

Django 提供了强大的模板系统,允许你在模板中使用逻辑语句,并处理表单提交。

<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
    <h1>Welcome to Django</h1>
    <form method="post">
        {% csrf_token %}
        <input type="text" name="name">
        <input type="submit" value="Submit">
    </form>
</body>
</html>

视图函数可以处理 POST 请求中的表单数据:

# views.py
from django.shortcuts import render

def index(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        return HttpResponse(f"Hello, {name}!")
    return render(request, 'index.html')
使用 Django ORM 进行数据库操作

Django 提供了强大的 ORM(对象关系映射),使得开发者可以用 Python 代码来操作数据库,而不需要直接编写 SQL。

创建模型(Model):

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.title

使用命令迁移数据库结构:

python manage.py makemigrations
python manage.py migrate

使用 Django ORM 进行数据库操作:

# 创建对象
article = Article.objects.create(title="Django ORM", content="Django makes it easy to work with databases.")
article.save()
# 查询对象
articles = Article.objects.all()  # 获取所有文章
specific_article = Article.objects.get(id=1)  # 获取特定文章

# 更新对象
specific_article.title = "Updated Title"
specific_article.save()

# 删除对象
specific_article.delete()

在 Django 中,通过 ORM 操作数据库非常简单,它支持多种数据库(如 SQLite、PostgreSQL、MySQL 等),并且支持复杂的查询、过滤、关联操作等。

Django Admin 后台管理系统

Django 提供了一个非常强大的内置管理后台系统,开发者只需简单配置,即可为网站的后台管理提供完善的界面。通过 Django Admin,开发者可以管理数据库中的对象、执行数据操作,甚至扩展为用户提供丰富的后台功能。

启用 Django Admin:

首先,需要在 INSTALLED_APPS 中确保包含 django.contrib.admin,这个应用是 Django 管理后台系统的一部分。

然后,注册模型到 Admin 中:

# admin.py
from django.contrib import admin
from .models import Article

admin.site.register(Article)

接着,创建一个超级用户以登录管理后台:

python manage.py createsuperuser

运行服务器后,访问 http://localhost:8000/admin,你将看到一个完整的后台管理系统,能够直接操作数据库中的数据。

部署 Django 项目

在本地开发完成 Django 项目后,可以通过以下方式将项目部署到线上环境:

  1. 使用 Gunicorn 和 Nginx 部署到 Linux 服务器

    • Gunicorn 是一个高效的 Python WSGI 服务器,能够运行 Django 应用。
    • Nginx 是一个常见的 Web 服务器,负责处理静态文件、负载均衡、反向代理等任务。

    基本步骤包括安装 GunicornNginx,配置 Gunicorn 运行 Django 项目,使用 Nginx 作为反向代理服务器。

  2. 部署到 Heroku 等 PaaS 平台

    • Heroku 是一个 PaaS 平台,允许开发者轻松部署应用,而无需关心底层的服务器配置。
    • 使用 git push 命令将 Django 项目推送到 Heroku 上,Heroku 会自动处理服务器配置和部署细节。
  3. 使用 Docker 容器化部署

    • Docker 提供了一种将应用及其依赖环境打包为容器的方式,能够轻松地将 Django 项目迁移到不同的环境中。
    • 可以通过 Dockerfiledocker-compose 来构建和部署 Django 项目。

结论

通过本教程,我们详细介绍了如何使用 Flask 和 Django 进行 Web 开发。Flask 是一个轻量级的框架,适合快速构建简单的 Web 应用,而 Django 提供了丰富的内置功能,能够帮助开发者快速开发复杂的 Web 项目。

  • Flask 让你能够快速启动、构建路由、处理表单,并通过模板渲染动态内容,是初学者学习 Web 开发的绝佳选择。
  • Django 则提供了强大的 ORM、表单处理、模板引擎以及内置的管理后台,帮助开发者更好地管理和扩展应用,适合大型项目的开发。

无论你选择 Flask 还是 Django,Python 都为 Web 开发提供了极大的便利。通过不断的实践和学习,你将能够掌握 Web 开发的核心技能,构建出稳定、高效的 Web 应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dubbo SPI源码

文章目录 Dubbo SPI使用方式AOP功能源码剖析SPI注解1.获取加载器2.获取拓展实例对象3.创建拓展类的实例对象 Dubbo SPI Dubbo 的 SPI&#xff08;Service Provider Interface&#xff09;机制是一种强大的扩展机制&#xff0c;它允许开发者在运行时动态地替换或增加框架的功能。…

2-95 基于matlab的模板定位

基于matlab的模板定位。利用①相关匹配&#xff08;Correlation Matching&#xff09;、②基于Hausdorff距离匹配方法 及③考虑对场景图象距离变换&#xff08;Distance Transform&#xff09;的Hausdorff距离匹配方法,实现模板目标在场景图象中的定位。程序已调通&#xff0c;…

XShell快速连接虚拟机(Ubuntu系统)

目录 前言 一 (XShell)(虚拟机 )(Ubuntu)下载 二 虚拟机的ip查找 三 虚拟机中安装连接环境 四 开启ssh-server服务 五 验证是Ubuntu是否开启ssh-server服务 六 连接XShell软件 前言 对于刚开始探索 Linux 世界的新手来说&#xff0c;拥有一台自己的服务器可能并不现实。幸运的…

linux服务器配置及服务器资源命令使用查看

在做i性能压测之前&#xff0c;所了解的服务器配置&#xff1a;CPU、内存、硬盘、网络 一、查看cpu信息 常用命令&#xff1a;cat /proc/cpuinfo或者lscpu、pidstat等 需要关注的&#xff1a; Architecture: x86_64 # 架构信息&#xff0c;表示系统的CPU架构为x86_64&#…

业务资源管理模式语言14

第三节&#xff1a;在前面讨论的Resource Transcations&#xff08;资源事务&#xff09;中有许多共同的行为。其中一个行为可以包含多个项目&#xff0c;每个项目对应一个不同的资源&#xff08;ItemizeTheResourceTransaction&#xff08;11&#xff09;。事务可以产生一些报…

GitLab权限及设置

之前很少关注这些&#xff0c;项目的权限&#xff0c;一般由专门的管理人员设置。 但自己创建的项目自己可以设置权限。下面是一些笔记。 GitLab中用户权限_gitlab 权限-CSDN博客 开发中遇到要将自己这块的代码上传到Git&#xff0c;由其他组的同事拉取后继续开发。上传代码后…

【JVM】概述

前言 Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架&#xff08;如Spring、MyBatis等&#xff09;构成。在国内&#xff0c;有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富&…

Oracle从入门到放弃

Oracle从入门到放弃 左连接和右连接Where子查询单行子查询多行子查询 from子句的子查询select子句的子查询oracle分页序列序列的应用 索引PL/SQL变量声明与赋值select into 赋值变量属性类型 异常循环游标存储函数存储过程不带传出参数的存储过程带传出参数的存储过程 左连接和…

【爬虫软件】批量采集抖音主页已发布作品

一、背景介绍 以下xx代表你猜中的部分。 1.1 爬取目标 用python开发的xx爬虫采集软件&#xff0c;可自动按博主抓取其已发布视频。 为什么有了源码还开发界面软件呢&#xff1f;方便不懂编程代码的小白用户使用&#xff0c;无需安装python&#xff0c;无需改代码&#xff0c;…

瞳孔检测系统源码分享

瞳孔检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

CS61C 2020计算机组成原理Lecture01-数字表示,溢出

1. 原码 原码就是符号化的数值&#xff0c;其编码规则简单直观&#xff1a;正数符号位用0表示&#xff0c;负数符号位用1表示&#xff0c;数值位保持不变。 x0.1101&#xff0c;则[x]原0.1101&#xff1b;x1101&#xff0c;则[x]原01101x -0.1111&#xff0c;则[x]原1.1111&…

《Mesh 组网和 AC+AP 组网的优缺点》

Mesh 组网和 ACAP 组网的优缺点。 Mesh 组网的优点&#xff1a; 1. 部署灵活&#xff1a;节点之间可以通过无线方式连接&#xff0c;新增节点比较方便&#xff0c;无需事先规划布线。 2. 自我修复和优化&#xff1a;如果某个节点出现故障&#xff0c;网络可以自动重新路由数据&…

MyBatis 数据处理:主键获取、批量删除与动态表名

目录 MyBatis 数据处理&#xff1a;主键获取、批量删除与动态表名 1.主键获取 1&#xff09;mapper接口 2&#xff09;mapper.xml 3&#xff09;测试代码 4&#xff09;测试结果 2.批量删除 1&#xff09;mapper接口 1-使用手动拼接字符串数组的方法 2-使用mybatis中的foreach标…

【数据结构与算法 | 每日一题 | 力扣篇】力扣1184

1. 力扣1184&#xff1a;公交站间的距离 1.1 题目&#xff1a; 环形公交路线上有 n 个站&#xff0c;按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离&#xff0c;distance[i] 表示编号为 i 的车站和编号为 (i 1) % n 的车站之间的距离。 环线上的公交车…

微信支付开发-程序开发

一、操作流程图 二、后端代码实现 1、题库实现 a、列表、所有、详情、保存、启禁用、导入答题 b、获取奖品信息、保存奖品信息、 class Question extends Base {// 列表public function getList(){$param $this->request->param();$where [];if(!empty($param[title])…

spdlog二次封装

这里写自定义目录标题 封装的原因封装的思想初始化接口的封装对日志输出接口进行宏的封装 封装的原因 1.避免单例的锁冲突&#xff0c;因此直接创建全局的线程安全的日志器进行使用 2.因为日志输出没有文件名行号&#xff0c;因此使用宏进行二次封装输出日志的文件名和行号 3.…

【JavaScript】LeetCode:707设计链表

文章目录 题目内容题目分析(1) 获取第n个节点的值(2) 头部插入节点(3) 尾部插入节点(4) 第n个节点前插入节点(5) 删除第n个节点 完整代码 题目内容 题目分析 添加哨兵节点dummy。在第n个节点前插入节点时&#xff0c;应该找到第n - 1个节点&#xff08;即前一个节点&#xff0…

国内人工智能产业发展现状及对策研究

一、引言 人工智能作为新时代科技革命和产业变革的核心力量&#xff0c;正深刻改变着全球经济格局。我国政府高度重视人工智能产业发展&#xff0c;将其列为国家战略性新兴产业。在此背景下&#xff0c;本文旨在分析我国人工智能产业发展现状&#xff0c;探讨面临的挑战&#x…

java基础面试题总结

java基础面试题总结 目录 前言 1. JVM vs JDK vs JRE的了解 2. 谈谈你对编程、编译、运行的理解 3. 什么是字节码?采用字节码的好处是什么? 5. java中的注解有几种&#xff0c;分别是什么&#xff1f; 6. 字符型常量和字符串常量 7.标识符和关键字的认识 8. 泛型&#xff…

初识Verilog HDL其二

文章目录 运算符往期回顾 运算符 往期回顾 初识Verilog HDL其一