我使用Django作为一个restfulapi,我有类似url(r'^datavore/(?P<configuration>.*)/(?P<dataset>.*)/(?P<varname>.*)/(?P<region>[a-z-A-Z\_]+)/(?P<date_range>.*)/filelist/$', views.filelist,name="filelist"),
的url
我的问题是,当dataset参数包含“/”时,它修改了url的结构,而dataset参数只包含/后面的字符串。你知道怎么解决这个问题吗?在
参数之间必须使用不同于内部参数的分隔符。在参数匹配之后,您总是可以将分隔符替换为实际应该在参数内部的斜杠。在
因此,要么那些在内部使用斜杠的参数允许使用其他安全字符,如破折号或点(这意味着由于各自参数的性质,存在无法出现的字符),要么您必须决定一些分隔符并创建一些转义规则。在
如果只有一个参数可以有斜杠,那么可以通过指定regex来解决问题,其中只允许一个捕获组具有斜杠。例如:
^{pr2}$datavore/some-config/dataset/subdataset/varname/region/date-range/filelist/
将生成匹配组的下一个值:如果多个组中可以有斜杠,那么没有准确的方法来正确地匹配它们而不使用路径中的额外文本。路径中包含额外文本的示例解决方案:
注意使用
/__dataset__/
而不是简单的dataset
,您可能希望用户拥有以dataset
开头的数据集的值。这将导致问题:实际解决方案在很大程度上取决于捕获组的可能值
如果您将此路径用作API端点,那么我建议您直接转储此方法,而使用GET参数
相关问题 更多 >
编程相关推荐