[1st Project] Brokurly?! ver 0.5-機能定義書&.csv


  • 機能定義書リンク->機能の定義2
  • 1.機能定義書

  • 機能リストとも呼ばれ、最初に聞いたときは、すべての機能を実現した後に書かれた報告書だと思っていましたが、役割は正反対でした.
  • 各機能は、どのような関係に基づいて生成され、どのurl名、class名、func名などを使用するかは、「リスト」のように詳細に書かれます.
    (実際にAPIの実施中に開く、見落とした部分が発見され充填されている)
  • 機能定義書を作成する過程で、各機能は同時にロール割り当てを行い、本プロジェクトでは、私の部分は:
    1)正規表現をモジュール化して原価入力ビューに適用する
    :ValidationErrorをキャプチャするためのvalidator.pyの作成
    2)実装装飾器
    :decoratorを使用して、ログインするページごとにトークンを確認および検証する関数を作成し、コードの読み取りと操作の利便性を向上させます.
    3)MainPage APIの実現
    :今回企画されたホームページは、製品の簡略情報の羅列形式であり、各製品のイメージも導入される.
  • validatorは一度やったことがありますが、decoratorはやりたいので、ホームページAPIは全く知らない新しいタイプの挑戦です.
  • 2. .csv & uploader.py

    "uploader.py code 전문"
    import os, django, csv, sys
    
    from products.models import *
    
    # system setup
    os.chdir('.')
    print('Current dir의 경로 : ', end=''), print(os.getcwd())
    # os가 파악한 현재 경로를 표기
    print('os.path.abspath(__file__)의 경로 : ',os.path.abspath(__file__))    
    # 현재 작업중인 파일을 포함 경로를 구체적으로 표기
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    print('BASE_DIR=', end=''), print(BASE_DIR)
    print('똑같나? 다르나?', BASE_DIR == os.getcwd())
    
    sys.path.append(BASE_DIR)  
    # sys 모듈은 파이썬을 설치할 때 함께 설치되는 라이브러리 모듈이다. 
    # 이 sys 모듈을 사용하면 파이썬 라이브러리가 설치되어 있는 디렉터리를 확인할 수 있다.
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'brokurly.settings') 
     # python이 실행될 때 DJANGO_SETTINGS_MODULE라는 환경 변수에 현재 프로젝트의 
     settings.py 파일 경로를 등록
    
    django.setup() 
    # python manage.py shell 을 실행하는 것이랑 비슷한 방법이다. , 파이썬 파일에서도 django를 실행 시킬수 있다.
    
    menu = './menus.csv'
    category = './categories.csv'
    product = './products.csv'
    image = './images.csv'
    # insert data while reading csv file into table
    # open csv file and insert row data in MySQL
    
    # Menu Table
    def insert_menu():    
        with open(menu, newline='', encoding='utf8') as csvfile:
            data_reader = csv.DictReader(csvfile)
            for row in data_reader:
                menu_id = Menu.objects.create(
                    name = row['menu'] )
        print('MENU DATA UPLOADED SUCCESSFULY!')    
    
    def insert_category():    
        with open(category, newline='', encoding='utf8') as csvfile:
            data_reader = csv.DictReader(csvfile)
            for row in data_reader:
                menu_id = Menu.objects.get(name=row['menu'])
                Category.objects.create( name = row['category'],menu = menu_id)
    
        print('CATEGORY DATA UPLOADED SUCCESSFULY!')    
    
    def insert_products():    
        with open(product, newline='', encoding='utf8') as csvfile:
            data_reader = csv.DictReader(csvfile)
            for row in data_reader:
                category_id = Category.objects.get(name=row['category'])
                
                Product.objects.create(
                    name         = row['name'],
                    price        = row['price'], 
                    introduction = row['introduction'], 
                    description  = row['description'], 
                    unit         = row['unit'], 
                    shipping     = row['shipping'], 
                    package      = row['package'], 
                    origin       = row['origin'], 
                    weight       = row['weight'], 
                    stock        = row['stock'],
                    category     = category_id
                ) 
                  
            print('PRODUCT DATA UPLOADED SUCCESSFULY!')    
    
    def insert_image():    
        with open(image, newline='', encoding='utf8') as csvfile:
            data_reader = csv.DictReader(csvfile)
            for row in data_reader:
                print(row)
                product_id = Product.objects.filter(name=row['name'])
                
                Image.objects.create(url = row['url'],product = product_id[0])
    
        print('CATEGORY DATA UPLOADED SUCCESSFULY!') 
    
    insert_menu()
    insert_category()
    insert_products()
    insert_image()
    ->DBをひっくり返したのは11回くらい.
    ->イメージテーブルを作成していないことに気づきました.モデル.pyの再記述やgit push後のmergeの取得など、複数のバーストイベントが発生したが、最終的にはスタックデータの入力に成功した.
    ->もちろん、空き地でコードを書くことができないので、グーグル神の助けで導入した後、3人で一日中顔を合わせて、1行1行のコード解剖ショーを行いました.
    ->要約すると、Excelファイルに大量のデータを入力し、csv形式で保存し、Pythonを使用してアップロード目的で作成したコードをDBに一括入力します.
    ->大量のコードは一度に入力されるので、Excelでフォントを生成しないように注意し、アップロードコードを作成するときにも、一致するテーブルとフィールドに正確に配置されているかどうかに注意してください.
    ->親テーブルを参照するテーブルは、データベースのクラッシュを回避するためにコード構成に接続する必要があります.