일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- S3
- react
- pandas
- merge
- TypeScript
- crud
- dict
- 카톡
- git
- EC2
- wetube
- MongoDB
- Props
- Class
- node
- SSA
- flask
- 중급파이썬
- AWS
- NeXT
- 채팅
- lambda
- async
- SAA
- docker
- 파이썬
- 튜플
- socket io
- RDS
- Vue
- Today
- Total
목록Python/airbnb 클론 (43)
초보 개발자
이번에는 django가 제공해주는 Paginator를 사용해서 좀 더 간단하게 만들어보려고한다. 먼저 Paginator라는 것을 import해 온 뒤에 첫번째 인자로 object_list를 넣고, 두번째에는 몇개씩 출력할 것인지를 넣어준다. orphans는 추가옵션인데, 이건 만약 게시물이 23개라면 총 3페이지가 출력이 될 것이다. 10 10 3 이렇게, 하지만 5개 이하는 마지막 페이지에서 같이 출력하라는 명령어이다. 즉 이 경우엔 10 13 이렇게 출력이 될 것이다. 만약 27이라면 10 10 7 이렇게 출력이 될 것이다. 그리고 rooms는 paginator를 받아서 get_page(num)을 해주는 것인데 이 것이 참 유용하다. 기본적으로 아무 값이 들어오지않거나, 공백을 넣어도 기본적으로 1페..
방들을 쫙 나열하는 것 보다, 한 페이지에 10개씩 보여주는 것이 좋다. 그러기 위해선 페이지네이션을 만들어야 한다. 먼저 django에서 제공하는 페이지네이션을 사용하기전에 수동으로 만들어 어떤 로직으로 만들어 지는지 알아보자 먼저 page_num은 ?page=1 이런식으로 url에 담겨오는 정보를 받아오는 것이다. 만약 이 정보가 공백 이거나 /?page= 혹은 빈값이라면 / 1이 담기도록 int( or 1) 을 적어준 것이다. page_size는 10개씩 보여주기 위함이고, limit은 페이지에 따라 다음 정보를 보여주기 위함이다. offset은 limit에서 10을 뺀 값이다. rooms를 보면 page_num의 값에 따라 다른 limit값과 offset값이 들어가는 것을 확인할 수 있다. pag..
render를 사용하여 html을 보여주고 거기에 context를 사용하여 정보를 넘겨주는 것 까지 해봤다. 근데 여기서 우리가 base.html이라는 기본 적인 틀을 만들어 두고 사용할 수 있다. templates의 폴더에 base.html을 만들고 위와 같이 {%block content%}{%endblock%} 을 만들어주면, extend로 받아올 수 있다. home.html은 base.html의 하위에 존재하지만 ../base.html과 같이 안적어줘도된다. 여기서 base.html에 block content가 있다면 home.html에서도 그 block을 사용할 수 있다. 만약 base와 block이름이 다르다면 사용할 수 없다. 이번엔 header를 만들어줘보자 모든 페이지에 다 보이게 하려면 ..
이제 첫 페이지를 만들어보려고한다. 지금은 아무 설정도 되어있지 않기에 localhost:8000으로 들어가면 오류가난다. 이를 설정해주려고한다. 먼저 url을 설정해주어야하는데, 우린 앞으로 수많은 url을 만들어야하기 때문에 교통정리를 해줄 필요가 있다. /login /user/1/edit /room /room/1/edit ... 과 같이 수많은 url이 생기는데 하나에 다 정리하면 얼마나 복잡하겠는가? 따라서 각 app안의 urls.py에 관련된 url만 받아와서 view를 실행시켜준다. 먼저 /, /login, 과 같은 기본적인 url은 core app에서 다뤄주려고한다. urlpatterns라는 배열을 만들고 거기에 path를 하나씩 만들어주어야 한다. 여기서 ''라는 것은 아무것도 적히지 않았..
장고로 다양한 모델을 만들 때, 일일이 데이터를 만들면 시간이 오래걸릴 것이다. 하지만 django-seed를 사용한다면 이러한 문제를 해결해준다. 먼저 django-seed를 다운로드 받아야한다. pipenv install django-seed 그리고 커맨더를 만들어서 사용을 해야 하는데, 아무 app에 management라는 폴더를 하나 만들고 그 안에 __init__.py와 commands폴더를 만들자 그리고 commands의 폴더안에 또 __init__.py를 만들고 seed_facilities.py를 만들자 전체전인 코드를 살펴보면 먼저 seed_facilities라는 명령어를 사용하기 위해선 Command라는 클래스를 하나 만들어주어야 한다. 그 클래스는 BaseCommand를 상속하고, 그 ..
raw_ids fields는 foreign key를 좀 더 나은 방법으로 볼 수 있게 해준다. Room Admin에 위와 같은 코드를 작성해주면 더이상 리스트로 보이지 않고 user admin로 검색할 수 있게 해준다. 만약 user가 엄청 많아진다면 전처럼 리스트에서 고르는건 힘들 것이다. InlineModelAdmin admin안에 또 다른 admin을 넣는 방법이다. 우리는 Photo모델을 만들고 그 모델 안에서 제목, 파일, 룸(foreign key)을 지정해주는 식으로 하였다. 따라서 방에 사진을 올리기 위해선 방에서 올리는 것이 아닌, 포토 모델에서 따로 올려주어야 하였다. 근데 이 분리된, 모델을 하나로 합칠 수 있는 방법이 바로 인라인모델어드민이다. admin.py에서 새로운 클래스 하나를..
포토 모델에 파일을 업로드하면 지금은 서버에 바로 업로드가 되고 admin페이지에서 이걸 클릭하면 찾을 수 없다고 나온다. 그 이유는 photos는 아직 URL이 없기 때문이다. settings에 가서 MEDIA_ROOT옵션을 통해서 장고에게 어디다 우리가 업로드한 파일을 써야할 지 말해주는 것이다. 이건 절대 경로를 주어야 한다. 그리고 다시 업로드를 시켜보면 uploads안에 저장이 되어있는 것을 확인할 수 있다. 일단 다시 돌아와서 다음과 같이 upload_to를 지정해주었다. makemigrations와 migrate를 해준 뒤 다시 업로드해주면, 우리가 지정해준 경로로 잘 저장이 된 것을 확인할 수 있다. 아까는 media_root가 base_dir로 되어있었고 upload_to에 값이 없어서 ..
set이 작동하는 방식은 간단하다. room이 user를 가리키고 있다면 user.room_set 을통해 user에서 room으로 접근이 가능하다. 그럼 review모델도 User를 가리키고 있기에 review_set.all()을 통해서도 확인이 가능하다. 여기서 이름을 room_set, review_set 말고, 우리가 지정해줄 수도 있다. 그건 User측에서 하는 것이 아니라, 가리키는 쪽 즉, Room과 Review 모델에서 지정해주어야 한다. host에 related_name옵션을 rooms로 바꾸어보자. related_name 그럼 전에 room_set으로 되어있던것이 지금은 rooms로 바뀐 것을 확인할 수 있다. 바꾼 이상 room_set으로는 접근이 불가하다. 먼저 room을 하나 구해준다..