首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >API请求说找不到

API请求说找不到
EN

Stack Overflow用户
提问于 2021-10-21 02:59:09
回答 1查看 49关注 0票数 1

尝试从django rest框架获取产品详细信息。然而,无论何时尝试:

代码语言:javascript
代码运行次数:0
运行
复制
  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})
  }

我收到一个错误,说:

代码语言:javascript
代码运行次数:0
运行
复制
Not Found: /product/[object Object]/
[20/Oct/2021 21:54:32] "GET /product/[object%20Object]/ HTTP/1.1" 404 23

django后端视图:

代码语言:javascript
代码运行次数:0
运行
复制
class Product(generics.RetrieveUpdateDestroyAPIView):
    lookup_field = "slug"
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

django url:

代码语言:javascript
代码运行次数:0
运行
复制
urlpatterns = [
    path("", views.ProductListView.as_view(), name="product"),
    path("<slug>/", views.Product.as_view(), name="product_detail"),
]
EN

回答 1

Stack Overflow用户

发布于 2021-10-21 03:43:19

在你的Django's url.py中,你应该有一些东西。

代码语言:javascript
代码运行次数:0
运行
复制
path('api/product/', some_view),
path('api/product/<slug>', some_other_view),

请注意接口的前缀。

请不要将baseURL作为完整url提供,而应创建一个代理配置文件url,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
{
    "/api/*": {
        "target": "http://127.0.0.1:8000",
        "secure": false,
        "logLevel": "debug"
    }
}

请注意,前缀api -这是必不可少的-可以是其他东西,但它是您的代理使用的契约。

然后更新你的angular.json

代码语言:javascript
代码运行次数:0
运行
复制
    "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,您可以运行:

代码语言:javascript
代码运行次数:0
运行
复制
ng serve --proxy-config src/proxy.conf.json

最后,在您的Angular服务中作为基本url所需的全部内容是:

代码语言:javascript
代码运行次数:0
运行
复制
this.baseurl =  '/api/product'; 

现在你可以调用你的任何服务http方法,因为Angular从代理知道你的服务器的配置,并且Django提供具有相同前缀的路径。请记住,Django要求POST请求使用正斜杠,因此您可能需要根据Django Documentationsettings.py中配置APPEND_SLASH

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69655319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档