WIL #10 [Django]actor&movie(views.py)
🤷 기간 : 2021.04.29 ~ 2021.04.30
🤷 자료 : https://www.notion.so/wecode/Django-C-R-U-D-2-98d0ec4c3de844338e769096aee13537
🤷 내용:views.py
작성
순서
- 초기세팅(
project=owner&dog
/app = owner
)actor/movie/models.py
actor/actor/urls.py
actor/movie/urls.py
actor/movie/views./py
1. actor/movie/models.py
ManyToMany Field
위의 모델링을 보고 app의 models.py작성하자
from django.db import models
# Create your models here.
class Actor(models.Model):
first_name = models.CharField(max_length=45)
last_name = models.CharField(max_length=45)
date_of_birth = models.DateField(null=True)
def __str__(self):
return self.first_name
class Meta:
db_table = 'actors'
class Movie(models.Model):
title = models.CharField(max_length=45)
release_date = models.DateField(null=True)
running_time = models.IntegerField()
actor = models.ManyToManyField("Actor", through='ActorMovie') # 일단 나는 Movie 클래스에서 Actor로 걸어놓았는데 뭐 이건 Actor클래스안에 Movie로 걸어도 상관 없고/ 근데 후자로 했을때 views.py는 좀 달라지겠지
def __str__(self):
return self.title
class Meta:
db_table = 'movies'
class ActorMovie(models.Model):
actor = models.ForeignKey("Actor",on_delete=models.CASCADE) # ManyToManyField를 한다고 해도 models.py에서 중간테이블은 꼭 만들어 주세여 ^^
movie = models.ForeignKey("Movie",on_delete=models.CASCADE)
class Meta:
db_table = 'actorsmovies'
2. actor/actor/urls.py
from django.urls import include, path # 1. include 추가해주고
urlpatterns = [
path('actors/', include('movie.urls')) # 2. "actors" 경로, movie.urls와 연결한다
]
3. actor/movie/urls.py
from django.urls import path # 1. 이건 전체 줄을 추가해야해 파일 새로 만들어야해서/ 근데 여긴 include 추가안해줘도돼
from movie.views import ActorView, MovieView # 2. 또는, 이렇게 구체적인 클래스를 임포트 해주면돼
urlpatterns = [ # urlpatterns 추가해
path('', ActorView.as_view()), # 3-1 views에서 ActorView를 가져다가 쓸꺼/ 왜 path 안지정해 두냐 ? 원하면 해도되는데 처음에 먼저 "actor/"을 보여줄꺼야
path('movie/', MovieView.as_view()), # 3-2 views에서 MovieView를 가져다가 쓸꺼 / path는 actor/movie/임
]
4. owner/views./py
구현할 것.
- 배우 리스트
배우이름
,배우생년월일
,출연 영화
포함- 영화 리스트
영화이름
,개봉날짜
,출연진
이름 포함
import json
from django.http import JsonResponse # 장고 http에서 JsonResponse를 가져와
from django.views import View # 장고 views에서 View 가져와
from movie.models import Actor, Movie # movie app의 model에서 클래스인 Actor과 Movie 가져 와 ㅡ ㅡ
# Create your views here.
class ActorView(View):
def post(self, request): # http POST 127.0.0.1:8000/actor/ first_name=승호 last_name=신 date_of_birth=1991-11-04
data = json.loads(request.body)
actor = Actor.objects.create( # 엑터 하나씩 추가하자 모델에 리스트 보고 그 변수들 보고 넣음됨 쉘에 넣는것처럼
first_name = data['first_name'],
last_name = data['last_name'],
date_of_birth = data['date_of_birth']
)
return JsonResponse({'MASSAGE':'SUCCESS'}, status=201)
def get(self, request): # http GET 127.0.0.1:8000/actor/
actors = Actor.objects.all()
results =[]
for actor in actors:
actor_info = {
'name' : actor.last_name + " " + actor.first_name,
'date_of_birth' : actor.date_of_birth
}
results.append(actor_info) # 1. 먼저 엑터 인포 먼저 추가
movies = actor.movie_set.all() # 2. 이거 중요 !!! / 무비에서 엑터로 걸었음 foreign key를 / 긍까 _set을 써서 이제 역으로 추적해서 가져올 수 있따 ! ! !
results2 =[]
for movie in movies: # 3. 그걸 끌고와서 하나식 넣고
results2.append(movie.title) # 4. 끌고와서 영화 title 끌고오자 그리고 나서 새로운 리스트(result2)에 추가하기
results.append(results2) # 5. 그리고 result2를 result에 넣어버리자
return JsonResponse({'results':results}, status=200)
class MovieView(View):
def post(self, request): # http POST 127.0.0.1:8000/actor/movie/ title=내인생이드라마 release_date=1991-11-04 running_time=29385723
data = json.loads(request.body)
movie = Movie.objects.create(
title = data['title'],
release_date = data['release_date'],
running_time = data['running_time']
)
return JsonResponse({'MASSAGE':'SUCCESS'}, status=201)
def get(self, request): # http GET 127.0.0.1:8000/actor/movie/
movies = Movie.objects.all()
results = []
for movie in movies:
movie_info = {
'movie_name' : movie.title,
'release_date' : movie.release_date
}
results.append(movie_info)
actors = movie.actor.all() # 1. 무비에서 엑터로 정방향 걸었기 때문에 그냥 무비에서 엑터가서 다 가져오기
results2=[]
for actor in actors:
actor_info = {
'출연진' : actor.last_name + actor.first_name
}
results2.append(actor_info) # 2. 그래서 엑터 새로운 리져트에 또 넣고
results.append(results2) # 3. result2를 result 1에 넣자
return JsonResponse({'results':results}, status=200)
class ActorMovieView(View):
def post(self, request):
data = json.loads(request.body)
actor = Actor.objects.get(first_name=data['first_name'])
movie = Movie.objects.get(title=data['title'])
actormovie = ActorMovie.objects.create(
actor = actor,
movie = movie
)
return JsonResponse({'MASSAGE':'SUCCESS'}, status=201)
결과
1. 배우 리스트
배우이름
,배우생년월일
,출연 영화
포함base ❯ http GET 127.0.0.1:8000/actor/ 이거 넣으면 돼 HTTP/1.1 200 OK Content-Length: 580 Content-Type: application/json Date: Sat, 01 May 2021 13:45:14 GMT Referrer-Policy: same-origin Server: WSGIServer/0.2 CPython/3.9.1 X-Content-Type-Options: nosniff X-Frame-Options: DENY ` { "results": [ { "date_of_birth": "1991-11-04", "name": "신 승호" }, [ "내인생이드라마" ], { "date_of_birth": "1982-05-16", "name": "주 지훈" }, [ "신과함께-죄와벌", "암수살인", "간신", "아수라" ], { "date_of_birth": "1973-04-22", "name": "정 우성" }, [ "아수라", "신의한수", "감시자들" ], { "date_of_birth": "1988-12-16", "name": "박 서준" }, [ "사자", "기생충", "청년경찰" ] ] }
2. 영화 리스트
영화이름
,개봉날짜
,출연진
이름 포함base ❯ http GET 127.0.0.1:8000/actor/movie/ # 이거 넣으면 돼 HTTP/1.1 200 OK Content-Length: 1280 Content-Type: application/json Date: Sat, 01 May 2021 13:45:16 GMT Referrer-Policy: same-origin Server: WSGIServer/0.2 CPython/3.9.1 X-Content-Type-Options: nosniff X-Frame-Options: DENY ` { "results": [ { "movie_name": "사자", "release_date": "2019-07-31" }, [ { "출연진": "박서준" } ], { "movie_name": "기생충", "release_date": "2019-05-30" }, [ { "출연진": "박서준" } ], { "movie_name": "청년경찰", "release_date": "2017-08-09" }, [ { "출연진": "박서준" } ], { "movie_name": "암수살인", "release_date": "2018-10-03" }, [ { "출연진": "주지훈" } ], { "movie_name": "신과함께-죄와벌", "release_date": "2017-12-20" }, [ { "출연진": "주지훈" } ], { "movie_name": "간신", "release_date": "2015-05-21" }, [ { "출연진": "주지훈" } ], { "movie_name": "아수라", "release_date": "2016-09-28" }, [ { "출연진": "주지훈" }, { "출연진": "정우성" } ], { "movie_name": "신의한수", "release_date": "2014-07-03" }, [ { "출연진": "정우성" } ], { "movie_name": "감시자들", "release_date": "2013-07-03" }, [ { "출연진": "정우성" } ], { "movie_name": "내인생이드라마", "release_date": "1991-11-04" }, [ { "출연진": "신승호" } ] ] }
Author And Source
이 문제에 관하여(WIL #10 [Django]actor&movie(views.py)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shinisgood/WIL-9-p2zw0mjo저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)