0%

引言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from flask import Flask, request, current_app, jsonify
import uuid

from flask.views import MethodView

flask_app = Flask(__name__)


class HelloView(MethodView):
def get(self):
return jsonify(
code=-1,
msg="success",
data=[]
)


flask_app.add_url_rule("/", HelloView.as_view("hello"))

if __name__ == '__main__':
flask_app.run()

代码很简单,类视图的好处在于,你可以通过写基类,来处理一些公共的操作,你甚至还可以复用一些已经写好的类视图,让你少些很多代码,更多信息请参考django restframework

阅读全文 »

引入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from flask import Flask, jsonify

flask_app = Flask(__name__)

flask_app.config.from_mapping(
{
"SECRET_KEY": "you never know the secret key"
}
)


@flask_app.route('/', endpoint="11", methods=["GET", "POST"])
def hello_world():
return jsonify(code=0, msg="success")


if __name__ == '__main__':
flask_app.run()
阅读全文 »

引言

我们知道

1
from flask import request

是一个代理对象,实际上代理的是 RequestContextrequest属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class RequestContext(object):

def __init__(self, app, environ, request=None, session=None):
self.app = app
if request is None:
request = app.request_class(environ)
self.request = request
self.url_adapter = None
try:
self.url_adapter = app.create_url_adapter(self.request)
except HTTPException as e:
self.request.routing_exception = e
self.flashes = None
self.session = session

那么request属性又是什么什么呢?

阅读全文 »

引言

问题提出

先看下面一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from flask import Flask, jsonify

flask_app = Flask(__name__)


@flask_app.route('/', endpoint="11")
def hello_world():
a = 1 / 0
return jsonify(
code=0,
msg="success",
data=["hello,world!"]
)

if __name__ == '__main__':
flask_app.run()

这段代码有一个很显然的未捕捉的异常,就是1/0

阅读全文 »

原理

一个 web 应用中,不同的路径会有不同的处理函数,路由就是根据请求的 URL 找到对应处理函数的过程。

在下面的例子中,就是根据”/“找到hello_world的过程

1
2
3
4
5
6
7
8
9
10
11
12
from flask import Flask, request

flask_app = Flask(__name__)


@flask_app.route('/',endpoint="11")
def hello_world():
return "{}".format(request.remote_addr)


if __name__ == '__main__':
flask_app.run()

我们很容易想到用字典去做路由,keyurlvalue是对应的处理函数或者叫视图函数

阅读全文 »

一、添加sitemap

也就是网站地图

  1. 安装插件

需要安装两个插件来生成 sitemap 文件,前一个是传统的 sitemap,后一个是百度的 sitemap。

1
2
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save
  1. 修改站点配置文件
阅读全文 »

系统依赖

对于ubuntu操作系统,Docker Engine目前支持以下几个版本

  • Ubuntu Focal 20.04 (LTS)
  • Ubuntu Bionic 18.04 (LTS)
  • Ubuntu Xenial 16.04 (LTS)

在系统架构上,Docker Engine目前只支持x86_64oramd64,armhf,arm64等系统架构

阅读全文 »

原理

Request

Flask把前端传过来的数据environ封装成了 flask.wrappers.Request

这个类的实例又是RequestContextrequest属性值

1
2
class RequestContext(object):
request=flask.wrappers.Request(environ)

当然实际的代码是这样

1
2
class RequestContext(object):
request=app.request_class(environ)

这个app.request_class= flask.wrappers.Request

之所以这样写,是为了扩展性,你可以修改Flaskrequest_class属性来自定义你的Request

阅读全文 »

入口

由上一篇文章我们知道 Flask 要有如下函数或者一个实现了 __call__方法的类,才可以被wsgi server调用

1
2
3
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'<h1>Hello, web!</h1>']
1
2
3
4
5
6
7
class Applications(object):
def __call__(self,environ, start_response)
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'<h1>Hello, web!</h1>']
# 实现了__call__方法的类就可以像函数一样被调用
# 例如 application=Applications()
# application(environt,start_response)

Flask是怎么做的呢? 我们来看一下简单的 Flask demo

阅读全文 »