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

python web 开发 - 常用Web框架

python web 开发 -

文章目录

  • python web 开发 -
    • 1、关于Web开发
    • 2、常用Web框架
    • 3、开发案例
      • 3.1. 使用Flask框架创建一个简单的Web应用程序
      • 3.2. 使用tornado框架创建一个简单的Web应用程序
      • 3.3. 使用Django框架创建一个简单的待办事项应用程序
    • 4、总结

1、关于Web开发

Web当然是网络的一部分。

在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:

HTML是一种用来定义网页的文本,会HTML,就可以编写网页;

HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。

看来,HTTP协议是Web开发中,十分重要的协议了。关于HTTP协议的具体知识,推荐一本书《图解HTTP协议》。

因此,在Web应用中,经常在做接受HTTP请求、解析HTTP请求、发送HTTP响应这些苦力活。所以,如果需要自己动手实现,就得接触到TCP连接、HTTP原始请求和响应格式,估计还得阅读不少相关规范。

2、常用Web框架

可是大部分Web应用的开发者并不想把时间耗费在这些苦力活上,因此,WSGI应运而生了。其全称是Web Server Gateway Interface。

WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。

Python也内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。

了解了WSGI框架,我们发现:其实一个Web App,就是写一个WSGI的处理函数,针对每个HTTP请求进行响应。

但是当HTTP请求、URL多起来的时候,问题又出现了:如何处理URL和处理函数之间的映射关系?

WSGI提供的接口虽然比HTTP接口高级了不少,但和Web App的处理逻辑比,还是比较低级,我们需要在WSGI接口之上能进一步抽象,让我们专注于用一个函数处理一个URL,至于URL到函数的映射,就交给Web框架来做。

因此,Python内置的WSGI服务器当然不足以满足许多人的需要,好在我们还有其他的框架可以选用。

目前运行在WSGI协议之上的Web框架非常多。从个人经验角度而言:轻量级选 Flask 、重量级选Django,当然还有其他的,不过我没有去深入了解,各位可以自行搜索。

因为每个Web框架都不是专注于实现服务器方面的,所以这些WSGI服务器一般也就是开发调试时使用。在生产环境部署的时候,不会简单的使用Web框架自带的服务器。

实际环境使用的WSGI服务器:

Gunicorn: 最流行的大概就是这个了吧。

uwsgi : 因为使用C语言开发,会和底层接触的更好。

Python Web开发可以涵盖多个方面,包括服务器端开发、数据库管理、前端设计和API开发等。在服务器端开发中,常用的Python Web框架有Django、Flask和Bottle、tornado等。这些框架提供了一套工具和结构,使得开发者能够更高效地构建Web应用程序。

在PythonWeb开发中,数据库管理也是一个重要的方面。Python提供了多种数据库连接库,如SQLAlchemy和psycopg2,可以轻松地与主流数据库(如MySQL、PostgreSQL和SQLite)进行交互。

另外,前端设计也是PythonWeb开发中的一个关键部分。Python提供了一些优秀的模板引擎,如Jinja2和Django模板,用于生成动态的HTML页面。

最后,API开发是现代Web应用程序中常见的需求之一。Python提供了一些库,如Flask-RESTful和Django REST framework,用于构建RESTful API。

总结来说,PythonWeb开发是使用Python语言构建Web应用程序的过程。通过选择合适的框架、数据库管理工具、前端设计和API开发库,开发者可以高效地构建出功能强大的Web应用程序。

Flask是一个免费的、开源的Python微型网络框架,旨在帮助开发者构建安全、可扩展和可维护的网络应用。Flask以Werkzeug为基础,使用Jinja2作为模板引擎。

与Django不同,Flask默认不包括ORM、表单验证或任何其他由第三方库提供的功能。Flask在构建时考虑到了扩展,也就是为Flask应用添加功能的Python包。

3、开发案例

3.1. 使用Flask框架创建一个简单的Web应用程序

首先,确保安装了Flask:

pip install Flask

然后,创建一个名为app.py的文件,并写入以下代码:

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

运行这个Python脚本:

python3 app.py

现在,打开你的网页浏览器,访问 http://127.0.0.1:5000/,你将看到显示“Hello, World!”的页面。这个简单的web应用使用了Flask框架,并定义了一个路由处理根URL的请求。

3.2. 使用tornado框架创建一个简单的Web应用程序

首先,确保安装了 tornado:

pip install tornado

然后,创建一个名为app.py的文件,并写入以下代码:


import tornado.ioloop
import tornado.webclass MainHandle(tornado.web.RequestHandler):def get(self):self.write("hello,world")application = tornado.web.Application([(r"/index", MainHandle),
])if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()

运行这个Python脚本:

python3 app.py

现在,打开你的网页浏览器,访问 http://127.0.0.1:8888/index,你将看到显示“Hello, World!”的页面。

3.3. 使用Django框架创建一个简单的待办事项应用程序

首先,在命令行中执行以下命令创建Django项目:

django-admin startproject todoapp

然后,创建一个待办事项应用程序:

cd todoapp
python manage.py startapp tasks

在 tasks 应用程序中,创建一个模型来表示待办事项:

from django.db import modelsclass Task(models.Model):title = models.CharField(max_length=100)completed = models.BooleanField(default=False)def __str__(self):return self.title```bash在 tasks 应用程序的视图文件中,编写视图函数来处理请求:```bash
from django.shortcuts import render
from .models import Taskdef task_list(request):tasks = Task.objects.all()return render(request, 'tasks/task_list.html', {'tasks': tasks})```bash在 tasks 应用程序的URL配置文件中,定义URL路由规则:```bash
from django.urls import path
from . import viewsurlpatterns = [path('', views.task_list, name='task_list'),
]

最后,在 tasks 应用程序中创建一个HTML模板来渲染待办事项列表:

html
<!-- tasks/task_list.html -->
<!DOCTYPE html>
<html>
<head><title>Todo List</title>
</head>
<body><h1>Todo List</h1><ul>{% for task in tasks %}<li>{{ task.title }}</li>{% endfor %}</ul>
</body>
</html>

4、总结

PythonWeb开发框架:Python有多个流行的Web开发框架,包括Django、Flask、Pyramid等。这些框架提供了一系列工具和功能,用于处理路由、模板渲染、数据库集成等。

前端开发:PythonWeb开发通常需要与HTML、CSS和JavaScript等前端技术进行交互。使用模板引擎,如Jinja2,可以将动态数据插入到HTML模板中。

数据库集成:Python提供了多种数据库集成方式,包括使用SQLAlchemy进行关系型数据库操作,或使用MongoDB等NoSQL数据库。这些工具使得与数据库进行交互变得简单。

身份验证和授权:Web应用程序通常需要用户身份验证和授权功能。Python提供了各种库和工具,如Flask-Login和Django-Auth,用于处理用户认证和授权。

RESTful API开发:PythonWeb开发也可以用于构建RESTful API。使用框架如Django Rest Framework和Flask-RESTful,可以轻松创建和管理API端点。

部署和扩展:PythonWeb应用程序可以部署到各种服务器环境中,如Apache、Nginx、Heroku等。还可以使用工具如Gunicorn、uWSGI等来扩展应用程序的性能和可靠性。

总而言之,PythonWeb开发是一种强大而灵活的方式来构建Web应用程序。它提供了丰富的工具和框架,使得开发过程更加简单和高效。无论是构建简单的博客应用程序还是复杂的企业级应用程序,PythonWeb开发都是一个理想的选择。

相关文章:

python web 开发 - 常用Web框架

python web 开发 - 文章目录 python web 开发 -1、关于Web开发2、常用Web框架3、开发案例3.1. 使用Flask框架创建一个简单的Web应用程序3.2. 使用tornado框架创建一个简单的Web应用程序3.3. 使用Django框架创建一个简单的待办事项应用程序 4、总结 1、关于Web开发 Web当然是网…...

设计模式——适配器模式06

适配器模式 通常在已有程序中使用&#xff0c;至少有两个类的接口不兼容时&#xff0c;让相互不兼容的类能很好地合作。例如之前系统 用的Target 接口调用&#xff0c;现在要新增第三方接口Adaptee。如何进行适配&#xff0c;面向客户端提供 调用Target接口方式达到使用Adaptee…...

【鸿蒙开发】组件状态管理@Prop,@Link,@Provide,@Consume,@Observed,@ObjectLink

1. Prop 父子单向同步 概述 Prop装饰的变量和父组件建立单向的同步关系&#xff1a; Prop变量允许在本地修改&#xff0c;但修改后的变化不会同步回父组件。当父组件中的数据源更改时&#xff0c;与之相关的Prop装饰的变量都会自动更新。如果子组件已经在本地修改了Prop装饰…...

Web 前端性能优化之八:前端性能检测实践

五、前端性能检测实践 1、常用的检测工具 Lighthouse、Chrome开发者工具中与性能检测相关的一些工具面板、页面加载性能分析工具PageSpeed Insights、专业的性能检测工具WEBPAGETEST等 1、Chrome 任务管理器 通过Chrome任务管理器我们可以查看当前Chrome浏览器中&#xff0…...

安装VMware ESXi虚拟机系统

简介&#xff1a;ESXi是VMware公司开发的一款服务器虚拟化操作系统。它能够在一台物理服务器上运行多个虚拟机&#xff0c;每个虚拟机都可以独立运行操作系统和应用程序&#xff0c;而且对硬件配置要求低&#xff0c;系统运行稳定。 准备工具&#xff1a; 1.8G或者8G以上容…...

Vue3实践之全局请求URL配置和请求参数说明

Vue3实践之全局请求URL配置和请求参数说明 全局请求URL配置 1、首先需要导入router和axios import router from "/router";2、创建app&#xff0c;将router挂载到app上 const app createApp(App) app.use(router).use(elementIcons).mount(#app)3、设置全局请求…...

类和对象—初阶

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 【面试题】 4.2 封装 【面试题】 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式 7.3 结构体内存对齐规则 【面试题】…...

【Linux】shell 脚本基础使用

在终端中输入命令可以完成一些常用的操作&#xff0c;但是我们都是一条一条输入命令&#xff0c;比较麻烦&#xff0c;为了解决这个问题&#xff0c;就会涉及到 shell 脚本&#xff0c;它可以将很多条命令放到一个文件里面&#xff0c;然后直接运行这个文件即可。 shell 脚本类…...

nfs部署--相关记录

以下是在 CentOS 8 中将 10.40.111.41 上的 /nfsdata 目录通过 NFS 共享到 10.40.111.43 和 10.40.111.45 的 /nfsdata 目录的详细步骤&#xff1a; 在 10.40.111.41 上操作&#xff1a; 安装并配置 NFS 服务器&#xff1a; a. 安装 NFS 服务器软件包&#xff1a; sudo dnf in…...

java国产化云HIS基层医院系统源码 SaaS模式

目录 ​ 云HIS开发环境 功能模块介绍&#xff1a; 1、门诊模块 2、住院模块 3、药房、药库模块 ​编辑 4、电子病历模块 5、统计报表模块 6、系统管理模块 系统优势 云his之电子病历子系统功能 云 his 系统是运用云计算、大数据、物联网等新兴信息技术&#xff0c;按…...

docker 部署 Epusdt - 独角数卡 dujiaoka 的 usdt 支付插件

部署 部署说明 部署之前必须注意的几点事项,该教程不一定适合所有用户: 本教程主要是使用 docker 部署,宝塔用户或宿主机直接安装的用户请直接参考官网教程.本教程是独立部署 epusdt,使用独立的mysql和redis,与dujiaoka项目分开. 在研究的过程中发现 epusdt 也需要用到 mys…...

数据结构排序之冒泡、快速、插入、选择、堆、归并等排序及时间,空间复杂度等(超详解,绝对能满足你的需求,并能学到很多有用知识)

在本文章开始之前给大家介绍个网站,可以通过下面动画网址来理解 ,(国外的网站帮助学习数据结构很多知识,可以翻译下来,在搜索框搜索相应的排序算法进行动画演示,非常好用。)​​​https://www.cs.usfca.edu/~galles/visualization/https://www.cs.usfca.edu/~galles/vis…...

如何在windows环境和linux环境运行jar包

功能:实现对字符串小写转大写 java代码如下: package a_od_test;import java.util.Locale; /* 实现小写转大写 打jar包 分别在windows环境和liunx环境运行*/ public class Main28_To_Upper {public static void main(String[] args) {if (args.length 1) {System.out.printl…...

2602B吉时利2602B数字源表

181/2461/8938产品概述&#xff1a; 2600B系列系统源表SMU仪器是业界领先的电流/电压源和测量解决方案&#xff0c;采用吉时利第三代SMU技术制造。2600B系列提供单通道和双通道型号&#xff0c;将精密电源、真电流源、6-1/2位数字多用表、任意波形发生器、脉冲发生器和电子负载…...

Linux——fork复制进程

1)shell: 在计算机科学中&#xff0c;Shell俗称壳&#xff08;用来区别于核&#xff09;&#xff0c;是指“为使用者提供操作界面”的软件&#xff08;command interpreter&#xff0c;命令解析器&#xff09;。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令&…...

李廉洋:4.10黄金原油晚间走势最新分析及策略。

鉴于美联储官员对1月和2月通胀数据反应不足&#xff0c;3月通胀数据过热可能导致其反应过度的风险更大。美联储试图避免根据一两个数据点来制定政策&#xff0c;但今年迄今为止经济活动的韧性意味着&#xff0c;在年中降息的理由取决于通胀是否恢复自去年下半年以来的稳步下降趋…...

【头歌-Python】字符串自学引导

禁止转载&#xff0c;原文&#xff1a;https://blog.csdn.net/qq_45801887/article/details/137517279 参考教程&#xff1a;B站视频讲解——https://space.bilibili.com/3546616042621301 如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 字符串自学引导 …...

44-技术演进(下):软件架构和应用生命周期技术演进之路

应用、系统资源、应用生命周期管理这 3 个维度&#xff0c;构成了我们对云的所有诉求。 我会介绍下应用维度和应用生命周期管理维度的技术演进。 我们就先来看下软件架构的演进之路。 软件架构的演进 软件架构技术演进如下图所示&#xff1a; 单体架构 在单体架构中&#xff…...

【C++】C++中的list

一、介绍 官方给的 list的文档介绍 简单来说就是&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中…...

uniapp:Hbuilder没有检测到设备请插入设备或启动模拟器的问题解决

问题 使用模拟器调试运行项目时&#xff0c;出现以下提示&#xff0c;“没有检测到设备&#xff0c;请插入设备或启动模拟器后点击刷新再试”。排查了一天最终找到原因。 解决 已确认模拟器是已经正常启动&#xff0c;并且Hbuilder设置中的adb路径和端口都配置没有问题&#…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...