使用 django-rest 框架中的 GET 方法将 url 作为参数传递?

Posted

技术标签:

【中文标题】使用 django-rest 框架中的 GET 方法将 url 作为参数传递?【英文标题】:Pass a url as a parameter with the GET methoid in the django-rest framework? 【发布时间】:2016-01-22 14:33:37 【问题描述】:

我打算将 url 作为 GET 参数传递给 restful API,但它无法匹配 url 模式,因此返回 404。

我使用 django-rest 框架作为服务器端。

这里是urls.py

url(r'^method/?P<url>(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]2,256\.[a-z]2,6\b([-a-zA-Z0-9@:%_\+.~#?&//=]*))$',views.Method.as_view()), name='method'),

而客户端的xhr代码是这样的。

var xhr = new XMLHttpRequest();
// url is like https://storage.googleapis.com/xxx/cccc/abc.txt
xhr.open('GET', 'method/' + url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) 
    if (this.status == 200) 
        // do something
    
;
xhr.send();

正则表达式正常,但服务器仍返回 404。

即使我传递了类似的请求网址

xhr.open('GET', 'method?=' + url, true);

它仍然返回 404 not found.

这样做的正确方法是什么?

谢谢!

【问题讨论】:

get 参数中类似 url 的值应该是 url 编码的.. 可能这就是为什么.. 试试.. 【参考方案1】:

更改您的客户端 xhr 代码,例如:

var xhr = new XMLHttpRequest();
var url = 'https://storage.googleapis.com/xxx/cccc/abc.txt';
xhr.open('GET', 'method/?url=' + encodeURIComponent(url), true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) 
    if (this.status == 200) 
        // do something
    
;
xhr.send();

【讨论】:

以上是关于使用 django-rest 框架中的 GET 方法将 url 作为参数传递?的主要内容,如果未能解决你的问题,请参考以下文章

Python Django-REST框架和Angularjs的文件夹结构

如何使用模型序列化器在 django-rest 中序列化一对多关系?

django-restful:购物车 学习记录

python django-rest-framework 3.3.3 更新嵌套序列化程序

使用 angularjs 进行 django-rest 分页

django-restful:与前端vue接口对接