我正在尝试使用放置请求来更新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。
答案 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的HttpXsrfTokenExtractor
或service
或文件中。
HttpInterceptor
要获取Cookie,例如constructor(private cookieExtractor:HttpXsrfTokenExtractor){}
令牌
xsrf