从 Vuejs 到 Django REST 框架的 Axios POST 请求
Posted
技术标签:
【中文标题】从 Vuejs 到 Django REST 框架的 Axios POST 请求【英文标题】:Axios POST request from Vuejs to Django rest framework 【发布时间】:2019-11-20 07:39:16 【问题描述】:我用 vuejs 和 django rest 框架创建了一个 rest api。问题是当我提出发布请求时。 通过获取请求,他可以工作,但不能通过发布请求。
axios
.get('http://127.0.0.1:8000/api/users/')
.then(response => (this.info = response.data))
axios
.post('http://127.0.0.1:8000/api/users/',
params :
email : "test@gmail.com",
username : 'test'
)
.then(response => (this.info = response.data))
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
urlpatterns = [
path('', include(router.urls)),
]
我的 get 请求有效,但我的 post 请求无效。在我的控制台中,我有:http://127.0.0.1:8000/api/users/?username=test&email=test@gmail.com 400(错误请求) 当我观看网络时,我有 "username":["This field is required."]
我不明白为什么会出现这个错误。
【问题讨论】:
【参考方案1】:axios 中的参数用于查询字符串
试试
axios
.post('http://127.0.0.1:8000/api/users/',
email : "test@gmail.com",
username : 'test'
)
.then(response => (this.info = response.data))
发布时,您不想将信息作为查询字符串发送,而是作为数据发送。
另一个签名是
axios(
method: 'post',
url: 'http://127.0.0.1:8000/api/users/',
data:
email : "test@gmail.com",
username : 'test'
).
.then(response => (this.info = response.data))
您可以在此处查看文档: https://github.com/axios/axios#example
所以你得到“用户名是必需的”的原因是你的服务器正在读取数据/有效负载,而不是查询字符串。它没有找到任何发送的用户名并让您知道。
【讨论】:
没问题,如果这对您有用,那么我将不胜感激您将答案标记为正确答案。以上是关于从 Vuejs 到 Django REST 框架的 Axios POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何从 django rest 框架访问 jwt 令牌到 Angular 前端
在 GCP App Engine 上部署 Django、Django REST Framework 后端和 VueJS + webpack 前端(标准)