Python的简单web框架flask快速实现详解

文章目录

    • 简介
    • web框架的重要组成部分
    • 快速上手flask
      • flask的第一个应用
    • flask中的路由
      • 不同的http方法
      • 静态文件
      • 使用模板
    • 总结
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


简介

python可以做很多事情,虽然它的强项在于进行向量运算和机器学习、深度学习等方面。但是在某些时候,我们仍然需要使用python对外提供web服务。

比如我们现在有一个用python写好的模型算法,这个模型算法需要接收前端的输入,然后进行模拟运算,最终得到最后的输出。这个流程是一个典型的web服务,与其我们使用java或者nodejs来搭建一个web服务器,不如我们就使用python自己的web框架来实现这一目标,减少技术栈的同时,还可以实现代码逻辑的统一,何乐而不为呢?

其实python的web框架也有很多种,比如django、flask等等。

这本系列的文章中,我们会介绍flask这个轻量级的web框架。

web框架的重要组成部分

相信大家都用过不少web框架吧,从java的spring MVC,到nodejs的express和koa,有功能复杂的,也有功能简单的。

但是不管他们的功能如何,其最重要最基本的一个功能就是能够提供web服务,也就是说可以接收HTTP或者HTTPS的请求,然后返回对应的数据。这个功能通常包含的是核心的路由跳转功能。

有了这个核心的功能,web框架基本上就可以正常运行了。配合上现在流行的前后端分离技术,一切水到渠成。

如果不想用前后端分离,那么web框架还需要涉及到页面的呈现技术。一般来说都会使用模板引擎作为前端页面的呈现形式。

然后配合上对数据库、缓存、消息队列、静态资源、日志、调试等附加的功能,一个完整的web框架就完成了。

flask虽然是一个轻量级web框架,但是该有的功能它全都有。

它的核心是提供了对web路由的支持,同时支持Jinja的模板语言。

快速上手flask

flask是一个非常简单优雅的web框架,flask需要Python 3.7及以上版本的支持。

为了区分python的不同开发环境,我们在使用flask的时候,可以使用python自带的venv来创建不同的虚拟环境。venv跟conda的env很类似,都是用来创建虚拟环境,从而实现不同的环境进行分离的作用。

使用venv非常简单,如果你用的开发工具是pycharm,那么在创建python的flask项目的时候,会自动选择对应的虚拟环境创建工具,这里我们选择使用venv即可自动创建。

当然你也可以使用下面的命令来手动创建venv:

$ mkdir learn-flask
$ cd learn-flask
$ python3 -m venv venv

创建好venv之后,使用下面的命令来激活这个env:

. venv/bin/activate

venv安装完毕之后,我们可以使用下面的命令安装flask:

pip install Flask

安装完毕之后,你可以在python项目site-packages里面找到flask对应的依赖包:

可以看到里面出了flask之外,还有其他的一些第三方依赖包,这些都是可以在后续的flask应用中使用到的。

flask的第一个应用

flask的依赖包都安装好之后,我们就可以写一个最最简单的web应用程序了,我们把这个应用程序命名为first.py:

from flask import Flask
app = Flask(\_\_name\_\_)
@app.route('/')
def first():
    return "<p>这是我的第一个flask程序!</p>"
if \_\_name\_\_ == '\_\_main\_\_':
    app.run()

和普通的python程序不同的是,这里我们先实例化了一个Flask对象,然后用类似注解的方式定义了一个route在fist这个方法上。

程序写好了,如果你在pycharm IDE中,那么可以右键运行,可以得到下面的内容:

FLASK\_APP = first.py
FLASK\_ENV = development
FLASK\_DEBUG = 0
In folder /Users/data/git/ddean2009/learn-flask
/Users/data/git/ddean2009/learn-flask/venv/bin/python -m flask run 
 \* Serving Flask app 'first.py'
 \* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 \* Running on http://127.0.0.1:5000

可以看到IDE为我们设置了几个环境变量,分别是FLASK_APP:表示要运行的app名称。FLASK_ENV:表示现在的运行环境是开发环境还是线上环境。FLASK_DEBUG表示是否是debug模式。

最终我们可以访问默认的http://127.0.0.1:5000,可以得到下面的内容:

说明整个程序运行成功了。

如果你想通过命令行来执行flask的应用,那么可以用下面的命令:

flask --app first run

注意,这里我们添加了–app这个参数来指定要运行的app名称。如果不指定的话,flask会去寻找名叫app.py或者wsgi.py的文件。如果你有这两个文件,那么就可以直接使用flask run来运行了。

这里的flask相当于python -m flask。

默认情况下flask的应用程序只能通过本地的浏览器来访问,如果你想通过远程来访问的话,可以指定访问的host,如下所示:

flask run --host=0.0.0.0

到此,我们的一个基本的最简单的flask web应用就完成了。

什么?你还要了解更多?别急,下面我们再详细介绍一些web应用程序所必须了解的知识。

flask中的路由

路由也叫Routing,它是web应用程序中的灵魂,通过路由来定义各种URL和访问路径。

在flask中,可以使用@app.route来对路由进行定义。@app.route类似于注解,可以放置在python的方法之上。

route中可以定义路由的名称,路由的名称可以跟方法的名称不一样:

@app.route('/test')
def test123():
    return '我是一个测试'

路由的名称还可以是动态的,可以取一个跟注解方法中参数的名称一样的参数名作为路由的参数用一个尖括号括起来,如下所示:

from markupsafe import escape
@app.route('/student/<name>')
def what\_is\_your\_name(name):
    return f'你的名字是: {escape(name)}'

这里的方法体中我们调用了python的f函数来对字符串进行格式化,在内部为了防止web输入端的恶意注入,这里引用了markupsafe的escape方法,可以对输入的字符串进行转义,从而避免了恶意的攻击。

除了在路径中指定参数之外,我们还可以自行指定参数的类型,在flask中路径参数可以设置为下面的几种类型:

类型说明
string默认类型,可以接收除了/之外的任何字符串
int可以接收正整数
float可以接收正的浮点数
path和string类似,但是可以接收/
uuid接收uuid字符串

比如我们想传入一个路径,那么可以将其定义为path类型:

@app.route('/path/<path:subpath>')
def what\_is\_your\_path(subpath):
    return f'你的路径是: {escape(subpath)}'

上面我们提到了string和path的区别,就在于path可以接收/,而string不能。

那么在flask中/有什么特殊的含义吗?

我们知道/是用做路径分割的,在flask中包含/和不包含/还是有一定的区别的。以下面的代码为例:

@app.route('/withslash/')
def with\_slash():
    return '这是带slash的'
@app.route('/withoutslash')
def with\_out\_slash():
    return '这是不带slash的'

withslash的定义中带了slash后缀,所以不管你访问/withslash还是/withslash/, 都会被跳转到withslash/

但是因为withoutslash没有带slash,所以你只能访问/withoutslash,但是不能访问/withoutslash/,否则你可能得到一个404 “Not Found”错误。

不同的http方法

默认情况下@app.route对外提供的是GET方法,如果你想对外提供一些不同的http方法,那么可以在@app.route中使用methods:

@app.route('/diffMethod', methods=\['GET', 'POST'\])
def diff\_method():
    if request.method == 'POST':
        return '这是post'
    else:
        return '这是get'

当然,你还可以使用@app.get或者@app.post把不同方法的请求分开:

@app.get('/getMethod')
def get\_method():
     return '这是get'
@app.post('/postMethod')
def post\_method():
     return '这是post'

静态文件

web应用中少不了的是一些静态资源,比如图片,js或者css等。这些静态资源可以看做是一种特殊的路由规则。在flask中,可以通过创建特殊的static目录来达到这一目的。如下所示:

url\_for('static', filename='style.css')

这里面我们用到了url_for这个方法,这个方法实际上是用来构建对应方法的url的,可以举下面的几个例子来对url_for有个深入的了解。

urL_for的第一个参数是方法名,后面接的是url中定义的变量,如果url中并没有这个变量,那么将会以参数的形式附加在url的后面:

@app.route('/')
def index():
    return 'index'
@app.route('/login')
def login():
    return 'login'
@app.route('/user/<username>')
def profile(username):
    return f'{username}\\'s profile'
with app.test\_request\_context():
    print(url\_for('index'))
    print(url\_for('login'))
    print(url\_for('login', next='/'))
    print(url\_for('profile', username='John Doe'))

输出的内容如下:

/
/login
/login?next=/
/user/John%20Doe

使用模板

如果我们只是用return来返回简单的字符串或者变量,那么肯定满足不了现代应用的需求了。

为了实现复杂的页面功能,我们通常会使用模板。flask使用的是Jinja2这个模板语言。

怎么使用模板呢?我们在返回的时候,可以使用render_template方法:

from flask import render\_template
@app.route('/template/<name>')
def use\_template(name=None):
    return render\_template('hello.html', name=name)

其中hello.html是模板文件的名字,name是模板文件中定义的变量。

总结

以上就是flask的基本使用了,掌握到这些内容之后,相信大家已经可以使用flask做出一个简单的web应用了。


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Midjourney绘画提示词Prompt参考教程

Midjourney绘画提示词Prompt参考教程&#xff1a;无需魔法使用。 一、AI工具 SparkAi&#xff1a; SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常…

oepnpnp - 自己出图做开口扳手

文章目录 oepnpnp - 自己出图做开口扳手概述笔记做好的一套扳手实拍美图工程图END oepnpnp - 自己出图做开口扳手 概述 我的openpnp设备顶部相机安装支架, 由于结构限制, 螺柱的安装位置和机械挂壁的距离太近了. 导致拧紧(手工或者工具)很困难. 也不能重新做相机支架, 因为将…

【Linux】命令lsof使用详解

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f…

物联网AI MicroPython学习之语法 ADC数模模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; ADC 介绍 模块功能: ADC数模转换模块 ADC功能在ESP32引脚32-39上可用&#xff0c;使用默认配置时&#xff0c;ADC引脚上的输入电压必须介于0.0v和1.0v之间&#xff08;任何高于1.0v的值都将读为4095&#x…

「ResNet-18」70 个犬种的图片分类

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

Oracle实时同步技术

Oracle数据库的价值 Oracle数据库是一种高度可靠、安全和强大的关系型数据库管理系统&#xff0c;它具有以下几个方面的价值&#xff1a; 可靠性和稳定性&#xff1a;Oracle数据库以其高度可靠性、稳定性和数据完整性而闻名于世。 安全性&#xff1a;Oracle数据库提供了一系列…

解决uncompyle6反编译报错KeyError

报错内容&#xff1a;KeyError&#xff1a;3.11.0 &#xff08;这个是我自己的Python版本号&#xff09; 主要原因就是你的Python版本没在它库文件支持的版本里&#xff0c;我们需要进行手动添加即可。 首先找到文件&#xff1a;magics.py 我的是在这个路径下&#xff1a;D:\…

P9232 [蓝桥杯 2023 省 A] 更小的数(区间DP)

求大数字某连续部分反转后&#xff0c;比原数字小的个数 思路&#xff1a;自前向后遍历 ai是位于数字第i位的数字 aj是位于数字第j位的数字&#xff08;i<j&#xff09; ai>aj f[ai][aj]1; ai<aj f[ai][aj]0; aiaj f[ai][aj]f…

宏电股份荣膺国家知识产权优势企业称号,科技创新与研发实力获国家级认可

近日&#xff0c;国家知识产权局公布了2023年度国家知识产权优势企业的评审结果&#xff0c;宏电股份凭借强大的技术实力和创新能力&#xff0c;荣获“国家知识产权优势企业”荣誉称号。这一荣誉是对宏电股份在技术创新和知识产权创造、运用、保护及管理方面的高度认可&#xf…

通明智云宣布完成数千万元A+轮融资, 引领云原生与信创两翼齐飞的应用交付解决方案

近日&#xff0c;通明智云&#xff08;北京&#xff09;科技有限公司&#xff08;简称&#xff1a;通明智云&#xff09;宣布完成数千万元A轮融资&#xff0c;由全聚合与信公投资联合投资&#xff0c;明论资本担任本轮融资独家财务顾问。本轮融资资金将主要用于NJet云原生应用引…

华为云IoT与OpenHarmony深度协同,加速设备上鸿即上云【云驻共创】

本次专题论坛探讨了华为云IoT与Open Harmony的深度协同、边缘屏蔽硬件差异、实现智慧隧道全方位智能化管理&#xff0c;以及华为云与Open Harmony生态的合作。同时也介绍了华为云物联网卡平台、HTTP2协议以及华为物联网在交通领域的应用。 一&#xff0e;华为云IoT与Open Harm…

Jmeter 自动化性能测试常见问题汇总

一、request 请求超时设置 timeout 超时时间是可以手动设置的&#xff0c;新建一个 http 请求&#xff0c;在“高级”设置中找到“超时”设置&#xff0c;设置连接、响应时间为2000ms。 1. 请求连接超时&#xff0c;连不上服务器。 现象&#xff1a; Jmeter表现形式为&…

18章总结—Swing程序设计

例题1 package admi; import java.awt.*; import javax.swing.*; public class JFreamTest { public static void main(String[] args) { JFrame jfnew JFrame(); jf.setTitle("创建一个JFrame窗体"); Container containerjf.getC…

ubuntu安装nvm

需求 在 virtualbox 虚拟机上运行的 ubuntu &#xff08;22.04.3&#xff09;里安装 nvm &#xff08;Node Version Manager&#xff09; 简述 官网文档 &#xff08;github地址&#xff09;上有提到两种安装方式&#xff0c;一种是直接 curl | wget 命令安装&#xff0c;一…

Royal TSX v6.0.1(远程管理软件)

MacOS远程管理软件哪款好&#xff1f;Royal TSX mac是一款功能非常强大适用于 Mac 的远程连接管理工具。兼容多种连接类型&#xff0c;比如&#xff1a;RDP、VNC、基于SSH连接的终端&#xff0c;SFTP/FTP/SCP或基于Web的连接管理&#xff0c;Royal TSX 都可以满足您的要求&…

LLM之Prompt(二):清华提出Prompt 对齐优化技术BPO

论文题目&#xff1a;《Black-Box Prompt Optimization: Aligning Large Language Models without Model Training》 论文链接&#xff1a;https://arxiv.org/abs/2311.04155 github地址&#xff1a;https://github.com/thu-coai/BPO BPO背景介绍 最近&#xff0c;大型语言模…

学习笔记—吴恩达《AI for everyone》

【写在前面】 学习视频来源&#xff1a;B站“GPT中英字幕课程资源”&#xff08;见图片水印&#xff09;。 此文是自学笔记&#xff0c;主要是截图视频课件中的一些知识点&#xff0c;只做自学使用。 一. AI 介绍 二. 机器学习 Machine Learning 三. 什么是数据 What is AI 四…

玩转大模型行业应用,且看盘古大模型全栈工程能力展身手【云驻共创】

AI技术在金融和工业领域的应用不断扩展&#xff0c;促进了金融行业的数字化转型和产业升级。AI提供了专属财富管家和工业范式的解决方案&#xff0c;在金融领域的应用包括风险评估和投资建议&#xff0c;而在工业领域的应用则涵盖了数据分析和机器人操作。与此同时&#xff0c;…

神经网络中BN层简介及位置分析

1. 简介 Batch Normalization是深度学习中常用的技巧&#xff0c;Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (Ioffe and Szegedy, 2015) 第一次介绍了这个方法。 这个方法的命名&#xff0c;明明是Standardization, 非…

springcloud医院挂号预约系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;nodejs&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示医生列表&#xff0c;医院简介&#xff0c;点击医生…