我正在构建一个网页,以在数据表中显示所有会员帐户信息。因此,我为此使用GET方法创建了一个“成员”端点。
该网页有2个选择字段,用于选择区域和成员类型以过滤出显示在数据表中的成员。
成员终点是这样的
@members.route('/members/<int:region_id> <string:member_type>',
defaults={'page': 1})
def members(page, region_id=0, member_type='basic'):
member_accounts = MemberModel.query
.filter_by(region_id=region_id)\
.filter_by(member_type=member_type)\
.paginate(page, 25, True)
return render_template('members.html', member_accounts=member_accounts,
region_choices=region_choices,
type_choices=type_choices)
// region_choices and type_choices are dict type data
因此,默认网址为domain / members / 0%20basic,显示来自区域0的成员,类型为basic。
在members.html中,我创建了两个用于过滤数据的选择字段。还有一个脚本,可以通过单击“提交”按钮使用选定的变量向端点发出GET请求。
<script>
function GetFilteredMembers(){
var regions = document.getElementById("filter-region");
var region_selected = regions.options[regions.selectedIndex].value
var mem_types = document.getElementById("filter-mem-type");
var mem_type_selected = mem_types.options[mem_types.selectedIndex].value
var Url = "domain/members/" + region_selected + "%20" + mem_type_selected;
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", Url, false );
xmlHttp.send( null );
return xmlHttp.responseText;
}
</script>
<select id="filter-region">
{% for value, text in region_choices.items() %}
<option value="{{ value }}">{{ text }}</option>
{% endfor %}
</select>
<select id="filter-mem-type">
{% for value, text in mem_type_choices.items() %}
<option value="{{ value }}">{{ text }}</option>
{% endfor %}
</select>
<input class="btn -light" type="submit" onclick="GetFilteredMembers()">Submit</input>
当我选择region_id为1并将member_type选择为'admin'时,然后单击提交按钮。我希望网站将定向到我想要的URL(domain / members / 1%20admin)。但这无法定向到我想要的网址。如何正确执行此类过滤器功能?
通过javascript构造GET请求网址是否是实现此目的的首选方法? 因为我必须在javascript中对域进行硬编码。我应该建立另一个过滤端点吗?
更新
修改后的端点为'/ member /'
added request.get.args('region_id')
added request.get.args('member_type')
也将javascript中的网址修改为
'var params = "?" + "region_id=" + region_id_selected + "&member_type=" + mem_type_selected";'
和
'var Url = "/members/" + params;'