[장고기초]4주차

2022. 9. 28. 00:09스파르타코딩클럽[AI트랙 3기]/장고

4-1 4주차 이번주 배울 것

팔로우, 팔로잉/ 팔로워 몇명인지 

1)데이터베이스 테블간의 관계

2)관계만들기 연습

3)ORM모델 수정

4)팔로잉/팔로우 기능 만들기

 

4-2 데이터베이스 관계

팔로우/팔로잉은 새로운 데이터베이스 관계를 나타냄.

 1)one - to - many

하나가 여러개랑 대응되는 것. 

글쓰기 모델과 관련 : usermodel은 사용자 모델, tweet모델은 글쓰기 모델. tweet모델의 author은 작성자. 한개의 글에는 무조건 작성자 한사람만 있음. 대부분 서비스에서는 한개글에 하나의 사용자 할당. 반대로 한명의 사용자는 여러개 글을 상요 가능. 

2)one - to - one

하나는 하나에만 대응.

유저모델과 프로필을 보고 비교. 하나의 사용자당 프로필클래스는 하나만 있을 수 있도록하는 것. 

3)many -to - many

여러개가 여러개에 대응.

피자는 여러개 토핑 가능. 반대로 올리브(토핑)은 여러개 피자에 들어갈 수 있음.

 

4-3 many - to - many 연습을 위한 앱 생성

앱생성 + 연결

1)앱 생성

파이참실행>서버 중지 >터미널켜기 > 새로운 앱 만들기

django-admin startapp restaurant >> 중간에 앱 생성 완료. 이제 앱 생성된 것을 장고에게 알려줌 >

2)앱 연결

myspartasns>settings.py

가장 상단에 installed_apps에 방금 생성한 'restaurant' 넣어주고 ,

 

4-4 many-to-many 모델 등록하기(연습-피자/토핑)

mtm은 서로 많은 것을 가질 수 있음. 

코드스니펫 복사 > restaurant>models.py

터미널에서 make migrations, migrate 해줌.그럼 오른쪽 디비 열어서 새로고침 확인. 테이블 생성된 것 모델 적용 완료.

편하게 보기 위해 admin에 추가 > admin.py 

레스토랑의 admin.py 

from.models import MyTopping, MyPizza

 

admin.site.register(MyPizza)

admin.site.register(MyTopping)

서버키고 실행전 하나 더해야함. 우리 모델을 장고랑 합쳐서 superuser가 없음. 관리자 계정 파기

터미널 > python manage.py createsuperuser 하고 내용 적기. 

>우측상단 재생버튼으로 장고 실행.> admin으로 들어가기.mytopping에서 add 하면 저장 오류남. 디비에서 어드민 계정이 좀 잘못된 경우가 있음. 파이참 들어가서 서버 중지.왼쪽에 리스트보면 db.sqlite3를 삭제해줌. > 데이터베이스를 지움. 

새로 생성 : 각각 파일에서 작업. (migrations에서 init.py 빼고 지워줌) 오른쪽 디비도 오른쪽마우스 눌러서 remove. 

다시한번 마이그레이션, 마이그레이트, 슈퍼유저만들기 

다시생긴 db.sqlite3를 오른쪽에드래그 해줌. < 슈퍼계정만들고 다시 실행. 아까랑 같이 mytopping 에서 여러가지 추가.mypizza에서 add해서 도미노라고 이름지정하고 여러개 토핑 추가 가능. 데이터를 많이 만들어서 활용.

 

4-5 django shell로 mtm 모델 확인해보기

토핑들은 건들일 것 없음. 피자를 만듬. 피자 > 도미노 > 치즈, 치킨 > save 

피자헛 추가하고 치즈,페퍼로니, 올리브 > save

파파존스 추가하고 치즈, 페퍼로니, 피망 > save

djangoshell 사용 > 서버 중지 > 터미널 : python manage.py shell

우리 프로젝트에 있는 모든 것을 추가하고 뺄수 있음. 장고쉘은 강력한 툴

>>>from resuatrant.models import MyTopping, MyPizza

>>>MyPizza.objects.all()

하면 피자 전체 데이터를 불러옴. 

>>>MyPizza.objects.get(pizza_name=="도미노")

하면 피자 하나의 데이터를 불러옴.

이제 각 피자안의 토핑 불러오기

>>>MyPizza.objects.get(pizza_name="도미노").pizza_topping.all()

하면 토핑 다불러옴.

이제 반대로 토핑에서 내가 들어가있는 피자를 다 불러오기

>>>MyTopping.objects.all()

하면 토핑이 다 나옴.

이제 각 토핑별로 하나씩 출력

>>>MyTopping.objects.get(topping_name='치즈')

각각토핑이 들어가있는 피자를 불러오기

>>>MyTopping.objects.get(topping_name='치즈').my_pizza_set.all()

하면 치즈가 들어있는 피자 다 나옴. 만약 원투매니면 매니에서 불러올 수 가 없음. 그러나 이렇게 다중으로 불러올 수 있음. 서로 참조하는 기능이 있다. 이렇게해서 팔로우,팔로워하는 기능을 이용.

 

4-6 mtm 모델 만들어보기(실전-팔로우/팔로잉)

mtm이라는 filed를 유저모델 안에 만들어줌. 

파이참> 유저앱>models.py 에 몇가지 추가(모델바꿀때는ㅔㅛ소 서버 꺼져있어야함)

from django.conf import settings #from mySpartaSns import settings에서 바로 가져와도 되지만 장고에게 일을 시킴

class UserModel에 bio 밑에 follow = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='folowee')>사용자가 사용자 모델을 팔로우, setting안의 auth_user_model을 불러옴(우리의 유저모델) >>간단하게 follow 필드안에 들어가는 정보는 사용자 정보라는 이야기. 

>user모델 마이그레이션, 마이그레이트해줌. 디비 새로고침하면 my_user와 my_user_follower가 생긴것 볼 수 있음. 

데이터를 많이 만들어야함. 사용자를 많이 만들어야 누구를 팔로우하는지 알 수 있고 내가 기능하는것들이 잘 동작되는 지 알 수 있음. 

사용자 데이터만드는 방법은 sign-up페이지 활용 

1)장고 서버실행>링크타고 홈페이지>로그아웃 후 회원가입 페이지 > 6명정도 회원가입하기. (많이 만들수록 좋음)

마지막에 usermodel로 들어감. 회원들이 나옴. follow에서 여러명 골라서 저장. 

 

4-7 mtm 모델 사용하기(실전-친구리스트/팔로우)

실제로 view,url,html까지 작성

1)view를 먼저 만듬(팔로우/리스트는 user와 관련 > user의 view를 확인)

맨아래에 코드스니펫 복붙 

def user_view > request.method get: 무엇가를 보여주겠다. return보면 render html이 있음. 

user_list = usermodel.objects.all().exclude(username=request.user.username.)#해당하는 데이터에서 어떤 것을 빼겠다

def user_follow(request, id)

me = request.user #나라는 변수를 지정 clickuser는 내가 누른 사용자. 

click_user = UserModel.objects.get(id=id)

if me in click_user.followee.all():

  click_user.followee.remove(request.user)

else:

 click_user.followee.add(request.user)

return redirect('/user') #그사람을 팔로우하는 모든 사람중에 내가 있다면 팔로우취소 하게하고 없으면 팔로우하게 해줌.

2)view작성완료 url 작성

user앱안의 urls.py

path('user/', views.user_view,name='user-list'),

path('user/follow/<int:id>,view.user_follow,name='user=follow'),

3)url과 view작성 완료.

userview에서는 html파일을 보여줌. html파일 넣기 

templates폴더 안에 user팡일 안에 user_list.html 만들기(코드스니펫 넣기)

usermodel.foloow하면 내가 팔로우하는 사람 followee하면 나를 팔로우하는 사람

4)user_list에서 팔로우, 팔로우취소 둘다 같은 url 실행. 이유는 views.py에서 잘 작성 되어있음. 이 페이지에 들어갈 수 있는 url없음. 버튼 눌러서 들어가는 것이 편리함. 네빙게이션바 수정(base.html)

5)상단 네비게이션바 수정

nav-link 의 친구라는 부분 있음.href=#인데 이것을 "/user"로 바꿔줌. 

6)웹페이지로 일반계정 접속 > 친구 들어가보면 사용자 리스트 들어가짐. 

 

4-8 4주차 Wrap Up!!&숙제설명

-나의 사용자 모델에 follow를 적용

-mtm모델 만들기

-django template문법 사용 팔로우 모델 표시

github과 aws가입.

'스파르타코딩클럽[AI트랙 3기] > 장고' 카테고리의 다른 글

[장고심화]1주차  (0) 2022.10.25
[장고기초]5주차  (1) 2022.09.28
[장고기초]3주차  (0) 2022.09.23
[장고 기초]2주차 과제  (1) 2022.09.23
[장고기초] 2주차  (1) 2022.09.23