선행 조건 : 작업 환경 셋팅 - 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 |