在我的 api 中我有:
$request->validate([
'firstname' => 'required',
'lastname' => 'required',
'username' => 'required|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required'
]);
Run Code Online (Sandbox Code Playgroud)
然后我发现了错误axios with:
.catch(error=>{
console.log("Error: " + error.response.data.errors)
})
Run Code Online (Sandbox Code Playgroud)
然而它会给我:Error: [object Object]
如果我故意输入username数据库中已经存在的 a ,然后将 catch 更改为
.catch(error=>{
console.log("Error: " + error.response.data.errors.username)
})
Run Code Online (Sandbox Code Playgroud)
它会显示Username is already taken这是一件好事。
这意味着我必须手动指定error.response.data.errors.<x error>才能显示消息,因为如果我输入data.errors.username然后电子邮件是验证中的问题,控制台会说Error: undefined这是有道理的,因为没有data.errors.usernamebut data.errors.email。
有没有一种方法可以访问并显示返回的错误而无需手动指定它?万分感谢!
这是我的views.py:
class LanguageViewSet(viewsets.ModelViewSet):
queryset = Language.objects.all().order_by('name')
serializer_class = LanguageSerializer
class FrameworkViewSet(viewsets.ModelViewSet):
queryset = Framework.objects.all()
serializer_class = FrameworkSerializer
class SelectedLanguageViewSet(viewsets.ModelViewSet):
queryset = Language.objects.all()
serializer_class = FrameworkSerializer
def get_queryset(self):
request = self.request
language_id = request.query_params.get('language_id')
language = Language.objects.filter(id=language_id)
self.queryset = language.framework_set.all()
return self.queryset
Run Code Online (Sandbox Code Playgroud)
还有我的urls.py:
router = routers.DefaultRouter()
router.register(r'languages', views.LanguageViewSet)
router.register(r'frameworks', views.FrameworkViewSet)
router.register(r'language/<int:language_id>', views.SelectedLanguageViewSet)
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
Run Code Online (Sandbox Code Playgroud)
然而,只有languages和frameworks工作。language不存在。这是因为get_queryset? 我什至尝试删除<int:language_id>url 参数中的 ,但它仍然不会显示。
编辑:请
原谅我的天真,我对 …
这是我的基地App.vue,里面有router-view:
<template>
<div>
<Navbar/>
<div class="container-fluid">
<router-view></router-view>
</div>
</div>
</template>
<script>
import Navbar from './components/Navbar.vue';
export default {
name: 'App',
components: {
Navbar
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
在 中Navbar.vue,我有一个方法:
methods: {
getLoggedStatus(){
console.log('asdasd')
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我有一个Login.vue加载到router-view. 我想getLoggedStatus()从Navbar.vue内部进入Login.vue。我怎样才能实现这个目标?
Navbar我尝试在以下位置添加对标签的引用App.vue:
<Navbar ref="navvy"/>
Run Code Online (Sandbox Code Playgroud)
并调用Login.vue:
this.$refs.navvy.getLoggedStatus()
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
我有一个数组:
for (i = 0; i < this.platforms_values.length; i++){
platform_project: [
{owner_id: owner_id},
{project_id: project_id},
]
platform_project.push(this.platforms_values[i])
}
Run Code Online (Sandbox Code Playgroud)
但是它给了我这个:
platform_project is not defined
Run Code Online (Sandbox Code Playgroud)