python - 将请求 403 错误 django restframework
问题描述
我正在使用 redux 创建一个带有 react-js 的 Web 应用程序,并使用带有 django rest 框架的 python django 和后端创建一个 Web 应用程序。
对于身份验证,我使用的是 JWT。
我面临的问题是从前端发送请求时出现 403 错误。
我已经检查了后端所有配置都已设置,但仍然出现此错误。
请检查以下代码。
模型:
class StatusQuerySet(models.QuerySet):
pass
class StatusManager(models.Manager):
def get_queryset(self):
return StatusQuerySet(self.model,using=self._db)
class Apptype(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
appType = models.CharField(max_length=50)
objects = StatusManager()
def __str__(self):
return self.appType
序列化器:
class AppTypeSeriializer(serializers.ModelSerializer):
class Meta:
model = Apptype
fields = [
'user',
'id',
'appType'
]
read_only_fields = ['user','id']
意见
class AppTypeStatusAPIDetailView(
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.RetrieveAPIView):
lookup_field = 'id'
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
serializer_class = AppTypeSeriializer
queryset = Apptype.objects.all()
def put(self,request, *args, **kwargs):
print("Value of = ",request.data.get("appType"))
return self.update(request, *args, **kwargs)
def patch(self,request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self,request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
网址
urlpatterns = [
url(r'^appType/$',AppTypeStatusView.as_view()),
url(r'^appType/(?P<id>\d+)/$',AppTypeStatusAPIDetailView.as_view()),
]
权限
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
JWT_AUTH = {
'JWT_ENCODE_HANDLER':
'rest_framework_jwt.utils.jwt_encode_handler',
'JWT_DECODE_HANDLER':
'rest_framework_jwt.utils.jwt_decode_handler',
'JWT_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_payload_handler',
'JWT_PAYLOAD_GET_USER_ID_HANDLER':
'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
'JWT_RESPONSE_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_response_payload_handler',
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_AUTH_COOKIE': None,
}
动作触发时的前端代码。
export const updateAppTypeData = (appData) => async dispatch => {
const token = localStorage.getItem('token')
console.log(token)
const headers = {
"Content-Type": "application/json",
"Authorization": "JWT "+ token,
}
const data = {"appType":"Kilo"} // Custom send
const response = await axios.put('http://localhost:8000/api/posts/appType/1/',JSON.stringify(data),headers)
//dispatch({ type : FETCH_APP_TYPE , payload: response.data });
};
错误 :
解决方案
我认为您使用axios.put方法错误。
您需要传递包含其中命名的键的配置headers
。您当前正在将标题直接作为第三个参数传递。
解决方案:
axios.put(
'http://localhost:8000/api/posts/appType/1/',
JSON.stringify(data),
{
headers: headers
}
)
推荐阅读
- python-3.x - 确保用户不输入空格字符串的 try-except 子句的问题
- ios - 自定义推送通知设计
- html - 如何在 next.js 中覆盖 react-skylight min-height?
- apache-nifi - 在 Jolt 如何修改输出 json 的键并从输入中复制值
- ubuntu-18.04 - boomi atom 正在运行但在浏览器上不可见
- ios - 无法从 Facebook 帐户工具包中获取 SMS 代码
- arm - LAUNCHXL2-RM57L:Lwip 不适用于 GCC 编译器和 IAR 编译器
- php - 使用 SQL 查询获取所有匹配的行
- android - 使用 64 位变体打包游戏
- python - 主页的 Django 上下文值