白骑士的Python教学高级篇 3.4 Web开发

系列目录

上一篇:白骑士的Python教学高级篇 3.3 数据库编程

        在现代软件开发中,Web开发占据了重要的一席之地。通过Web开发,我们可以创建从简单的个人博客到复杂的电子商务网站等各种应用。在Python的生态系统中,Flask和Django是两个非常流行的Web框架,它们各自有着独特的优点和使用场景。此外,理解前后端交互也是Web开发中不可或缺的一部分。本文将详细介绍Flask和Django的基础知识,并探讨前后端交互的基本概念。

Flask入门

        Flask是一个轻量级的Web框架,由Armin Ronacher开发。它被设计成一个微框架,核心非常简洁,只包含了Web服务器和模板引擎两个最基本的功能,其它功能通过扩展来实现。Flask的灵活性和简洁性使其成为快速开发小型应用和API的理想选择。

安装Flask

        安装Flask非常简单,可以通过Python的包管理工具pip来安装:

pip install Flask

创建一个简单的Flask应用

        以下是一个简单的Flask应用示例:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(debug=True)

        这个示例展示了如何创建一个最简单的Flask应用,并定义了一个路由 ‘/’,当访问根路径时,将返回"Hello, World!"。

路由与视图函数

        在Flask中,路由决定了URL与视图函数的对应关系。视图函数是处理请求并返回响应的函数。通过 ‘@app.route’ 装饰器,我们可以将特定的URL与视图函数绑定,例如:

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

        在这个例子中,访问 ‘/hello/<name>’ 时,视图函数 ‘hello’ 会接收URL中的 ‘name’ 参数,并返回一个包含该参数的字符串。

模板渲染

        Flask使用Jinja2作为其模板引擎,模板引擎允许我们在HTML中嵌入动态内容。下面是一个简单的示例,展示如何使用模板:

        创建一个模板文件 'templates/hello.html':

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

        修改视图函数以渲染该模板:

from flask import render_template@app.route('/hello/<name>')
def hello(name):return render_template('hello.html', name=name)

        通过这种方式,我们可以将动态内容传递给模板,并生成相应的HTML页面。

表单处理与请求数据

        Flask提供了方便的方式来处理表单数据和请求数据。以下是一个简单的示例,展示如何处理POST请求中的表单数据:

        创建一个表单模板 'templates/form.html':

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><title>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>

        定义视图函数以处理表单提交:

from flask import request@app.route('/submit', methods=['POST'])
def submit():name = request.form['name']return f'Hello, {name}!'

        通过这种方式,我们可以方便地接收并处理来自客户端的表单数据。

Django基础

        Django是一个功能强大的Web框架,由Adrian Holovaty和Simon Willison于2003年创建,旨在简化Web开发过程。与Flask的轻量级设计不同,Django是一个“重量级”的框架,包含了Web开发所需的所有功能,从数据库操作到用户认证,再到管理后台,几乎一应俱全。

安装Django

        同样,可以通过pip来安装Django,命令如下:

pip install django

创建Django项目

        创建一个新的Django项目非常简单,例如:

django-admin startproject mysite

        进入项目目录并启动开发服务器:

cd mysite
python manage.py runserver

        在浏览器中访问 ‘http://127.0.0.1:8000/’,你将看到Django的欢迎页面,表示项目已经成功创建并运行。

创建Django应用

        Django项目通常由多个应用组成,每个应用负责一个特定的功能模块。创建一个新的应用,例如:

python manage.py startapp myapp

定义模型

        Django的强大之处在于其ORM(对象关系映射)系统,它允许开发者通过Python代码来定义和操作数据库。以下是一个简单的模型示例:

        在`myapp/models.py`中定义一个模型:

from django.db import modelsclass Person(models.Model):name = models.CharField(max_length=100)age = models.IntegerField()def __str__(self):return self.name

迁移数据库

        在定义模型后,需要将模型同步到数据库。首先,生成迁移文件,例如:

python manage.py makemigrations

        然后,应用迁移:

python manage.py migrate

定义视图与URL

        在Django中,视图函数处理请求并返回响应。以下是一个简单的视图函数示例:

        在 ‘myapp/views.py’ 中定义视图函数:

from django.http import HttpResponsedef hello(request):return HttpResponse('Hello, World!')

        然后,在`myapp/urls.py`中定义URL模式:

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

        最后,在项目的主URL配置文件`mysite/urls.py`中包含应用的URL配置:

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('myapp/', include('myapp.urls')),
]

模板渲染

        Django使用其内置的模板引擎来渲染HTML。以下是一个简单的模板示例:

        创建一个模板文件 ‘myapp/templates/myapp/hello.html’:

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

        修改视图函数以渲染模板:

from django.shortcuts import renderdef hello(request):return render(request, 'myapp/hello.html', {'name': 'World'})

        通过这种方式,我们可以将动态内容传递给模板,并生成相应的HTML页面。

表单处理

        Django提供了强大的表单处理功能,包括表单验证和CSRF保护。以下是一个简单的示例,展示如何处理表单数据:

        在 ‘myapp/forms.py’ 中定义一个表单类:

from django import formsclass NameForm(forms.Form):name = forms.CharField(label='Your name', max_length=100)

        在 ’myapp/views.py‘ 中定义视图函数以处理表单提交:

from django.shortcuts import render
from .forms import NameFormdef get_name(request):if request.method == 'POST':form = NameForm(request.POST)if form.is_valid():name = form.cleaned_data['name']return HttpResponse(f'Hello, {name}!')else:form = NameForm()return render(request, 'myapp/name.html', {'form': form})

        创建一个模板文件 ‘myapp/templates/myapp/name.html’:

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><title>Form</title>
</head>
<body><form action="" method="post">{% csrf_token %}{{ form.as_p }}<input type="submit" value="Submit"></form>
</body>
</html>

        通过这种方式,我们可以方便地接收并处理来自客户端的表单数据。

前后端交互

        在现代Web开发中,前后端交互是实现动态功能和提升用户体验的关键。前端主要负责呈现用户界面,而后端负责处理数据和业务逻辑。通过API,前后端可以进行数据交换和交互。

RESTful API

        RESTful API是一种常见的前后端交互方式,基于HTTP协议,使用标准的HTTP方法(如GET、POST、PUT、DELETE)进行操作。以下是一个简单的RESTful API示例,使用Flask实现:

from flask import Flask, jsonify, requestapp = Flask(__name__)
items = []@app.route('/items', methods=['GET'])
def get_items():return jsonify(items)@app.route('/items', methods=['POST'])
def add_item():item = request.jsonitems.append(item)return jsonify(item), 201@app.route('/items/<int:item_id>', methods=['PUT'])
def update_item(item_id):item = request.jsonitems[item_id] = itemreturn jsonify(item)@app.route('/items/<int:item_id>', methods=['DELETE'])
def delete_item(item_id):item = items.pop(item_id)return jsonify(item)if __name__ == '__main__':app.run(debug=True)

AJAX与前端框架

        为了实现动态交互,前端通常使用AJAX(Asynchronous JavaScript and XML)技术,结合前端框架如React、Vue.js或Angular,向后端API发送请求并更新页面内容。

        以下是一个使用JavaScript和AJAX实现简单前后端交互的示例:

        HTML文件:

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><title>AJAX Example</title><script>function loadItems() {fetch('/items').then(response => response.json()).then(data => {const list = document.getElementById('item-list');list.innerHTML = '';data.forEach(item => {const li = document.createElement('li');li.textContent = item.name;list.appendChild(li);});});}function addItem() {const itemName = document.getElementById('item-name').value;fetch('/items', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({name: itemName})}).then(response => response.json()).then(item => {const list = document.getElementById('item-list');const li = document.createElement('li');li.textContent = item.name;list.appendChild(li);});}document.addEventListener('DOMContentLoaded', loadItems);</script>
</head>
<body><h1>Items</h1><ul id="item-list"></ul><input type="text" id="item-name" placeholder="Item name"><button onclick="addItem()">Add Item</button>
</body>
</html>

        这个示例展示了如何使用AJAX与后端API进行交互,动态加载和添加数据。

使用前端框架

        使用现代前端框架可以进一步简化前后端交互和提升开发效率。以下是一个使用Vue.js实现前后端交互的示例:

        HTML文件:

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue.js Example</title><script src="https://cdn.jsdelivr.net/npm/vue@2"></script><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>document.addEventListener('DOMContentLoaded', function () {new Vue({el: '#app',data: {items: [],newItem: ''},mounted() {this.loadItems();},methods: {loadItems() {axios.get('/items').then(response => {this.items = response.data;});},addItem() {axios.post('/items', {name: this.newItem}).then(response => {this.items.push(response.data);this.newItem = '';});}}});});</script>
</head>
<body><div id="app"><h1>Items</h1><ul><li v-for="item in items" :key="item.id">{{ item.name }}</li></ul><input type="text" v-model="newItem" placeholder="Item name"><button @click="addItem">Add Item</button></div>
</body>
</html>

        通过这种方式,我们可以使用Vue.js的简洁语法和强大的双向数据绑定特性,更加高效地实现前后端交互。

总结

        通过学习Flask和Django两个流行的Python Web框架,以及理解前后端交互的基本概念,我们可以掌握Web开发的核心技能。Flask的轻量级和灵活性使其适合快速开发和小型项目,而Django的全面功能和强大生态系统则非常适合构建复杂的大型应用。前后端交互是实现动态和高效Web应用的关键,通过RESTful API和现代前端框架,我们可以构建出具有优秀用户体验的Web应用。希望本文能够帮助你在Web开发的道路上迈出坚实的一步。

下一篇:白骑士的Python教学实战项目篇 4.1 数据分析与可视化​​​​​​​

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

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

相关文章

Python番外篇之责任转移:有关于虚拟机编程语言的往事

编程之痛 如果&#xff0c;你像笔者一样&#xff0c;有过学习或者使用汇编语言与C、C等语言的经历&#xff0c;一定对下面所说的痛苦感同身受。 汇编语言 将以二进制表示的一条条CPU的机器指令&#xff0c;以人类可读的方式进行表示。虽然&#xff0c;人类可读了&#xff0c…

使用deep修改前端框架中的样式

目录 1.deep的作用 2.使用方式 3.特别说明 scoped 的实现原理&#xff1a; !important 1.deep的作用 /deep/、::v-deep 和 :deep 都是用于穿透组件作用域的选择器。它们的主要目的是允许开发者在父组件中直接选择并样式化子组件内部的元素&#xff0c;即使这些元素被封装在…

JVM原理(九):JVM虚拟机工具之可视化故障处理工具

1. JHSDB:基于服务性代理的调试工具 JHSDB是一款基于服务性代理实现的进程外调试工具。 服务性代理是HotSpot虚拟机中一组用于映射Java虚拟机运行信息的、主要基于Java语言实现的API集合。 2. JConsole:Java监视与管理控制台 JConsole是一款基于JMX的可视化监视、管理工具。…

千益畅行,旅游卡,如何赚钱?

​ 赚钱这件事情&#xff0c;只有自己努力执行才会有结果。生活中没有幸运二字&#xff0c;每个光鲜亮丽的背后&#xff0c;都是不为人知的付出&#xff01; #旅游卡服务#

springboot拦截器,ThreadLocal(每个线程的公共区域)

拦截器 配置信息&#xff08;拦截所有请求&#xff09; 其实这种可以作为springAOP作日志记录

SpringCloud_Eureka注册中心

概述 Eureka是SpringCloud的注册中心。 是一款基于REST的服务治理框架&#xff0c;用于实现微服务架构中的服务发现和负载均衡。 在Eureka体系中&#xff0c;有两种角色: 服务提供者和服务消费者。 服务提供者将自己注册到Eureka服务器&#xff0c;服务消费者从Eureka服务器中…

软件著作权申请:保障开发者权益,促进软件创新

一、引言 在数字化时代&#xff0c;软件作为信息技术的核心&#xff0c;已成为推动社会进步和经济发展的重要力量。然而&#xff0c;随着软件产业的蓬勃发展&#xff0c;软件侵权和抄袭现象也日益严重。为了保护软件开发者的合法权益&#xff0c;促进软件产业的健康发展&#…

摄影后期色彩管理流程(Lightroom篇)

在摄影后期处理中&#xff0c;色彩管理是确保图像从捕捉到输出的一致性和准确性的关键。Lightroom 和 Photoshop 其实已经将这套色彩管理流程作为默认选项&#xff0c;如果实质操作时仍存在色彩偏差的问题&#xff0c;可参考以下内容。 ProPhoto RGB > Adobe RGB > sRGB …

linux 控制台非常好用的 PS1 设置

直接上代码 IP$(/sbin/ifconfig eth0 | awk /inet / {print $2}) export PS1"\[\e[35m\]^o^\[\e[0m\]$ \[\e[31m\]\t\[\e[0m\] [\[\e[36m\]\w\[\e[0m\]] \[\e[32m\]\u\[\e[0m\]\[\e[33m\]\[\e[0m\]\[\e[34m\]\h(\[\e[31m\]$IP\[\e[m\])\[\e[0m\]\n\[\e[35m\].O.\[\e[0m\]…

Golang内存分配

Go内存分配语雀笔记整理 Golang内存模型设计理念思考核心代码阅读mspanmcachemcentral中心缓存mheap分配过程 Golang内存模型设计理念思考 golang内存分配基于TCmalloc模型&#xff0c;它核心在于&#xff1a;空间换时间&#xff0c;一次缓存&#xff0c;多次复用&#xff1b;…

HarmonyOS开发探索:父子组件手势绑定问题处理

场景一&#xff1a;父子组件同时绑定手势的冲突处理 效果图 方案 在默认情况下&#xff0c;手势事件为非冒泡事件&#xff0c;当父子组件绑定相同的手势时&#xff0c;父子组件绑定的手势事件会发生竞争&#xff0c;最多只有一个组件的手势事件能够获得响应&#xff0c;默认子…

二、基础—常用数据结构:列表、元祖、集合、字典、函数等(爬虫及数据可视化)

二、基础—常用数据结构&#xff1a;列表、元祖、集合、字典、函数等&#xff08;爬虫及数据可视化&#xff09; 1&#xff0c;字符串2&#xff0c;最常用的是列表&#xff08;重点掌握&#xff09;3&#xff0c;元组4&#xff0c;字典&#xff08;重要&#xff09;5&#xff0…

【CSS in Depth 2 精译】2.3 告别像素思维

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力 2.1.1 响应式设计的兴起 2.2 em 与 rem 2.2.1 使用 em 定义字号2.2.2 使用 rem 设置字号 2.3 告别像素思维 ✔️2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.3 告别…

3D交互可视化编辑器求推荐,最好是针对企业级使用的?

企业级使用的3D交互可视化编辑器&#xff0c;支持编辑和调整2D、3D渲染及交互设置&#xff0c;以下几款可以关注了解一下&#xff1a; 1、Unity&#xff1a;一个广泛使用的跨平台游戏引擎&#xff0c;由Unity Technologies开发。支持开发者创建2D和3D游戏、交互式应用以及虚拟…

pdf压缩,pdf压缩在线网页版,在线压缩pdf网站

在数字化时代&#xff0c;pdf文件已经成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;pdf文件往往体积庞大&#xff0c;传输效率低下&#xff0c;还占用大量存储空间。如何在不影响文件质量的前提下&#xff0c;减小pdf文件的大小呢&#xff1f;今天&#xff0c…

74HC595芯片验证

目录 0x00 74595芯片简介0x01 实现原理 0x00 74595芯片简介 74595芯片有很多种封装&#xff0c;不管是贴片的还是直插式的&#xff0c;它们的引脚定义都如下图所示&#xff1a; 其中 &#xff1a; Q0-Q7为并行数据输出口&#xff0c;可以输出高低电平。OE 为使能引脚&#…

MySQL之高可用性和应用层优化(一)

高可用性 故障转移和故障恢复 在应用中处理故障转移 有时候让应用来处理故障转移会更加简单或者更加灵活。例如&#xff0c;如果应用遇到一个错误&#xff0c;这个错误外部观察者正常情况下是无法察觉的&#xff0c;例如关于数据库损坏的错误日志信息&#xff0c;那么应用可…

Hugging Face发布重量级版本:Transformer 4.42

Hugging Face 宣布发布Transformer 4.42&#xff0c;该版本为流行的机器学习库带来了许多新功能和增强功能。此版本引入了几个高级模型&#xff0c;支持新工具和检索增强生成 &#xff08;RAG&#xff09;&#xff0c;提供 GGUF 微调&#xff0c;并整合了量化的 KV 缓存&#x…

基于协同过滤的航空票务推荐系统的设计与实现(飞机票推荐系统)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Android Studio 解决AAPT: error: file failed to compile

1.找到项目下的build.gradle 2.在android语块中添加下面代码 aaptOptions.cruncherEnabled false aaptOptions.useNewCruncher false 12