サブプロジェクト実施の詳細


Git Repository


このプロジェクトのGit Repository

1.ココア会員登録

FrontEndがKACAからのタグを送信すると、ココア豆に設定されたURLにタグが戻されます.
送信トークンがKACAユーザ情報を受信し、get_or_createを介して会員DBに存在するユーザが
新規登録とともにログインすると、トークンが取得されます.
既存のユーザーの日は、ログイン後にトークンのみが発行されます.
詳細なインプリメンテーションの代わりに、作成した対応する記事リンクを使用します。

2.icotainsを使用した検索機能


  • Redibooksのホームページを検索すると、下の図のように大文字と小文字を区別せずにデータが照会されます.Djangoでクエリーフィルタを使用する場合は、containsおよびicontainsを使用します.icontainsは、大文字と小文字を区別しないフィルタリングに使用される.

  • 検索の内容はkeywordQuery Parameterで、本と作者の名前の中にkeywordが含まれているかどうかicontainsを用いて濾過を行った.

  • 検索内容を含む本や著者がいなければ、データは一切なく、これらのデータも反映されます.
    keyword = request.GET.get('keyword')
    ...
    for author in Author.objects.filter(name__icontains=keyword)
    for book in Book.objects.filter(main_name__icontains=keyword)

    3.get or createを使用してコードを簡略化する


    以前は、コードを記述する際に、既存のデータを照会し、Model.objectsにアクセスして検証を継続する必要があった場合があります.以下に示します.
    次に、最初に作成したコードを示します.
    #로그인 유저가 특정 작가를 구독한 상황에서 구독을 한 번 더 눌렀다면(구독 취소했다면)
    if Subscribe.objects.filter(author_id=author_id, user_id=request.user.id).exists() :
        Subscribe.objects.filter(author_id=author_id, user_id=request.user.id).delete()
        return jsonresponse({'message':'해당 작가 구독 취소 완료'}, status=201)
    
    #DB에 구독한 기록이 없으면 생성
    Subscribe.objects.create(author_id=author_id, user_id = request.user.id)
    return jsonresponse({'message':'해당 작가 구독 추가 완료'}, status=201)
    しかしながら、get_or_createにより、同じアクセス回数でもコードが簡略化される.get_or_createは、アクセス時に生成され、存在しない場合はクエリーされ、それに応じてステータスが返されます.
    データが存在する場合、getであればFalseを返し、存在しない場合はcreateを返す.
    したがって、コードはステータスに応じて追加/削除できます.
    subscribe, state = Subscribe.objects.get_or_create(
        author_id = author_id,
        user_id   = request.user.id
    )
    
    if not state :
        subscribe.delete()
        return JsonResponse({'message' : 'delete success'}, status=201)

    4.fakerライブラリを使用したデータの作成


    最初のプロジェクトでは、csvファイルを使用してデータを作成します.
    次に、Trueライブラリを使用して、2回目の実行時に大量のランダムデータを生成します.
    import os
    import django
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'ridibooksl.settings')
    
    django.setup()
    
    from faker    import Faker
    from datetime import date, datetime, timedelta
    
    from users.models    import User
    from products.models import Book, Rating, ViewCount
    from django.db       import transaction
    
    fake = Faker()
    
    with transaction.atomic() :
        Rating.objects.bulk_create([Rating(book_id=1, user_id=1, 
        rating=fake.pyint(min_value=1, max_value=5)) for _ in range(30)])

  • まず、fakerを介してオペレーティングシステムに登録されている環境変数にアクセスする.
    名称はos.environ.setdefaultで、登録DJANGO.SETTINGS.MODULEを示す.
    そしてridibooksl.settingsで、データINSERTの基本設定を完了します.django.setup()ライブラリはfakerコマンドでインストール、
    使用の準備をする.
    次いで、pip install fakerおよびfrom faker import Fakerクラスが変数importに代入される.

  • スコアデータの生成を例に挙げます.
    異なるモデルでデータを作成するために、Fakerを設定しました.fakeライブラリのtransactionメソッドを使用して、最小値と最大値が1~5の間のスコアデータを生成します.
    間の値をランダムに生成できます.