Django rest framework Django rest框架&x2B;React管理员:URL反斜杠问题
我有一个django rest api,它实现了视图集,如下所示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的 问题: 从邮递员那里,我可以轻松地
class SubjectViewSet(viewsets.ModelViewSet):
pagination_class = ContentRangeHeaderPagination
queryset = Subject.objects.all()
serializer_class = SubjectSerializer
同样,我的前端也是基于react admin的
问题:
从邮递员那里,我可以轻松地找到终点
- 获取:
- 职位:
- 付诸表决:
- 删除:
<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)