带有HttpParams和Python金字塔后端的Angular HttpClient

时间:2018-07-16 15:15:47

标签: angular pyramid

我正在用Angular编写一个前端应用程序,并在Pyramid Web Framework(python)中编写了一个后端应用程序,但是在将请求查询参数从前端传递给通过HttpClientHttpParams后端,例如:

const params = HttpParams().append('type', 'string1;string2');
return this.http.get(apiUrl, {params: params});

(其中this.http是服务的HttpClient的实例)

在后端,我有一个与请求匹配的视图,但是在这种情况下,request.params的值为:

NestedMultiDict([('type', 'string1'), ('string2', '')])

而我希望该值是:

NestedMultiDict([('type', 'string1;string2')])

我正确使用HttpClient + HttpParams吗?还是这仅仅是https://github.com/angular/angular/issues/24754上公开的Angular问题的另一个示例?

编辑:我看起来越多,就越像一个Angular问题。 jQuery将查询字符串编码为type=string1%3Bstring2,而Angular将其设置为type=string1;string。另一方面,如果我使用:

const params = HttpParams().set('type', encodeURIComponent('string1;string2'));

然后,Angular将查询字符串设置为type=string1%253Bstring2,然后金字塔在request.params中将其解码为NestedMultiDict([('type', 'string1%3Bstring2')])。调用urllib.parse.unquote(request.params['type'])会得到值string1;string2。因此,angular可以正确编码URI编码字符串中存在的'%'字符,但不会编码';'在未编码的字符串中...

1 个答案:

答案 0 :(得分:1)

使用设置方法:

const params = HttpParams().set('type', 'string1;string2');

欢呼!