Django

Componentsが読み込みされない続き(Total:15day50.5h)

相変わらず読み込みされない理由との戦いである。
今回の敵は、なかなかの強さである…

どこからせめて行けばいいのか分からない。

Djangoにリクエストがいってないってことは…

Django側にリクエストがいってないことから、推察していくしかない…

const [error, response] = await this.$api.yearmonth.getSchedule(this.today)

この1行がどこかで動いていないことは間違いない!
awaitの後に書いてあるリクエストのデータが返ってくるまでまってね!って意味だと思ってる。

てことは、this.$api を取得できていないのか、yearmonthのリクエストが取得できていないってことだと推察(名探偵(笑)

ログインの時の動作と見比べてみる

ログイン認証の時のリクエストは、正しく動作しているので比較して原因を探ろうと思う。

  actions: {
    /**
     * ログイン
     */
    login(context: any, payload: any) {
      return $api.authen.doLogin({
          username: payload.username,
          password: payload.password
        })
        .then(response => {
          // 認証用トークンをlocalStorageに保存
          localStorage.setItem("access-token", response.data.access);
          // ユーザー情報を取得してstoreのユーザー情報を更新
          return context.dispatch("renew");
        });
    },

うーん、そういばthisなんてつけてなかったなぁ。
thisってそういえばDjangoでいうselfの意味だったような。そうすると自分自身に、$apiがないとthisってつけてもそんなのないよーってなるってことかな。

まぁ、知らんけど(笑)

import $api from "@/services/index";

const [error, response] = await $api.yearmonth.getSchedule(this.today)

apiをインポートすることとthisをやめて$apiにしてみましたー

さー、どんな結果がでるのでしょうかー!

なんかエラーは、いっぱいあるけどリクエストがされているみたいー

Error: Request failed with status code 404
    at createError (createError.js?2d83:16)
    at settle (settle.js?467f:17)
    at XMLHttpRequest.onloadend (xhr.js?b50d:66)

ただ、他にも山のようにエラーがでています。

とりあえず、リクエストがいっているようなので、URLのパターンとかがちゃんとあっているか確認していきます。

Django ScheduleのURLを修正

間違いがありましたー!

urlpatterns = [
    # 年月トラン作成
    path('yearmonth/new_create/', YearMonthAPI.as_view(), name='yearmonth.create'),
    path('schedule/schedule/year_month/<str:today>', YearMonthGetAPI.as_view(), name='scheudule_table')
]

2行目のURLパターン一致が、なぜかscheduleが2つ重なっています…
これをひとつに変えて再度読み込みしてみます。

AttributeError: 'super' object has no attribute 'list'

親クラスにそんなものないよって感じのエラーですね…
APIViewでなく、ListAPIViewを継承するように変更します。

class YearMonthGetAPI(ListAPIView): 
    serializer_class = YearMonthSerializer

    def get(self, request, *args, **kwargs):
        """
        日付から該当するスケジュールを取得する
        """
        today = self.kwargs['today']
        today = dt.strptime(today, '%Y%m%d')
        return super().list(request, *args, **kwargs)
            
    def get_queryset(self):
        #日付から年月トランの対象レコードを取得する
        current_user = self.request.user
        today = self.kwargs['today']
        today = dt.strptime(today, '%Y%m%d')
        queryset = YearMonth.objects.filter(start_date__lte=today, end_date__gte=today)
        #リクエストユーザーがyearmonth追加権限がない場合、open_flgが未の場合は、データを空で返す
        if current_user.is_superuser == False and queryset[0].open_flg == "未":
            #一般ユーザーで未のものは取得できない
            return None
        else:
            print(queryset)
            return queryset
[23/Dec/2021 08:09:03] "OPTIONS /api/schedule/year_month/20211223 HTTP/1.1" 200 0
[23/Dec/2021 08:09:03] "GET /api/users/info/ HTTP/1.1" 200 571
<QuerySet [<YearMonth: 202201 2021-12-21 2022-01-20 未>]>
[23/Dec/2021 08:09:03] "GET /api/schedule/year_month/20211223 HTTP/1.1" 200 119

やっと、Djangoからはデータが返っているようです。

とりあえず、取得できている構文と同じにしてみる

リクエストがとりあえず、いってるけど受け取りがうまくいっていないと判断して、レスポンスとエラーって必ずかってくるもんだと思ってたけど、ちょいと考え方を変えて完全に、ユーザー情報を取得するときと同じ構文にしました。

  async created() {
    console.log('AAAAAAAAA')
    console.log(this.today)
    $api.yearmonth.getSchedule(this.today).then(response => {
      const items =response;
      console.log(response)
    })
    console.log('BBBBBBBBB')
  }

ちゃんとデータを受け取れてるー!
とりあえず前進した(⌒∇⌒)

ポイント

データの受け取りがよく理解できていないことがわかった!

Django側は、シリアライザーでデータ変換して返してくれることは何となくわかっているのですが、受け取りが理解できていない感じがあることがわかってよかった(⌒∇⌒)

-Django

© 2022 ごろう@縁紡ぐ