一、从mvc谈起
搞过mvc开发的童鞋一般知道,搞web开发一般基本也就是那些个套路,大的条线而言,那么就是从页面获取参数,获取参数后,然后进行逻辑处理,在处理的过程中也就是包含持久化的过程,那么处理完成后,那么再将处理后的结果反馈给用户。那么这里就涉及到了好几种技术,比如ORM,模块以及页面渲染等。从抽象层面而言,第一步就是in,处理就是handle,那么反馈就是out。那么今天我们简要介绍的就是flask中read的机制,就是如果从用户的提交信息中心获取数据。
二、参数的传递
传递参数的语法是://。然后在视图函数中,也要定义同名的参数。例如:
@app.route('/index//')
如上面的形式,在请求处理方法的路由配置中,如果对于参数的类型没有显式指定的话,那么默认为string型,否则在显式指定了int以及float类型时,当提交的参数不满足预置的参数数据类型指定,系统将激发not found错误。除了string、int和float,系统还支持path、uuid类型。尤其是如需要考虑做SEO优化,则推荐使用path类型进行参数传递。
三、get和post
大家知道,用户通过web提交数据最通常的有两种方式,一种是get,而另一种就是post,在flask中,针对两种不同的提交方式,采取了不同的获取手段:
- get
对于get方式提交的数据,flask中使用如下方式获取其中的传递参数:
request.args.get("key") 或者 request.args["key"]
- post
对于post方式提交的数据,flask中则采用如下的方式获取其中的传递参数:
request.form.get("key") 或者 request.form["key "]
- 综合应用
四、文件上传
获取上传的文件很简单,采取如下的方式获取:
f = request.files['files']
- 综合运用
@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')
以上就是flask中最基本的参数传递和获取的相关技术,除了这些基本的技术之外,系统还可以获取json类参数,具体大家可以参照下rquest的说明,应该是非常简单的。
五、一点思考
用多了spring mvc以及jfinal,在flask中,能不能将页面表单直接封装到一个对象中么?各位看官谁知道?可以交流一下!