登录后在Django rest framework / Angular2 bug中获取单个对象

时间:2016-12-19 09:55:13

标签: django angular django-rest-framework

我正在构建Django + Angular2项目。

我有侧边栏,需要在Settings添加/users/{{ user.id }},它会在与bug一起使用时发送到<li *ngFor="let user of users"><a routerLink="/users/{{ user.id }}" style="cursor: pointer">Settings</a></li> ,当我登录时,这个:

for loop

不会显示,因为getUsers() { let headers = new Headers(); headers.append('Content-Type', 'application/json'); let authToken = localStorage.getItem('auth_token'); headers.append('Authorization', `JWT ${authToken}`); return this.http .get(this.apiURL, { headers }) .toPromise() .then(res => res.json()); } 不会有任何数据。如果我刷新页面,它将显示在侧边栏中,并将完美。主要思想是为授权用户打开设置。

这就是我获得用户的方式:

class UserViewSet(viewsets.ModelViewSet):

    serializer_class = UserSerializer

    def get_queryset(self):
        user = self.request.user
        queryset = User.objects.filter(id=user.id)

        return queryset

    queryset = User.objects.filter(id=None)

问题是我需要使用for循环,因为在django框架中我过滤对象并获取项目列表。实际上我过滤它们只是为了获得一个当前登录的用户(来自views.py的代码):

for loop

是否有办法只获得一个不是数据列表的对象,而不是在角度中使用ngOnInit(): void { this.userService .getUsers() .then(users => this.users = users) } (可能会修复错误)。或者也许你可以解释我并说出如何解决这个问题,即设置消失并仅在刷新后显示。实际上我认为我肯定会在错误的组件或错误的方式中使用getUsers函数。

我的app.component.ts:

gradle clean build

我不确定问题出在哪里以及为什么在登录循环后没有数据,所以我不知道你需要什么样的代码来帮助我。如果需要更多代码,请问。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,问题是我使用ngOnInit()并且它在用户未登录时第一次加载并提供html空变量,因此无法循环。 目前我使用ngDoCheck()检查是否是会话。

示例:

this.isSession = localStorage.getItem('auth_token');

   if ((this.isSession != null) && (this.i == false)){
      this.userService
      .getUsers()
      .then(users => this.users = users);
       this.i = true;
   }

}