找回密码
 会员注册
查看: 24|回复: 0

python的简单web框架flask附例子

[复制链接]

6

主题

0

回帖

19

积分

新手上路

积分
19
发表于 2024-9-9 12:49:27 | 显示全部楼层 |阅读模式
文章目录前言概要使用Flask创建了一个基本的Flask网页应用动态路由发送请求处理请求flask的小demo补充知识点注意查看电脑python版本编码错误pipinstallflask-sqlalchemy出错启动项目错误前言今天好奇,去了解了一下python的web框架。感觉flask对于新手真的很友好概要以下是一些常见的PythonWeb框架:Django:Django是一个全功能的Web框架,提供了包括路由、模型-视图-模板(MVT)模式、表单处理、管理后台等在内的一系列功能。它的设计目标是帮助开发者快速构建复杂的Web应用程序,并提供了强大的自动化功能和内置的安全机制。Flask:我们之前讨论过的Flask是一个轻量级的Web框架,它的设计理念是保持简洁和灵活。相比于Django,Flask更适合用于构建小型和中型的Web应用程序,同时也更容易学习和上手。FastAPI:FastAPI是一个新兴的Web框架,它基于Python3.6+的新特性,使用类型注解和异步编程的方式来提供高性能的API。FastAPI非常适合构建高性能的API服务,并提供了自动生成文档、输入参数验证等功能。Tornado:Tornado是一个异步的Web框架,其设计目标是支持高并发和大量连接的场景。Tornado的异步特性使得它非常适合用于构建实时性要求高的应用,例如聊天应用、实时通讯等。使用Flask创建了一个基本的Flask网页应用第一步:安装Flaskpipinstallflask1第二步:使用fromflaskimportFlask#flask应用对象app用于处理网页请求和响应app=Flask(__name__)#不写methods默认的请求方法就是GET@app.route('/',methods=['GET','POST'])defget_hello():return'hello'if__name__=='__main__':app.run(debug=True,port=8085)12345678910111213效果:游览器发送get请求:postman测试postget请求可能第一次接触看不懂,我简单解释一下代码:fromflaskimportFlask:这行代码导入了Flask类,这是Flask框架的核心部分。它允许你创建一个Flask应用。app=Flask(__name__):这行代码创建了一个Flask应用实例。__name__参数是Python中的特殊变量,用来指示当前模块的名称。在这里,__name__将会是__main__,因为这段代码是直接执行的,而不是被导入到其他模块中。@app.route('/'):这是一个装饰器,用来将URL路径’/'与下面定义的get_hello()函数关联起来。意味着当访问根路径时,将会调用get_hello()函数。defget_hello():这是一个定义的函数,用于处理根路径的请求。返回了一个字符串"hello"作为响应内容。if__name__=='__main__'::这是Python中一个常见的惯用法。这行代码的作用是检查当前模块是否是被直接执行的主程序。当Python解释器读取一个Python文件时,它会将其中的全局变量__name__设置为__main__。因此,通过检查__name__是否等于__main__,可以确定当前模块是否是主程序。app.run(debug=True,port=8085):这行代码启动了Flask应用。debug=True参数表示启用调试模式,这在开发过程中很有用。port=8085指定了应用监听的端口号(默认端口5000)动态路由动态路由是Flask中一个非常重要的概念,它允许你在URL中使用变量,以便根据不同的请求动态生成响应。这使得你可以创建更加灵活和动态的路由规则,从而构建更加强大和可扩展的Web应用。案例一:fromflaskimportFlaskapp=Flask(__name__)@app.route('/test/')deffun(user):returnf'Hi{user}'if__name__=='__main__':app.run(port=8085,debug=True)12345678910111213效果:案例二:Flask自带了几种常用的转换器:string:接受任何不包含斜杠的文本,默认转换器,即如果不指定转换器,参数默认为string类型。int:接受正整数。float:接受正浮点数。path:接受包含斜杠的文本,通常用于匹配文件路径。fromflaskimportFlaskapp=Flask(__name__)#使用string转换器@app.route("/user/")defuser_profile(username):returnf'Userprofile:{username}'#使用int转换器@app.route("/post/")defshow_post(post_id):returnf'Showingpost:{post_id}'#使用float转换器@app.route("/price/")defshow_price(price):returnf'Price{price}'#使用path转换器@app.route("/path/ ")defshow_path(path):returnf'Path:{path}'if__name__=='__main__':app.run(port=8085,debug=True)123456789101112131415161718192021222324252627282930313233案例三:自定义转换器是Flask中一个非常强大的功能,它允许你定义自己的URL转换规则,以满足特定的需求。案例三定义了一个名为DateConverter的自定义转换器,用于处理日期参数。自定义转换器类(IntTenConverter):这个类继承自BaseConverter,它定义了两个方法to_python和to_url,分别用于将URL中的值转换为Python对象和将Python对象转换为URL中的值。to_python方法:这个方法是用于将URL中的值转换为Python对象的,to_python方法将接收到的日期字符串转换为datetime对象,使用了datetime.strptime()方法,参数%Y-%m-%d表示接受的日期格式为年-月-日。to_url方法:这个方法是用于将Python对象转换为URL中的值的,to_url方法将datetime对象转换为指定格式的日期字符串,使用了strftime()方法,同样指定了日期格式为%Y-%m-%d。注册自定义转换器:在Flask应用中,使用app.url_map.converters字典将自定义转换器注册到应用中,这样你就可以在路由规则中使用自定义转换器了。在路由中使用自定义转换器:使用了的形式来指定日期参数,并指定了使用定义的自定义转换器。这样,Flask将自动将URL中匹配的部分转换为datetime对象,并传递给相应的视图函数。fromflaskimportFlaskfromwerkzeug.routingimportBaseConverterfromdatetimeimportdatetimeapp=Flask(__name__)#自定义日期转换器,用于接受指定格式的日期字符串并转换为datetime对象classDateConverter(BaseConverter):defto_python(self,value):#将接收到的日期字符串转换为datetime对象returndatetime.strptime(value,'%Y-%m-%d')defto_url(self,value):#将datetime对象转换为指定格式的日期字符串returnvalue.strftime('%Y-%m-%d')#将自定义转换器注册到Flask应用中app.url_map.converters['date']=DateConverter#定义路由规则,其中使用了自定义转换器@app.route('/test/')defevents_by_date(val_date):#在视图函数中使用日期参数returnf'time{val_date}'if__name__=='__main__':app.run(port=8085,debug=True)12345678910111213141516171819202122232425262728293031发送请求处理请求fromflaskimportFlask,jsonify,requestimportrequestsapp=Flask(__name__)@app.route('/talk')defget_data():url='http://121.151.159.11:8011/api/talk'response=requests.get(url)ifresponse.status_code==200:data=response.json().get('data')#返回json数据returnjsonify({'data':data})else:returnjsonify({'error':'Failedtofetchdata'})@app.route('/person')defperson():name=request.args.get('name')age=request.args.get('age')returnf'Hello{name},youare{age}yearsold'if__name__=='__main__':app.run(debug=True,port=8085)12345678910111213141516171819202122232425262728293031效果:flask的小demo目录结构flask_demo/│├──app/│├──__init__.py│├──routes.py│├──models.py│├──forms.py│└──templates/│└──users.html│└──user_form.html│└──static/│└──users.css│└──user_form.css│├──run.py123456789101112131415源码地址:https://github.com/yikousu/flask-demo效果:补充知识点装饰器是Python中一种特殊的语法,它允许在不修改原始函数或类定义的情况下,向它们添加额外的功能或行为。装饰器本质上是一个函数,它接受一个函数或类作为参数,并返回一个新的函数或类。【类似于动态代理】在Python中,使用@符号可以应用一个装饰器。当装饰器被应用到一个函数或方法上时,它会将该函数或方法作为参数传递给装饰器函数,并将其替换为装饰器函数返回的新函数。这使得我们可以在不改变原始函数的情况下,增强或修改其行为。装饰器在Python中被广泛用于各种场景,包括但不限于:添加日志记录功能。进行性能分析。实现权限控制。缓存函数的结果以提高性能。路由映射(如在Flask中的@app.route())。错误处理。通过使用装饰器,可以使代码更加模块化、可维护,并且可以方便地重用功能。注意查看电脑python版本win+r输入cmd编码错误程序运行报错SyntaxError:Non-UTF-8codestartingwith'\xbf'infileC:\code\flask.pyonline1,butnoencodingdeclared;seehttps://python.org/dev/peps/pep-0263/fordetails1这个错误表明Python解释器在尝试解析你的代码时遇到了非UTF-8编码的字符。Python3默认要求源文件使用UTF-8编码,因此当文件中包含非UTF-8编码的字符时,解释器会抛出这样的错误。原因:因为我使用了中文注释,如果不适用中文注释就没事解决方案:首行加:#-*-coding:utf-8-*-pipinstallflask-sqlalchemy出错错误原因:解决办法:更换镜像源pipinstallflask-sqlalchemy-ihttps://pypi.tuna.tsinghua.edu.cn/simple/-i(–index-url)选项告诉pip命令去特定的包索引(也就是一个特定的URL)查找和下载包,而不是使用默认的PyPI包索引(https://pypi.org/simple)。【加-i临时性换源】启动项目错误解决办法:检查Flask应用依赖:确保你的Flask应用不会意外依赖了watchdog库。如果没有必要,可以尝试删除这个依赖❤觉得有用的可以留个关注❤
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 05:51 , Processed in 6.808147 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表