在python语言中Flask框架的学习及简单功能示例
Python  /  管理员 发布于 1年前   400
在Python语言开发网站项目的话多多少少对flask这个轻量级web框架有所了解,
我们这里就不做详细介绍了,本文主要介绍flask的安装,使用 flask编写一个简单的web服务。
安装
我们知道 Python 主流的包管理工具是 pip,首先你必须安装 pip,
这里我们使用的是 Python3,pip 的版本也是 pip3,这里不做介绍了,
怎么点击这里,或者直接使用以下命令:
pip install Flask
快速使用
直接看实例:
from flask import Flask #导入模块
app = Flask(__name__) #启动配置
@app.route("/") #装饰器,配置router
def hello(): #处理方法
return "hello, world!"
接着使用命令:
$ export FLASK_APP=ppt1_2.py
$ flask run
或者我们这样使用:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "hello, world!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
直接使用命令:
$ python3 ppt1_2.py
配置
从配置中获取
from flask import Flask
app = Flask(__name__)
app.config["DEBUG"] = True #配置
@app.route("/")
def hello():
return "hello, world!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
启动服务我们可以看到日志中:
* Serving Flask app 'ppt1_3'
* Debug mode: on
从其他文件中获取
from flask import Flask
app = Flask(__name__)
app.config.from_object("config.base_setting")
@app.route("/")
def hello():
return "hello, world!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
从环境变量中获取
from flask import Flask
app = Flask(__name__)
app.config.from_envvar("opt_config")
@app.route("/")
def hello():
return "hello, world!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
从配置文件中获取
from flask import Flask
app = Flask(__name__)
app.config.from_file("config/base_setting.py")
@app.route("/")
def hello():
return "hello, world!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
路由注册
flask 路由注册主要有以下两种方式:
1.app.router () 和 app.add_url_rule ()
2.蓝图优化
app.route
实例:
from flask import Flask
app = Flask(__name__)
@app.route("/") # 注册路由,绑定处理方法
def hello():
return "hello, world!"
@app.route("/my_info") # 注册路由,绑定处理方法
def my_info():
return {"name": "iceymoss", "age": 18}
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
在 url 中传入参数:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "hello, world!"
@app.route("/my_info/<user_name>")
def my_info(user_name):
return {"name": user_name, "age": 18}
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
访问:
127.0.0.1:3000/my_info/idfjdif
返回:
{“age”:18,”name”:”idfjdif”}
app.add_url_rule
实例:
from flask import Flask
app = Flask(__name__)
def hello():
return "hello, world!"
def my_info(user_name):
return {"name": user_name, "age": 18}
app.add_url_rule(rule="/", view_func=hello)
app.add_url_rule(rule="/my_info/<user_name>", view_func=my_info)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
蓝图优化
实例:
from flask import Flask, Blueprint
app = Flask(__name__)
index_page = Blueprint("index_page", __name__)
@index_page.route("/")
def hello():
return "hello, flask"
app.register_blueprint(index_page, url_perfix="/my_info")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
使用蓝图我们可以进行分层,比如说我们的 service 负责编写处理方法,
router 目录负责配置路由注册绑定方法。
service:
from flask import Flask, Blueprint
index_page = Blueprint("index_page", __name__)
@index_page.route("/hello")
def hello():
return "hello, flask"
@index_page.route("/user_info")
def get_user():
return {"name":"iceymoss", "age": 18}
router:
from flask import Flask
from service import index_page
app = Flask(__name__)
app.register_blueprint(index_page, url_prefix="/api")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)
这样就完成了分层,结构更有层次。
方法
GET 方法
实例:
@index_page.route("/add")
def get_good():
var_a = request.args.get("a", 0) #request.args.get()获取get方法的参数
var_b = request.args.get("b", 0)
return "计算结果:{0}".format(int(var_b)+int(var_a))
访问:127.0.0.1:3000/api/add?a=10&b=1...
返回:计算结果:110
POST 方法
实例:
@index_page.route("/login", methods=["POST"])
def loging():
user_name = request.form["user_name"]
password = request.form["password"]
if user_name == "iceymoss" and password == "admin123":
return {"code": 0, "msg": "", "token": "difhdanf3rudifndf.dfrhindfidf89er.49fhdigjaihg8qa"}
return "用户名称或密码不正确"
浏览器不能直接测试 post 方法,这里使用 apifox 进行测试:
文件上传
实例:
@index_page.route("upload", methods = ["POST"])
def upload():
f = request.files["file"] if "file" in request.files else None
return "request: %s, params: %s, file:%s"%(request.method, request.files, f)
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号