尝试从django rest框架获取产品详细信息。然而,无论何时尝试:
baseurl = "http://127.0.0.1:8000"
httpHeaders = new HttpHeaders({'Content-Type': 'application/json'})
constructor(private http: HttpClient) { }
getAllProducts(): Observable<any>{
return this.http.get(this.baseurl +'/product/',
{headers: this.httpHeaders})
}
getProductDetails(slug: string): Observable<any>{
return this.http.get<any>(`${this.baseurl}/product/${slug}/`, {headers: this.httpHeaders})
}
我收到一个错误,说:
Not Found: /product/[object Object]/
[20/Oct/2021 21:54:32] "GET /product/[object%20Object]/ HTTP/1.1" 404 23
django后端视图:
class Product(generics.RetrieveUpdateDestroyAPIView):
lookup_field = "slug"
queryset = Product.objects.all()
serializer_class = ProductSerializer
django url:
urlpatterns = [
path("", views.ProductListView.as_view(), name="product"),
path("<slug>/", views.Product.as_view(), name="product_detail"),
]
发布于 2021-10-20 19:43:19
在你的Django's url.py中,你应该有一些东西。
path('api/product/', some_view),
path('api/product/<slug>', some_other_view),
请注意接口的前缀。
请不要将baseURL作为完整url提供,而应创建一个代理配置文件url,如下所示:
{
"/api/*": {
"target": "http://127.0.0.1:8000",
"secure": false,
"logLevel": "debug"
}
}
请注意,前缀api -这是必不可少的-可以是其他东西,但它是您的代理使用的契约。
然后更新你的angular.json
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "yourapp:build",
"proxyConfig": "src/proxy.conf.json"
},
"configurations": {
"production": {
"browserTarget": "yourapp:build:production",
"proxyConfig": "src/proxy.conf.json"
},
"development": {
"browserTarget": "yourapp:build:development",
"proxyConfig": "src/proxy.conf.json"
}
},
"defaultConfiguration": "development"
},
现在,如果您使用ng serve,您可以运行:
ng serve --proxy-config src/proxy.conf.json
最后,在您的Angular服务中作为基本url所需的全部内容是:
this.baseurl = '/api/product';
现在你可以调用你的任何服务http方法,因为Angular从代理知道你的服务器的配置,并且Django提供具有相同前缀的路径。请记住,Django要求POST请求使用正斜杠,因此您可能需要根据Django Documentation在settings.py中配置APPEND_SLASH
https://stackoverflow.com/questions/69655319
复制