发布于2019-08-23 16:22 阅读(259) 评论(0) 点赞(5) 收藏(2)
1. URL构建
flask可以通过url_for方法来构造所需的URL。话不多说,上代码:
>>> from flask import Flask, url_for >>> app = Flask(__name__) >>> @app.route('/') ... def index(): pass ... >>> @app.route('/login') ... def login(): pass ... >>> @app.route('/user/<username>') ... def profile(username): pass ... >>> with app.test_request_context(): ... print url_for('index') ... print url_for('login') ... print url_for('login', next='/') ... print url_for('profile', username='John Doe') ... / /login /login?next=/ /user/John%20Doe
2. HTTP 方法
HTTP ( web 应用使用的协议)) 协议中有访问 URL 的不同方法。缺省情况下,一个路由 只回应 GET 请求,但是可以通过 methods 参数使用不同方法。例如:
@app .route( '/login' , methods = [ 'GET' , 'POST' ]) def login(): if request.method = = 'POST' : do_the_login() else : show_the_login_form() |
一直对这些HTTP请求概念有些模糊,下面引用文档中描述:
GET 浏览器告诉服务器只要 得到 页面上的信息并发送这些信息。这可能是最常见的 方法。 HEAD 浏览器告诉服务器想要得到信息,但是只要得到 信息头 就行了,页面内容不要。 一个应用应该像接受到一个 GET 请求一样运行,但是不传递实际的内容。在 Flask 中,你根本不必理会这个,下层的 Werkzeug 库会为你处理好。 POST 浏览器告诉服务器想要向 URL 发表 一些新的信息,服务器必须确保数据被保存好 且只保存了一次。 HTML 表单实际上就是使用这个访求向服务器传送数据的。 PUT 与 POST 方法类似,不同的是服务器可能触发多次储存过程而把旧的值覆盖掉。你 可能会问这样做有什么用?这样做是有原因的。假设在传输过程中连接丢失的情况 下,一个处于浏览器和服务器之间的系统可以在不中断的情况下安全地接收第二次 请求。在这种情况下,使用 POST 方法就无法做到了,因为它只被触发一次。 DELETE 删除给定位置的信息。 OPTIONS 为客户端提供一个查询 URL 支持哪些方法的捷径。从 Flask 0.6 开始,自动为你 实现了这个方法。 |
3.静态文件
flask中的静态文件默认处于static文件夹下,你可以自己创建一个static文件夹(要位于应用的根目录下)。与bottle不同,bottle需要添加一个静态文件的路由,否则会提示找不到这些文件。
4. 渲染模板
flask字段引入了Jinja2模板,使用render_template()方法可以渲染模板,并传递数据。
5.请求
from flask import request |
使用method属性可以处理当前的请求方法,使用'form'可以对表单数据进行处理。
@app .route( '/login' , methods = [ 'POST' , 'GET' ]) def login(): error = None if request.method = = 'POST' : if valid_login(request.form[ 'username' ], request.form[ 'password' ]): return log_the_user_in(request.form[ 'username' ]) else : error = 'Invalid username/password' # 如果请求访求是 GET 或验证未通过就会执行这里的代码 |
要操作 URL (如 ?key=value )中提交的参数可以使用 args 属性:
searchword = request.args.get( 'q' , '') |
6. 文件上传
用 Flask 处理文件上传很容易,只要确保不要忘记在你的 HTML 表单中设置enctype="multipart/form-data" 属性就可以了。否则浏览器将不会传送你的文件。
已上传的文件被储存在内存或文件系统的临时位置。你可以通过请求对象 files 属性来访问上传的文件。每个上传的文件都储存在这个 字典型属性中。这个属性基本和标准 Python file 对象一样,另外多出一个 用于把上传文件保存到服务器的文件系统中的save() 方法。下例展示其如何运作:
from flask import request @app .route( '/upload' , methods = [ 'GET' , 'POST' ]) def upload_file(): if request.method = = 'POST' : f = request.files[ 'the_file' ] f.save( '/var/www/uploads/uploaded_file.txt' ) ... |
如果想要知道文件上传之前其在客户端系统中的名称,可以使用 filename 属性。但是请牢记这个值是 可以伪造的,永远不要信任这个值。如果想要把客户端的文件名作为服务器上的文件名, 可以通过 Werkzeug 提供的 secure_filename() 函数:
from flask import request from werkzeug import secure_filename @app .route( '/upload' , methods = [ 'GET' , 'POST' ]) def upload_file(): if request.method = = 'POST' : f = request.files[ 'the_file' ] f.save( '/var/www/uploads/' + secure_filename(f.filename)) ... |
7.cookies
要访问 cookies ,可以使用 cookies 属性。可以使用请求对象 的 set_cookie 方法来设置 cookies 。请求对象的 cookies 属性是一个包含了客户端传输的所有 cookies 的字典。 在 Flask 中,如果能够使用 会话 ,那么就不要直接使用 cookies ,因为 会话比较安全一些。
获取cookies:
from flask import request @app .route( '/' ) def index(): username = request.cookies.get( 'username' ) # 使用 cookies.get(key) 来代替 cookies[key] , # 以避免当 cookie 不存在时引发 KeyError 。 |
储存cookies:
from flask import make_response @app .route( '/' ) def index(): resp = make_response(render_template(...)) resp.set_cookie( 'username' , 'the username' ) return resp |
8. 重定向
使用redirect()方法可以重定向。
from flask import abort, redirect, url_for @app .route( '/' ) def index(): return redirect(url_for( 'login' )) |
9. 关于响应
视图函数的返回值会自动转换为一个响应对象。如果返回值是一个字符串,那么会被转换为一个包含作为响应体的字符串、一个 200 OK 响应码和一个 text/html MIME 类型的响应对象。以下是转换的规则:
如果想要在视图内部掌控响应对象的结果,那么可以使用 make_response() 函数。
设想有如下视图:
@app .errorhandler( 404 ) def not_found(error): return render_template( 'error.html' ), 404 |
可以使用 make_response() 包裹返回表达式,获得结果。对结果进行修改 后再返回:
@app .errorhandler( 404 ) def not_found(error): resp = make_response(render_template( 'error.html' ), 404 ) resp.headers[ 'X-Something' ] = 'A value' return resp |
作者:j878
链接:https://www.pythonheidong.com/blog/article/55325/cc2938007894fd1834a6/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!