一、参数设置
1.参数类型
(1)string
(2)int
(3)float
2.未指定参数类型
在url中传入参数时,如果没有指定参数的类型,会默认为参数是string类型。
没有给参数指定参数类型,参数默认是string类型,想要对参数做运算,就必须先转化成int类型,最后返回的内容必须是字符串,所以再转成string类型。
from . import web @web.route('/web/book/<int:id>/') def search(id): return str(id)
(2)path类型
指定path类型,可以获取当前路径,值得注意的是获取的不是完整路径,只是此处传入的路径参数,如下获取的路径是 testpath/test。
@web.route('/web/book/<path:url_path>/') def search(url_path): return url_path
二、请求方式设置
flask中请求默认是get请求,若想要指定其他请求方式,用参数methods指定。如用户注册时,需要把用户填写的数据存入数据库,生成一条新用户的记录,此处就需要用到post请求。
@web.route('/web/book/<uuid:uid>/', methods=['post']) def search(uid): return uid
三、传参示例
(一)Cookies传参
from flask import Flask, request from flask import make_response app = Flask(__name__) # 获取cookie @app.route('/get_cookie') def get_cookie(): name = request.cookies.get('passwd') return name # 删除cookie @app.route('/del_cookie') def del_cookie(): resp = make_response('delete_cookie') resp.delete_cookie('passwd') return resp # 设置cookie @app.route('/set_cookie') def set_cookie(): resp = make_response('set_cookie') resp.set_cookie('passwd', '123456') return resp
(二)静态模板中传参
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>带参URL传值方法</title> </head> <body> <a href="{{ url_for('test',name=1) }}">点击这里查看</a> </body> </html>
url_for('test',name=1)相当于我们传递的XXX/?name=1,点击这个链接,执行了动态路由test,并将name传入输出,此时显示:http://localhost:5000/test/1
(三)URL中传参
可以使用Flask request方法:request.args.get(),例如,前台请求URL为 http://localhost:5000/tk?p=1&type=1
@app.route('/tk', methods=['post','get']) def tk(): p = request.args.get('p') type = request.args.get('type') print(p) print(type) return jsonify({'t': [p, type]})
四、小结
(一)get请求
request.args.get("key") 获取get请求参数
(二)post请求
request.form.get("key", type=str, default=None) 获取表单数据
request.values.get("key") 获取所有参数
# 参数解析对象生成
parser = reqparse.RequestParser()
args = parser.parse_args()
五、request获取参数
@web.route('/web/books') def search(): q = request.args.get('q') page = request.args['page'] return jsonify({'q': q, 'page': page})
文件上传
@app.route('/uploads', methods=['GET', 'POST']) def uploads(): if request.method == "POST": fe = request.files['files'] # basepath = os.path.dirname(os.path.abspath(__file__)) basepath = os.path.abspath(os.path.dirname(__file__)) upload_path = os.path.join(basepath, 'static', 'upload') # f.filename可以拿到文件名,但是是客户端定义的名,不要相信这个名称,用secure_filename包装一下 fe.save(upload_path + '/' + secure_filename(fe.filename)) # 这里的url_for 和jinja的前端用法不一样,可以忽略.的引用 # url_for重定向 return redirect(url_for('uploads')) return render_template('upload.html')
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接