一.request的get和post
1、get请求:
使用场景:如果只对服务器获取数据,并没有对服务器产生任何影响,那么这时候使用get请求
传参:get请求传参是放在url中,并且是通过?的形式来指定key和value的
2、post请求:
使用场景:如果要对服务器产生影响,那么使用post请求
传参:post请求传参不是放在URL中,是通过form data 的形式发送给服务器的
get 请求是通过flask.request.args来获取
post 请求是通过flask.request.form来获取
post 请求在模板中要注意几点:
*input 标签中,要写name来表示这个value的key,方便后台获取
*在写form表单的时候,要指定method=‘post’,并且要指定action='/login/'
二.应用
功能:
用post方法一个小的加法,从form表单将值读到python中,处理之后进行一个新的页 面展示结果
方法一:
原生的html表单获取:
method1.py
from flask import Flask,render_template,request from flask_script import Manager app = Flask(__name__) app.config["SECRET_KEY"] = "SECRET_KEY" manage = Manager(app) @app.route("/") def index(): return "首页" @app.route("/t_test/") def t_test(): return render_template("common/ComputeSum.html") @app.route("/compute/",methods=["GET","POST"]) def computeSum(): a = int(request.form.get("first")) b = int(request.form.get("secend")) return render_template("common/answer.html",answer=a+b) if __name__ == "__main__": print("reload") manage.run()
index.html(可有可无)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1 align="center">测试首页!!!</h1> </body> </html>
ComputeSum.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>计算两数之和!</title> <style> p{ text-align: center; } </style> </head> <body> <h1 align="center">计算两个数之和!</h1> <hr> <form action="{{ url_for('computeSum') }}" method="post"> <p>第一个数:<input type="text" name="first" placeholder="请输入第一个数"></p> <p>第二个数:<input type="text" name="secend" placeholder="请输入第二个数"></p> <p><input type="submit" value="提交"></p> </form> </body> </html>
answer.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>答案</title> </head> <body> <hr> <h2 align="center">答案是:{{ answer }}</h2> <hr> </body> </html>
方法二:
用flaskform实现:
method2.py
from flask import Flask,render_template,request from flask_script import Manager from flask_wtf import FlaskForm from wtforms import SubmitField,FloatField from wtforms.validators import DataRequired,Length app = Flask(__name__) app.config["SECRET_KEY"] = "SECRET_KEY" manage = Manager(app) class Form(FlaskForm): aw = FloatField("第一个数",validators=[DataRequired("不能为空"),Length(min=1,max=5)]) bw = FloatField("第二个数", validators=[DataRequired("不能为空"), Length(min=1, max=5)]) submit = SubmitField("提交") @app.route("/") def index(): return "首页" @app.route("/t_test/") def t_test(): form = Form() return render_template("common/ComputeSum2.html",form=form) @app.route("/compute/",methods=["GET","POST"]) def computeSum(): a = int(request.form.get("aw")) b = int(request.form.get("bw")) return render_template("common/answer.html",answer=a+b) if __name__ == "__main__": print("reload") manage.run()
ComputeSum2.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>第二种传递方式</title> <style> p{ text-align: center; } </style> </head> <body> <h2 align="center">计算和!!</h2> <form action="{{ url_for("computeSum") }}" method="post"> {{ form.crsf_token }} <p>{{ form.aw.label }}{{ form.aw() }}</p> <p>{{ form.bw.label }}{{ form.bw() }}</p> <p>{{ form.submit() }}</p> </form> </body> </html>