当前位置:网站首页>flask初体验
flask初体验
2022-07-20 15:28:00 【净夜凡尘】
flask 初体验
准备工作
创建虚拟环境
mkdir myproject
cd myproject
python3 -m venv venv
激活虚拟环境
. venv/bin/activate
安装Flask
pip3 install Flask
一个最简单的应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '<p>Hello World!</p>'
if __name__ == '__main__':
''' :param host: 指定监听主机,默认为127.0.0.1(localhost), 设置0.0.0.0 运行任何网络访问 :param port: 指定暴露端口,默认使用端口5000 :param debug: 默认为false。 如果设置为true,则提供调试信息 :param options: 要转发到底层的Werkzeug服务器。 '''
app.run(debug=True)
路由
现代 web 应用都使用有意义的 URL ,这样有助于用户记忆,网页会更得到用户的青睐, 提高回头率。
使用 route() 装饰器来把函数绑定到 URL:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
变量规则
Flask 变量规则
通过把 URL 的一部分标记为 <variable_name> 就可以在 URL 中添加变量。
标记的 部分会作为关键字参数传递给函数。
通过使用 converter:variable_name ,可以 选择性的加上一个转换器,为变量指定规则
from markupsafe import escape
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
# show the user profile for that user
return f'User {
escape(username)}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return f'Post {
post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
# show the subpath after /path/
return f'Subpath {
escape(subpath)}'
转换器类型
类型 | 描述 |
---|---|
string | (缺省值) 接受任何不包含斜杠的文本 |
int | 接受正整数 |
float | 接受正浮点数 |
path | 类似 string,但可以包含斜杠 |
uuid | 接受 UUID 字符串 |
HTML转义
当返回 HTML ( Flask 中的默认响应类型)时,为了防止注入攻击,所有用户提 供的值在输出渲染前必须被转义。使用 Jinja渲染的 HTML 模板会自动执行此操作。
手动转义
from markupsafe import escape
from flask import Flask
app = Flask(__name__)
@app.route("/<name>")
def hello(name):
return f"Hello, {
escape(name)}!"
Flask URL构建
url_for()函数对于动态构建特定函数的URL非常有用。
url_for()函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分
from flask import Flask, redirect, url_for
app = Flask(__name__)
# 使用redirect 和url_for 进行跳转
@app.route('/admin')
def hello_admin():
return 'Hello admin'
@app.route('/guset/<guset>')
def hello_guset(guset):
return f'Hello {
guset} as Guset'
@app.route('/user/<name>')
def show_name(name):
if name == 'admin':
return redirect(url_for('hello_admin'))
else:
return redirect(url_for('hello_guset', guset=name))
if __name__ == '__main__':
app.run(debug=True)
show_name 函数检查接收参数是否与 'admin’相匹配,如果匹配使用 url_for()将应用重定向到 hello_admin() 去,否则件参数作为 guset 传递给 hello_guset()函数。
FLASK HTTP方法
- Http协议是万维网中数据通信的基础。在该协议中定义了从指定URL检索数据的不同方法。
方法 描述 GET 以未加密的形式将数据发送到服务器。最常见的方法。 HEAD 和GET方法相同,但没有响应体。 POST 用于将HTML表单数据发送到服务器。POST方法接收的数据不由服务器缓存。 PUT 用上传的内容替换目标资源的所有当前表示。 DELETE 删除由URL给出的目标资源的所有当前表示。 当了路径下创建一个login.html
<html> <head> <meta charset="utf-8"/> <title>Flask HTTP请求方法处理</title> </head> <body> <form action = "http://localhost:5000/login" method = "post"> <p>输入姓名:</p> <p><input type = "text" name = "name" value=""/></p> <p><input type = "submit" value = "提交" /></p> </form> </body> </html>
python 输入以下脚本
from flask import Flask, redirect, url_for, request app = Flask(__name__) @app.route('/success/<name>') def success(name): return 'welcome %s' % name @app.route('/login', methods=['POST', 'GET']) def login(): if request.method == 'POST': user = request.form['name'] return redirect(url_for('success', name=user)) else: user = request.args.get('name') return redirect(url_for('success', name=user)) if __name__ == '__main__': app.run(debug=True)
启动flask服务,将login.html 拖拽到浏览器中打开,输入并提交,你会看到你调到flask success() 函数中
以上是使用Flask的简单记录
边栏推荐
- 生成任意边缘平滑形状(斑块)神器
- 文件映射(mmap)和sendfile和零copy之間的聯系和區別
- Kubernetes应用程序设计指南
- MySQL ON DELETE CASCADE(级联删除)[猿教程]
- Kalman filter meets deep learning: papers related to Kalman filter and deep learning
- 文件映射(mmap)和sendfile和零copy之间的联系和区别
- JS traversal string
- Pandoc安装、使用、快速上手
- Iccv2021 frequency domain image translation: more photo realistic, better identity preserving
- 自注意力和 CNN 的结合 ACmix : On the Integration of Self-Attention and Convolution
猜你喜欢
同时实现射频干扰信号检查与缓解的工作
生成任意边缘平滑形状(斑块)神器
ModuleNotFoundError_ No_ module_ Popular explanations and methods of named
Layoutinflater layout rendering tool
机器学习—支持向量机理论详细推导(含例题讲解)(二)
redis6.2 systemd 启动 提示 redis.service: Failed with result ‘protocol‘.
@RestControllerAdvice作用及原理
At the same time, RF interference signal inspection and mitigation are realized
使用 Helm 3 包管理器在 Kubernetes 集群上安装软件
Error reporting after matlab 2021b installation activation: solution to license manager error -103
随机推荐
华为云:一切皆服务,共建全场景智慧金融
flv. JS' live broadcast optimization scheme of frame tracking, disconnection and reconnection and real-time update
語義分割-Rethinking BiSeNet For Real-time Semantic Segmentation-2-miou計算
Acmix: on the integration of self attention and Revolution
Hide & seek introduction -- end-to-end simulation and processing of radio observation data (I)
[bug resolution] visibledeprecationwarning: creating an ndarray from ragged needed sequences
The seemingly simple input box input is abnormally stuck. Remember a troubleshooting idea for daily performance problems
2022新版的第三方宝塔面板 btcloud PHP源码
Review of research on multi task learning of intensive predictive tasks - optimization methods
同花顺网上开户安全吗?十大证券公司有哪些?
Unity自定义属性(Attribute)示例
muduo网络库编程
4 个简单操作,实现 CPU 轻量级网络 ---- PP-LCNet: A Lightweight CPU Convolutional Neural Network
MATLAB 生成随机数 方法总汇 (各分布配图参考)
[NeurIPS 2021] TokenLearner:自适应学习 token 个数和位置 - What Can 8 Learned Tokens Do for Images and Videos?
[论文速度] 同时解决成像时,曝光不足和曝光过度问题:Deep Reciprocating HDR Transformation
MySQL master-slave replication, read-write separation
Semantic segmentation-rethinking bisenet for real time semantic segmentation-2-miou calculation
redis 内存分析工具 RMA 使用
leetcode 1791. Find the central node of the star chart