Flask 入门3:Flask 请求上下文与请求

1. 前言

Flask 在处理请求与响应的过程:

首先我们从浏览器发送一个请求到服务端,由 Flask 接收了这个请求以后,这个请求将会由路由系统接收。然后在路由系统中,还可以挂入一些 "勾子",在进入我们的 viewFunction 以前做一些预处理。即产生一个 request 对象,可以获取一些变量、cookie等参数,再传入 viewFunction 里面做一个进一步的处理。处理完了以后,一般上不需要直接去产生一个 response,而是通过 render_template 传给 Flask。

2. login

login.html:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>方法:{{ method }}</h1>
<form method="post">
    <div>
        <input type="text"
               name="username"
               placeholder="User name" />
    </div>
    <div>
        <input type="text"
               name="password"
               placeholder="Password" />
    </div>
    <input type="submit">
</form>
</body>
</html>
python 复制代码
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
    else:
        username = request.args['username']

    return render_template('login.html',method=request.method)

可直接使用浏览器传值:

3. 上传文件

python 复制代码
@app.route('/upload', methods=['GET', 'POST'])
def uploads():
    if request.method == 'POST':
        f = request.files['file']
        basepath = path.abspath(path.dirname(__file__))  # 获取当前绝对路径
        upload_path = path.join(basepath, 'static/uploads')
        f.save(upload_path, secure_filename(f.filename))

        return redirect(url_for('uploads'))
    return render_template('upload.html')

upload.html:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload new File</title>
</head>
<body>
<h1>文件上传示例</h1>
<form action=""
      method="post"
      enctype="multipart/form-data">
  <p>
    <input type="file"
           name="file">
    <input type="submit"
           value="Upload">
  </p>
</form>
</body>
</html>

4. errorhandler

对错误进行监控:

python 复制代码
@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html'), 404


@app.errorhandler(400)
def bad_request(error):
    return render_template('400.html'), 400

404.html:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>404</h1>
<h2>很抱歉!</h2>
<p>您访问的页面并不存在</p>
</body>
</html>

400.html:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>400</h1>
<h2>很抱歉!</h2>
<p>您发送了一个错误的请求</p>
</body>
</html>
相关推荐
m***记3 分钟前
Python 数据分析入门:Pandas vs NumPy 全方位对比
python·数据分析·pandas
程序员小假4 分钟前
我们来说一说 Redisson 的原理
java·后端
白衣鸽子9 分钟前
数据库高可用设计的灵魂抉择:CAP权衡
数据库·后端
MYX_30910 分钟前
第七章 完整的模型训练
pytorch·python·深度学习·学习
xyy12318 分钟前
SixLabors.ImageSharp 使用指南
后端
新子y28 分钟前
【小白笔记】岛屿数量
笔记·python
CLubiy33 分钟前
【研究生随笔】Pytorch中的线性代数
pytorch·python·深度学习·线性代数·机器学习
reasonsummer35 分钟前
【办公类-115-02】20251018信息员每周通讯上传之文字稿整理(PDF转docx没有成功)
python·pdf
材料科学研究42 分钟前
深度学习物理神经网络(PINN)!
python·深度学习·神经网络·pinn
兰文彬1 小时前
Pytorch环境安装指南与建议
人工智能·pytorch·python