Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django rest framework Django rest框架&x2B;React管理员:URL反斜杠问题_Django Rest Framework_React Admin - Fatal编程技术网

Django rest framework Django rest框架&x2B;React管理员:URL反斜杠问题

Django rest framework Django rest框架&x2B;React管理员:URL反斜杠问题,django-rest-framework,react-admin,Django Rest Framework,React Admin,我有一个django rest api,它实现了视图集,如下所示 class SubjectViewSet(viewsets.ModelViewSet): pagination_class = ContentRangeHeaderPagination queryset = Subject.objects.all() serializer_class = SubjectSerializer 同样,我的前端也是基于react admin的 问题: 从邮递员那里,我可以轻松地

我有一个django rest api,它实现了视图集,如下所示

class SubjectViewSet(viewsets.ModelViewSet):
    pagination_class = ContentRangeHeaderPagination
    queryset = Subject.objects.all()
    serializer_class = SubjectSerializer
同样,我的前端也是基于react admin的

问题:

从邮递员那里,我可以轻松地找到终点

  • 获取:
  • 职位:
  • 付诸表决:
  • 删除:
但是,我的react admin客户端没有附加尾部斜杠

相反,Http操作创建/放置将请求发送到url。 注意到缺少的尾随反斜杠了吗

我试着

1-将附加斜杠设置为True 2-在资源名称中添加了一个/,它只是附加了两个反斜杠

<Resource name="subject/"/>

对于PUT,请注意附加的反斜杠

底线是,只要请求后面有反斜杠,我的服务器就会接受它们

我的react admin应用程序不会在请求上附加反斜杠。
请这样做,建议兄弟:-)

这是您的
数据提供者的工作,将请求转换为后端所期望的形状,并使用正确的url

在您的情况下,您必须按照dataProvider中的说明自定义httpClient:

@吉尔达斯·加西亚

我听从了你的回答,尽管有道理,这个问题还是再次出现了。 发送请求时,在追加查询参数后,在URL变量的末尾添加/

所需的URL(在

当我跟随你的答案时,我得到了(在完整URL的末尾添加了反斜杠)

向前看,我选择了寻找?并在该索引处添加反斜杠

const httpClient = (url, options = {}) => {

    var pos = url.indexOf('?');
    var b = "/";
    var _url = [url.slice(0, pos), b, url.slice(pos)].join('');

    //url = url + '/';
    return fetchUtils.fetchJson(_url, options);
}

const dataProvider = simpleRestProvider('http://localhost:8000/api/v1/coreapp', httpClient)


const App = () => (    
    <Admin dataProvider={dataProvider}
    <Resource name="subject" list={SubjectList} create={SubjectCreate} edit={SubjectEdit}/>
    </Admin>);

    export default App;
consthttpclient=(url,options={})=>{
var pos=url.indexOf(“?”);
var b=“/”;
var_url=[url.slice(0,pos),b,url.slice(pos)].join(“”);
//url=url+'/';
返回fetchUtils.fetchJson(_url,options);
}
const dataProvider=simpleRestProvider('http://localhost:8000/api/v1/coreapp,httpClient)
常量应用=()=>(

默认情况下,
DefaultRouter
创建的URL会附加一个尾随斜杠。在实例化路由器时,可以通过将尾随斜杠参数设置为False来修改此行为。例如:

router = DefaultRouter(trailing_slash=False)
  • 一种解决方案可能是使用为DRF编写的特殊数据提供程序。
  • 此外,当您在末尾指定URL路由附加斜杠时,还可以:

    urlpatterns=[
    路径('rolls/',SomeListView.as_view()),]


请务必包含您的react管理员代码。您将如何解决此问题?通过使用DRF处理URL而不使用斜杠,或通过react管理员添加斜杠?@Harikrishnan我已添加了代码。请随时请求任何有助于您帮助我的其他信息。您正在更改URL,这始终是一个坏主意。您应该声明一个新变量,并将其传递给
fetchJson
函数。但是,我不知道您现在有什么问题。您能提供更多详细信息吗?@GildasGarcia没有问题,我能够解决我的错误。再次感谢
import { fetchUtils, Admin, Resource } from 'react-admin';
import simpleRestProvider from 'ra-data-simple-rest';

const httpClient = (url, options = {}) => {
    let finalUrl = `${url}/`;
    return fetchUtils.fetchJson(finalUrl, options);
}
const dataProvider = simpleRestProvider('http://localhost:3000', httpClient);
const httpClient = (url, options = {}) => {

    var pos = url.indexOf('?');
    var b = "/";
    var _url = [url.slice(0, pos), b, url.slice(pos)].join('');

    //url = url + '/';
    return fetchUtils.fetchJson(_url, options);
}

const dataProvider = simpleRestProvider('http://localhost:8000/api/v1/coreapp', httpClient)


const App = () => (    
    <Admin dataProvider={dataProvider}
    <Resource name="subject" list={SubjectList} create={SubjectCreate} edit={SubjectEdit}/>
    </Admin>);

    export default App;
router = DefaultRouter(trailing_slash=False)