새벽_나그네
12시 지난 새벽
새벽_나그네
전체 방문자
오늘
어제
  • 분류 전체보기
    • TIL
    • DevLog
    • Algorithm
    • ComputerScience
    • etc

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • til
  • docker
  • 코딩
  • portfolio
  • 국비지원
  • 프로그래머스
  • Github
  • TodayILearned
  • 내일배움단
  • 내일배움카드
  • 스파르타코딩클럽
  • Selenium 4
  • 내일배움캠프
  • AI트랙
  • 자기주도학습
  • Python
  • 개발일지
  • machine learning
  • 코린이
  • 코딩프로젝트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
새벽_나그네

12시 지난 새벽

DevLog

[Setting]개발 셋팅 후 실습 참고 자료

2022. 3. 10. 13:53

선행 조건 : 작업 환경 셋팅 - Team repo 연결

확인 할 것 : git remote -v 
기대 결과 : 
origin  https://github.com/본인깃아이디/greendoor.git (fetch)              
origin  https://github.com/본인깃아이디/greendoor.git  (push)               
upstream        https://github.com/4-tune-studio/greendoor.git (fetch)
upstream        https://github.com/4-tune-studio/greendoor.git (push) 

기대 결과 나오지 않고 빈칸일 경우 해결 
내용이 없을시 추가 방법 : git remote add 원하는단어(origin이나 upstream이 기본이나 이것은 이름일 뿐입니다 아무 단어나 가능)
내용이 있을시 삭제 방법 : git remote remove (삭제할 것 이름)


-- 실습 목표 : 최종 프로젝트에 내가 만든 앱과 모델 설정이 merge되는 것을 함께 확인하고 이 내용을 내 로컬 저장소에 pull하는 과정까지하여 프로젝트 관리흐름을 보도록 합니다.

-- 실습 순서
1. 앱만들기
2. models.py 추가하기
3. migrate하기
4. 해당 내용을 fork한 나의 저장소에 올리기
5. 나의 저장소에서 팀 저장소로 PR 보내기
6. PR 머지과정 확인하기
7. 머지 반영된 내용 나의 로컬 저장소에 pull하기 
8. 최종결과 나의 fork 저장소에 push하기 

===== 세부 내용 =====
실습 앱 배분
세베루스 스네 Lee 프 : user 앱
크롤희 : 메인 앱, feed 앱
갓현정 : info 앱, product 앱
최고수 : order 앱
나 :plant 앱


1. 앱 만들기

터미널 명령어 : python manage.py startapp 앱이름
- settings.py에 가서 만든 앱을 추가하기

 

2. models.py 추가하기

만든 앱을 우클릭하여 python파일 models 입력하여 생성
밑에 내용 중 공통 사항 내용과 각 앱에 포함되는 내용 추가

#=== 공통 사항 ===
from django.contrib.auth.models import PermissionsMixin, UserManager, AbstractBaseUser
from django.db import models
# Create your models here.

#=== 메인 앱에 포함 ===
class BaseModel(models.Model):
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        abstract = True

#=== user 앱에 포함 ===
class Users(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=30)
    nickname = models.CharField(max_length=30)
    image = models.CharField(max_length=256)
    zipcode = models.IntegerField(blank=True, null=True)
    address = models.CharField(max_length=256, blank=True, null=True)
    phonenumber = models.CharField(max_length=11, blank=True, null=True)

    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    objects = UserManager()

    USERNAME_FIELD = 'email'  # email을 사용자의 식별자로 설정
    REQUIRED_FIELDS = ['username']  # 필수입력값

    class Meta:
        db_table = "users"


class UsersFav(BaseModel):
    class Meta:
        db_table = "usersfav"

#=== feed 앱에 포함 ===
class Feed(BaseModel):
    user_id = models.ForeignKey(Users, on_delete=models.CASCADE, related_name="feed", db_column="user_id")
    image = models.CharField(max_length=256)
    content = models.CharField(max_length=500, blank=True, null=True)

    class Meta:
        db_table = "feed"


class FeedComment(BaseModel):
    user_id = models.ForeignKey(Users, on_delete=models.CASCADE, related_name="feed_comment", db_column="user_id")
    feed_id = models.ForeignKey(Feed, on_delete=models.CASCADE, related_name="feed_comment", db_column="feed_id")
    content = models.CharField(max_length=200)

    class Meta:
        db_table = "feedcomment"


class FeedLike(BaseModel):
    user_id = models.ForeignKey(Users, on_delete=models.CASCADE, related_name="feed_like", db_column="user_id")
    feed_id = models.ForeignKey(Feed, on_delete=models.CASCADE, related_name="feed_like", db_column="feed_id")
    like = models.IntegerField()

    class Meta:
        db_table = "feedlike"


class FeedBookmark(BaseModel):
    user_id = models.ForeignKey(Users, on_delete=models.CASCADE, related_name="feed_bookmark", db_column="user_id")
    feed_id = models.ForeignKey(Feed, on_delete=models.CASCADE, related_name="feed_bookmark", db_column="feed_id")
    bookmark = models.IntegerField()

    class Meta:
        db_table = "feedbookmark"

#=== info 앱에 포함 ===
class Info(BaseModel):
    url = models.CharField(max_length=256)

    class Meta:
        db_table = "info"

#=== plant 앱에 포함 ===
class PlantCategory(BaseModel):
    category = models.CharField(max_length=45)

    class Meta:
        db_table = "plant_category"


class Plant(BaseModel):
    plant_category_id = models.ForeignKey(PlantCategory, on_delete=models.CASCADE, related_name="plant",
                                          db_column="plant_category_id")

    class Meta:
        db_table = "plant"

#=== product 앱에 포함 ===
class ProductCategory(BaseModel):
    category = models.CharField(max_length=45)
    plant_id = models.ForeignKey(Plant, on_delete=models.CASCADE, related_name="product_category", db_column="plant_id",
                                 null=True)

    class Meta:
        db_table = "product_category"


class Product(BaseModel):
    product_category_id = models.ForeignKey(PlantCategory, on_delete=models.CASCADE, related_name="product",
                                            db_column="product_category_id")
    name = models.CharField(max_length=100)
    price = models.IntegerField()
    size = models.IntegerField()
    info = models.CharField(max_length=500)
    qty = models.IntegerField(default=0)
    image = models.CharField(max_length=256)
    image_tag = models.TextField(null=True, blank=True)

    class Meta:
        db_table = "product"

#=== order 앱에 포함 ===
class OrderBasket(BaseModel):
    user_id = models.ForeignKey(Users, on_delete=models.CASCADE, related_name="order_basket", db_column="user_id")
    product_id = models.ForeignKey(PlantCategory, on_delete=models.CASCADE, related_name="order_basket", db_column="product_id")
    qty = models.IntegerField()

    class Meta:
        db_table = "order_basket"


class Order(BaseModel):
    user_id = models.ForeignKey(Users, on_delete=models.CASCADE, related_name="order", db_column="user_id")
    status = models.IntegerField(default=2) # 처리중-2, 완료-1, 실패-0

    class Meta:
        db_table = "order"


class OderProduct(BaseModel):
    order_id = models.ForeignKey(Order, on_delete=models.CASCADE, related_name="order_product", db_column="order_id")
    product_id = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="order_product", db_column="product_id")
    qty = models.IntegerField()

    class Meta:
        db_table = "order_product"


3. migrate하기 - 밑의 명령어들을 확인해보세요

마이그레이션 해서 디비 구조 stage에 올리기: python manage.py makemigrations
디비에 올린 구조 반영하기 : python manage.py migrate

==== 만약 문제가 생기거나 makemigrations이 잘 되지 않을때
마이그레이션 된 내용 확인하기 : python manage.py showmigrations
문제있는 앱 마이그레이션 제거하기 : python manage.py migrate --fake '앱이름' zero


4. 해당 내용을 fork한 나의 저장소에 올리기

git add .
git commit -m "추가 - 00앱, 00앱, 00앱 모델, 00앱 모델 #번호"
git push origin main 

위에서 origin은 자기가 fork한 저장소


5. 나의 저장소에서 팀 저장소로 PR 보내기

- git hub를 켜서 PR 실습을 해봅니다.


6. PR 머지과정 확인하기

- 직접 화면 공유할 예정


7. 머지 반영된 내용 나의 로컬 저장소에 pull하기 

git pull upstream main 

위에서 upstream은 팀 깃 저장소 주소


8. 최종 결과 나의 fork저장소에 push하기 

git push origin main 

.

저작자표시 비영리 변경금지 (새창열림)

'DevLog' 카테고리의 다른 글

[Portfolio] GitHub Pages를 이용하여 Gatsby Site 무료로 배포하기  (2) 2022.04.21
[WIL]2203.2nd  (1) 2022.03.13
[Setting]개발환경 셋팅 A to Z  (0) 2022.03.09
[WIL]2203.1ST  (1) 2022.03.06
[PYTHON] 가상환경 사용하기  (0) 2022.02.10
    'DevLog' 카테고리의 다른 글
    • [Portfolio] GitHub Pages를 이용하여 Gatsby Site 무료로 배포하기
    • [WIL]2203.2nd
    • [Setting]개발환경 셋팅 A to Z
    • [WIL]2203.1ST
    새벽_나그네
    새벽_나그네
    IT, 프로그래밍, 정보, 스마트스토어

    티스토리툴바