使用Django CSRF向Django发送Angular PUT请求

时间:2019-08-12 10:02:34

标签: django angular csrf put

我正在尝试使用放置请求来更新django sqlite数据库中的条目。我收到很多“禁止”和“ 403”错误。我认为这是因为我找不到从django附加CSRF令牌的方法。

我在这里已经看到了一些以前的答案,但是它们来自Angular的较旧版本,我不知道如何编辑它们以与我的代码一起使用。 (说要把它们放到我找不到的module.config()块中。)

组件HTML:

<button class="btn btn-warning shadow-sm" (click)="update(project)">Update</button>

组件TS:

update(project: Project) {
    this.projectService.updateProject(project).subscribe();
}

服务TS:

updateProject(project: Project) {
    var httpudpdate: any = this.http.put('/ph/projects/'+project.id, project)
    return httpudpdate
}

我想在django中更新条目,但我只是遇到错误,禁止和403。

2 个答案:

答案 0 :(得分:0)

只需将HttpClientXsrfModule导入到您的项目中,它将负责读取cookie并将其作为每个请求中的自定义标头重新发送。

Cookie和标头名称不是标准名称,而是约定,因此,如果默认名称与后端名称不匹配,则可以对其进行配置。

碰巧,Django的cookie名称和标头名称与Angular默认名称不匹配,因此必须像这样导入HttpClientXsrfModule withOptions

import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';

@NgModule({
    ...
    imports:[..., HttpClientXsrfModule.withOptions({ cookieName: 'csrftoken', headerName: 'X-CSRFToken' }), ...]
    ...
})

答案 1 :(得分:0)

.automatic导入您的HttpClientXsrfModule

app.module.ts

<!-- app.module.ts --> import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http'; imports:[...,HttpClientXsrfModule,...] 注入您要在其中使用Cookie的HttpXsrfTokenExtractorservice或文件中。

HttpInterceptor

要获取Cookie,例如constructor(private cookieExtractor:HttpXsrfTokenExtractor){} 令牌

xsrf
相关问题