Fork me on GitHub

Flask学习笔记(四)-Response对象+表单实例

一、响应对象response

flask提供了Response最为视图最终返回的数据,但在代码编写过程中,我们通常很少直接使用Response对象,下面是几个常见的视图返回数据的方式

from flask import Flask, jsonify, render_template, Response, request,redirect
import os
app=Flask(__name__)
@app.route('/text')
def get_text():
#返回文本
return '返回文本'
@app.route('/dict')
def get_dict():
#返回字典
return {'state':0}
@app.route('/json')
def get_json():
#返回json
return jsonify({'state':0})

@app.route('/html')
def get_html():
#返回html
return render_template('index.html')
@app.route('/response')
def get_resonponse():
#返回一个Response对象
return Response('Not Found', status=404)

@app.route("/image")
def image():
#返回图片数据
f = open(os.getcwd()+"\\static\\tp01.jpg", 'rb')
resp = Response(f.read(), mimetype="image/jpeg")
return resp


if __name__ == '__main__':
app.run(debug=True)
  1. get_text 返回一个字符串
  2. get_dict 返回一个字典
  3. get_json 返回一个json格式的字符串
  4. get_html 返回一个模板
  5. get_resonponse 返回一个Response对象
  6. 利用Response返回图片

使用谷歌浏览器来查看这几个http响应的类型,1, 4, 5 的Content-Type 是 text/html,2,3的Content-Type 是application/json。这说明,flask会根据视图函数的返回值类型,来决定最终的Content-Type。

二、flask提交表单

用户使用表单向服务器提交信息,比如最常见的登录,本文讲解如何在html页面里提交表单,flask如何处理表单数据,此外还将讨论表单敏感信息如何存储。下面是一个简单的登录页面中的form表单

index.html示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>
        欢迎{{name}}
    </h1>
</body>
</html>

login.html示例:  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <form action="/login" method="POST">
      <p>name: <input type="text" name="name" /></p>
      <p>password: <input type="password" name="password" /></p>
      <input type="submit" value="提交" />
  </form>
</body>
</html>
  • action 设置提交的url
  • method 设置请求的方法
  • input标签的type设置为password时,在页面输入信息时不会显示明文

在服务端,接收表单信息的方式如下

@app.route('/login', methods=['GET', 'POST'])
def do_login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        name = request.form['name']
        password = request.form['password']
        if name == 'python':
            return render_template('index.html', name=name)
        else:
            return redirect('/login')

通过request.form来获取表单信息,然后要对用户输入的用户名和密码做校验,这里只是为了做演示,因此判断逻辑很简单,真正的产品里,需要拿着用户名和密码去数据库的user表里去查询,如果能找到用户,则说明用户名和密码是正确的。

 

 

 

 

  

posted @ 2022-09-26 21:53  橘子偏爱橙子  阅读(106)  评论(0编辑  收藏  举报