falcon-1.1.0源码阅读笔记III
Request class
__init__(self, env, options=None)
实例化类的时候,需要传入env参数(dict类型),具体可参考PEP3333
不传入options参数的时候,options为RequestOptions类,这个类里实际就是几个默认设置1
2
3
4
5
6
7
8
9
10
11
12__slots__ = (
'keep_blank_qs_values',
'auto_parse_form_urlencoded',
'auto_parse_qs_csv',
'strip_url_path_trailing_slash',
)
def __init__(self):
self.keep_blank_qs_values = False
self.auto_parse_form_urlencoded = False
self.auto_parse_qs_csv = True
self.strip_url_path_trailing_slash = True
这些设置在后续处理env中的参数时有用到,比如self.query_string = env[‘QUERY_STRING’],如果有query_string,就需要通过parse_query_string方法解析
- parse_query_string(query_string, keep_blank_qs_values=False, parse_qs_csv)
- 可以看到这里的设置代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15try:
self.query_string = env['QUERY_STRING']
except KeyError:
self.query_string = ''
self._params = {}
else:
if self.query_string:
self._params = parse_query_string(
self.query_string,
keep_blank_qs_values=self.options.keep_blank_qs_values,
parse_qs_csv=self.options.auto_parse_qs_csv,
)
else:
self._params = {}
这里将options中的设置传入parse_query_string方法,得到一个字典