Python的那些事第十四篇:Flask与Django框架的趣味探索之旅

ops/2025/2/9 4:30:56/

Python Web应用开发:Flask与Django框架的趣味探索之旅

 

目录

 

第一章:Flask框架的奇幻之旅

第二章:Django框架的奇幻之旅

第三章:Flask与Django的魔法对决

第四章:总结


在Python的世界里,Web开发就像是一场精彩的冒险,而Flask和Django则是这场冒险中不可或缺的“神器”。它们就像是魔法师的魔法棒,能够帮助开发者轻松地构建出强大的Web应用。今天,就让我们一起踏上这场充满欢笑和惊喜的探索之旅,深入了解一下这两个框架的奥秘。


第一章:Flask框架的奇幻之旅

1.1 安装与配置:开启魔法之旅的钥匙

安装Flask

在开始我们的冒险之前,我们需要先找到一把魔法钥匙来开启Flask的魔法世界。这把钥匙就是pip命令。在你的终端或命令行中输入以下命令,就可以安装Flask了:

pip install Flask

安装完成后,你就可以开始你的魔法之旅了。如果你想要一个更加安全的魔法环境,可以使用虚拟环境来隔离你的魔法实验。创建虚拟环境的命令如下:

python -m venv flask_env

激活虚拟环境的命令如下:

source flask_env/bin/activate  # 在Unix或MacOS上
flask_env\Scripts\activate  # 在Windows上
配置Flask

安装好Flask后,我们需要给它配置一个魔法名字。在你的魔法实验室(也就是你的代码文件夹)中,创建一个名为app.py的文件,并写入以下代码:

python">from flask import Flask
app = Flask(__name__)

这行代码就像是给你的Flask应用起了一个名字,让它知道自己是谁。__name__是一个魔法变量,它告诉Flask应用的根路径在哪里。

1.2 创建应用:魔法城堡的诞生

应用结构

在Flask的世界里,一个应用的结构就像是一个魔法城堡,它包含了各种各样的魔法房间。一个典型的Flask应用结构如下:

my_flask_app/
│
├── app.py
├── templates/
│   └── index.html
├── static/
│   └── style.css
└── venv/
  • app.py:这是魔法城堡的入口,所有的魔法都从这里开始。

  • templates/:这是魔法城堡的图书馆,存放着各种HTML模板文件。

  • static/:这是魔法城堡的宝库,存放着各种静态文件,如CSS、JavaScript等。

  • venv/:这是魔法城堡的魔法实验室,存放着你的虚拟环境。

创建应用实例

app.py中,创建一个Flask应用实例:

python">from flask import Flask
app = Flask(__name__)

这行代码就像是给你的Flask应用起了一个名字,让它知道自己是谁。__name__是一个魔法变量,它告诉Flask应用的根路径在哪里。

1.3 路由与视图函数:魔法传送门的搭建

定义路由

在Flask的世界里,路由就像是魔法传送门,它能够将用户从一个地方传送到另一个地方。使用@app.route()装饰器来定义路由:

python">@app.route('/')
def index():return 'Welcome to the Home Page!'

这个路由定义了一个根路径/,当用户访问根路径时,会调用index()函数,返回“Welcome to the Home Page!”。

动态路由

有时候,我们需要一个更加灵活的魔法传送门,它可以根据不同的参数将用户传送到不同的地方。这就是动态路由的用处:

python">@app.route('/user/<username>')
def show_user_profile(username):return f'User {username}'

在这个例子中,<username>是一个动态参数,它会作为函数参数传入show_user_profile()函数。当你访问/user/kimi时,它会返回“User kimi”。

1.4 模板渲染(Jinja2模板):魔法图书馆的秘密

渲染模板

Flask使用Jinja2模板引擎来渲染HTML页面。通过render_template()函数将模板文件渲染成HTML页面:

python">from flask import render_template@app.route('/')
def index():return render_template('index.html', name='Kimi')

在这个例子中,index.html是模板文件,name='Kimi'是传递给模板的变量。

模板语法

在模板文件中,可以使用Jinja2语法来访问传递的变量:

<!DOCTYPE html>
<html>
<head><title>Home Page</title>
</head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

{ { name }}是Jinja2语法,用于在模板中插入变量name的值。

1.5 表单处理:魔法宝库的守护者

创建表单类

Flask通过Flask-WTF扩展简化了表单的创建和验证过程。首先,需要定义一个继承自FlaskForm的表单类:

python">from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Emailclass LoginForm(FlaskForm):username = StringField('Username', validators=[DataRequired()])password = PasswordField('Password', validators=[DataRequired()])submit = SubmitField('Login')

在这个例子中,LoginForm包含用户名和密码字段,并且每个字段都有相应的验证器。

表单验证

当用户提交表单后,需要在视图函数中处理这些数据:

python">from flask import render_template, redirect, url_for@app.route('/login', methods=['GET', 'POST'])
def login():form = LoginForm()if form.validate_on_submit():# 如果表单验证通过,可以在这里处理用户数据return redirect(url_for('index'))return render_template('login.html', form=form)

在模板文件login.html中,可以使用以下代码来渲染表单:

<!DOCTYPE html>
<html>
<head><title>Login</title>
</head>
<body><form method="POST" action="">{{ form.hidden_tag() }}<p>{{ form.username.label }}<br>{{ form.username(size=32) }}</p><p>{{ form.password.label }}<br>{{ form.password(size=32) }}</p><p>{{ form.submit() }}</p></form>
</body>
</html>

第二章:Django框架的奇幻之旅

2.1 安装与配置:开启魔法之旅的钥匙

安装Django

在Django的世界里,我们同样需要一把魔法钥匙来开启这场冒险。这把钥匙同样是pip命令。在你的终端或命令行中输入以下命令,就可以安装Django了:

pip install Django

安装完成后,你就可以开始你的魔法之旅了。如果你想要一个更加安全的魔法环境,可以使用虚拟环境来隔离你的魔法实验。创建虚拟环境的命令如下:

python -m venv django_env

激活虚拟环境的命令如下:

source django_env/bin/activate  # 在Unix或MacOS上
django_env\Scripts\activate  # 在Windows上
配置Django

安装好Django后,我们需要给它配置一个魔法名字。在你的魔法实验室(也就是你的代码文件夹)中,创建一个名为manage.py的文件,并写入以下代码:

django-admin startproject myproject

这行命令会创建一个名为myproject的Django项目。进入项目目录后,运行以下命令来创建一个应用:

python manage.py startapp myapp

这行命令会创建一个名为myapp的Django应用。在myapp目录中,你会看到一个models.py文件,这是Django的魔法模型文件。

2.2 项目结构:魔法城堡的布局

一个典型的Django项目结构如下:

myproject/
│
├── manage.py
├── myproject/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── myapp/├── __init__.py├── admin.py├── apps.py├── models.py├── tests.py└── views.py
  • manage.py:这是Django项目的入口文件,用于管理Django项目的各种命令。

  • settings.py:这是Django项目的配置文件,包含了数据库设置、应用列表等。

  • urls.py:这是Django项目的URL路由文件,用于定义项目的URL路径。

  • models.py:这是Django应用的模型文件,用于定义数据库模型。

  • views.py:这是Django应用的视图文件,用于定义视图函数。

2.3 模型(ORM):魔法模型的构建

定义模型

在Django的世界里,模型就像是魔法城堡的基石,它定义了数据库的结构。在models.py中,定义一个模型如下:

python">from django.db import modelsclass User(models.Model):name = models.CharField(max_length=100)email = models.EmailField()password = models.CharField(max_length=100)

这个模型定义了一个User表,包含nameemailpassword三个字段。

数据库操作

在Django中,可以通过ORM操作数据库。例如,创建一个用户:

python">user = User.objects.create(name='Kimi', email='kimi@example.com', password='password')

查询用户:

python">users = User.objects.all()

更新用户:

python">user = User.objects.get(name='Kimi')
user.email = 'new_email@example.com'
user.save()

删除用户:

python">user = User.objects.get(name='Kimi')
user.delete()

2.4 视图与模板:魔法传送门与魔法图书馆

视图函数

在Django中,视图函数就像是魔法传送门,它能够将用户从一个地方传送到另一个地方。在views.py中,定义一个视图函数如下:

python">from django.shortcuts import renderdef index(request):return render(request, 'index.html')

这个视图函数定义了一个根路径/,当用户访问根路径时,会调用index()函数,渲染index.html模板。

模板语法

在模板文件中,可以使用Django模板语言来访问传递的变量:

<!DOCTYPE html>
<html>
<head><title>Home Page</title>
</head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

{ { name }}是Django模板语言,用于在模板中插入变量name的值。

URL%E8%B7%AF%E7%94%B1%EF%BC%9A%E9%AD%94%E6%B3%95%E4%BC%A0%E9%80%81%E9%97%A8%E7%9A%84%E5%B8%83%E5%B1%80" name="2.5%20URL%E8%B7%AF%E7%94%B1%EF%BC%9A%E9%AD%94%E6%B3%95%E4%BC%A0%E9%80%81%E9%97%A8%E7%9A%84%E5%B8%83%E5%B1%80">2.5 URL路由:魔法传送门的布局

在Django中,URL路由就像是魔法传送门的布局,它定义了用户可以通过哪些路径访问应用。在urls.py中,定义URL路由如下:

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

这个路由定义了一个根路径/,当用户访问根路径时,会调用index()视图函数。

2.6 表单与验证:魔法宝库的守护者

创建表单类

在Django中,表单类就像是魔法宝库的守护者,它能够保护用户输入的数据。在forms.py中,定义一个表单类如下:

python">from django import formsclass LoginForm(forms.Form):username = forms.CharField(label='Username', max_length=100)password = forms.CharField(label='Password', widget=forms.PasswordInput)

这个表单类定义了一个登录表单,包含用户名和密码两个字段。

表单验证

在视图函数中,可以使用表单类来验证用户输入的数据:

python">from django.shortcuts import render, redirect
from .forms import LoginFormdef login(request):if request.method == 'POST':form = LoginForm(request.POST)if form.is_valid():# 如果表单验证通过,可以在这里处理用户数据return redirect('index')else:form = LoginForm()return render(request, 'login.html', {'form': form})

在模板文件login.html中,可以使用以下代码来渲染表单:

<!DOCTYPE html>
<html>
<head><title>Login</title>
</head>
<body><form method="POST" action="">{% csrf_token %}<p>{{ form.username.label }}<br>{{ form.username }}</p><p>{{ form.password.label }}<br>{{ form.password }}</p><p><input type="submit" value="Login"></p></form>
</body>
</html>

第三章:Flask与Django的魔法对决

在Python的Web开发世界里,Flask和Django就像是两个强大的魔法师,它们各自有着独特的魔法技能。Flask以其简洁和灵活性著称,而Django则以其强大和功能齐全而闻名。那么,它们之间到底谁更胜一筹呢?

3.1 简洁性:魔法咒语的长度

在简洁性方面,Flask无疑是胜者。它的魔法咒语(代码)非常简洁,容易理解和使用。例如,创建一个简单的Web应用只需要几行代码:

python">from flask import Flask
app = Flask(__name__)@app.route('/')
def index():return 'Hello, Flask!'

而Django则需要更多的魔法咒语来完成同样的任务。例如,创建一个Django项目需要运行以下命令:

django-admin startproject myproject

然后还需要创建一个应用:

python manage.py startapp myapp

views.py中定义视图函数:

python">from django.shortcuts import renderdef index(request):return render(request, 'index.html')

urls.py中定义URL路由:

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

3.2 功能性:魔法宝库的丰富程度

在功能性方面,Django无疑是胜者。它自带了许多强大的魔法工具,如ORM、表单验证、用户认证等。这些工具使得Django能够轻松地构建出功能强大的Web应用。例如,Django的ORM可以非常方便地操作数据库:

python">user = User.objects.create(name='Kimi', email='kimi@example.com', password='password')

而Flask则需要借助第三方扩展来实现类似的功能。例如,使用Flask-SQLAlchemy来操作数据库:

python">from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(100), nullable=False)email = db.Column(db.String(100), nullable=False)password = db.Column(db.String(100), nullable=False)

3.3 社区支持:魔法学院的规模

在社区支持方面,Django和Flask都有着庞大的魔法学院。Django的社区更加成熟和稳定,它有着丰富的文档和教程,可以帮助开发者快速上手。而Flask的社区则更加活跃和创新,它不断地推出新的扩展和工具,帮助开发者实现各种功能。

3.4 性能:魔法能量的强度

在性能方面,Flask和Django都有着出色的表现。Flask的性能非常出色,它的魔法能量(性能)非常强大。它能够快速地处理用户的请求,并返回响应。而Django的性能也不逊色,它能够轻松地处理大量的用户请求,并且可以进行水平扩展。


第四章:总结

在Python的Web开发世界里,Flask和Django都是非常强大的魔法师。它们各自有着独特的魔法技能,可以帮助开发者构建出功能强大的Web应用。Flask以其简洁和灵活性著称,而Django则以其强大和功能齐全而闻名。在选择魔法师时,开发者需要根据自己的需求和喜好来选择。如果你喜欢简洁和灵活的魔法,那么Flask无疑是你的最佳选择。如果你喜欢强大和功能齐全的魔法,那么Django则是你的不二之选。

无论你选择哪个魔法师,Python的Web开发世界都充满了无限的可能性。只要你掌握了正确的魔法技能,你就可以轻松地构建出功能强大的Web应用。希望这次的魔法之旅能够帮助你更好地了解Python的Web开发世界,让你在未来的开发中更加得心应手。


http://www.ppmy.cn/ops/156889.html

相关文章

【C++篇】C++11新特性总结1

目录 1&#xff0c;C11的发展历史 2&#xff0c;列表初始化 2.1C98传统的{} 2.2&#xff0c;C11中的{} 2.3&#xff0c;C11中的std::initializer_list 3&#xff0c;右值引用和移动语义 3.1&#xff0c;左值和右值 3.2&#xff0c;左值引用和右值引用 3.3&#xff0c;…

PyTorch torch.unbind、torch.split 和 torch.chunk函数介绍

pytorch中 torch.unbind、torch.split 和 torch.chunk等函数可用于张量的拆分操作。 1. torch.unbind 功能说明&#xff1a; torch.unbind 沿指定的维度将张量“解包”为多个张量&#xff0c;返回一个元组。解包后被操作的那个维度会消失&#xff0c;每个输出张量的维度数会比…

VUE之插槽

1、默认插槽 <template><div class"father"></div><h3>父组件</h3><div class"content"><Category title"热门游戏列表"><ul><li v-for"g in games" :key"g.id">{{…

基于ArcGIS的SWAT模型+CENTURY模型模拟流域生态系统水-碳-氮耦合过程研究

流域是一个相对独立的自然地理单元&#xff0c;它是以水系为纽带&#xff0c;将系统内各自然地理要素连结成一个不可分割的整体。碳和氮是陆地生态系统中最重要的两种化学元素&#xff0c;而在流域系统内&#xff0c;水-碳-氮是相互联动、不可分割的耦合体。随着流域内人类活动…

使用 Docker 部署 RabbitMQ 的详细指南

使用 Docker 部署 RabbitMQ 的详细指南 在现代应用程序开发中&#xff0c;消息队列系统是不可或缺的一部分。RabbitMQ 是一个流行的开源消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。本文将详细介绍如何使用 Docker 部署 RabbitMQ&#xf…

基于微信小程序的校园水电费管理平台设计与实现

目录 摘要 系统展示 技术介绍 MySQL数据库 Vue框架 代码实现 管理员实现登录后端代码 连接数据库 前端代码实现 获取源码 摘要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用…

快速上手——.net封装使用DeekSeek-V3 模型

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电,去丈量人心,是否能达到人机合一?开工大吉 新的一年就这么水灵灵的开始了,在这里,祝各位读者新春快乐,万事如意! 新年伊…

vulkan学习(一)

opengl相对与vulkan不是一个级别的东西&#xff0c;opengl几十行代码就可以绘制一个简单的物体&#xff0c;而vulkan需要几百行才能绘制&#xff0c;所以vulkan的学习曲线比较陡峭&#xff0c;本人经过也经过一个很长的时间的断断续续学习对vulkan有了一些认识&#xff0c;在这…