从 fastapi 官方的示例代码修改,现在想删除一条数据,总是返回 403 求教是什么原因?
后端:
@router.delete("/{user_id}", response_model=schemas.User)
def delete_user(
user_id: int,
*,
db: Session = Depends(deps.get_db),
user_in: schemas.UserDelete,
current_user: models.adminUser = Depends(deps.get_current_active_superuser),
) -> Any:
user = crud.user.remove(db, user_id=user_id)
if user is None:
raise HTTPException(
status_code=404,
detail="User not found",
)
return user
# remove 方法
def remove(
self, db: Session, user_id: int
) -> adminUser:
db_user = db.query(adminUser).filter(adminUser.id == user_id).first()
if db_user:
db.delete(db_user)
db.commit()
db.flush()
return db_user
前端:
async actionDeleteUser(context: MainContext, payload: IUserDelete) {
try {
const loadingNotification = { content: 'delete', showProgress: true };
commitAddNotification(context, loadingNotification);
const response = (await Promise.all([
api.deleteUser(context.rootState.main.token, payload.id),
await new Promise((resolve, reject) => setTimeout(() => resolve(), 500)),
]))[0];
} catch (error) {
await dispatchCheckApiError(context, error);
}
},
1
juventusryp OP 用 postman 在 headers 添加了 access_token 是可以删除的
求问,如何在前端的代码中添加 access_token |
2
renmu123 2020-08-04 23:57:10 +08:00 via Android
你在 docs 里的授权抓一下请求看看,前端我记得是添加在 authentication header 中,前端可以用拦截器拦截 request 统一在 header 中添加这个字段,你可以搜一下,网上到处都是
|
3
ncjcharlie 2020-08-05 00:17:48 +08:00 via iPhone
postman 是可以直接输出各平台代码的 直接看看 js 的几个就好了
|
4
juventusryp OP 找到原因了,是因为用 axios 发送 delete 请求时候,需要发送一个 body 字段,为空就行。
如果不发送会提示{loc: ["body"], msg: "field required", type: "value_error.missing"} 现在问题转化为官方的示例代码如果添加这个字段,自己按照代码比葫芦画瓢总是失败 ``` async deleteUser(token: string, userId: number, data) { return axios.delete(`${apiUrl}/api/v1/users/${userId}`, data, authHeaders(token)); }, ``` |