Flask
Posted liusouthern
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask相关的知识,希望对你有一定的参考价值。
Flask简介:
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务,在介绍Flask之前首先来聊下它和Django的联系以及区别,django个大而全的web框架,它内置许多模块,flask是一个小而精的轻量级框架,Django功能大而全,Flask只包含基本的配置 Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用,相比于其他Web框架例如Django,更加灵活也更加简洁,如下几行代码就可以写出一个小程序:
from flask import Flask app = Flask(__name__) @app.route(‘/‘) def hello_world(): return ‘Hello Flask!‘ if __name__ == ‘__main__‘: app.run()
接下来我们按照执行顺序来了解下Flask
配置文件
app.config.from_object("settings.DevelopmentConfig")
路由
路由通过使用Flask的app.route
装饰器来设置
动态路由(url传参)
@app.route(‘/user/<username>‘) def show_user_profile(username): # show the user profile for that user return ‘User %s‘ % username @app.route(‘/post/<int:post_id>‘) def show_post(post_id): # show the post with the given id, the id is an integer return ‘Post %d‘ % post_id
如果希望获取/article/1
这样的路径参数,就需要使用路径变量。路径变量的语法是/path/<converter:varname>
。在路径变量前还可以使用可选的转换器,有以下几种转换器。
转换器 | 作用 |
---|---|
string | 默认选项,接受除了斜杠之外的字符串 |
int | 接受整数 |
float | 接受浮点数 |
path | 和string类似,不过可以接受带斜杠的字符串 |
any | 匹配任何一种转换器 |
uuid | 接受UUID字符串 |
HTTP方法
如果需要处理具体的HTTP方法,在Flask中也很容易,使用route
装饰器的methods
参数设置即可。
- GET 将未经加密的信息发送的服务器. 是最通用的方法.
- HEAD 该方法除了服务端不返回响应内容只返回头信息之外, 同GET是一样的.
- POST 用于向服务器发送html表单数据. POST请求不会被缓存.
- PUT 将URL所指示的资源用上传的内容替换.
- DELETE 将URL所指示的资源删除.
from flask import request,render_template @app.route(‘/login‘, methods=[‘GET‘, ‘POST‘]) #如果不加methods,Flask路由默认处理的是GET请求 def login(): if request.method == ‘POST‘: do_the_login() else: return render_template(‘xxx.html‘)
url_for 和 endpoint
from flask import Flask,url_for app=Flask(__name__) @app.route(‘/<path:url>‘,endpoint=‘XXX‘) #endpoint默认为函数名 def demo(url): print(url_for(‘XXX‘,url=url)) #如果设置了url参数,url_for(别名,加参数) return ‘Hello World‘ if __name__ == ‘__main__‘: app.run()
处理请求
Request 对象
Request 对象是一个全局对象,利用它的属性和方法,我们可以方便的获取从页面传递过来的参数。
request.method | 获取请求方法 |
request.form | 获取POST类型的表单提交的数据 |
request.args | 获取get请求参数 |
request.values | 获取GET和POST请求携带的所有参数(GET/POST通用) |
request.cookies | 获取cookies信息 |
request.headers | 获取请求头信息 |
request.path | 获取cookies信息 |
request.full_path | 获取获取用户访问的完整url地址+参数 例如(/index/?page=1) |
request.url | 获取完整路径 |
request.base_url | 获取访问url地址(不获取参数),例如 http://127.0.0.1:5000/; |
request.files | 获取用户上传的文件 |
响应处理
- 返回字符串 ----return “asdf”
- 返回模板 ----return render_template(‘xxx.html‘)
- 返回重定向 ----return redirect(‘ /‘)
- 返回字典 ----jsonify({‘k1‘:‘v1‘})
默认的错误页面是一个空页面,如果需要自定义错误页面,可以使用errorhandler
装饰器。
from flask import render_template @app.errorhandler(404) def page_not_found(error): return render_template(‘page_not_found.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
以上是关于Flask的主要内容,如果未能解决你的问题,请参考以下文章