WIL #10 [Django]actor&movie(views.py)
10383 ワード
🤷 期間:2021.04.29~2021.04.30
🤷 資料:https://www.notion.so/wecode/Django-C-R-U-D-2-98d0ec4c3de844338e769096aee13537
🤷 内容:
初期設定(
キャストリスト 映画リスト
🤷 資料: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"
},
[
{
"출연진": "신승호"
}
]
]
}
Reference
この問題について(WIL #10 [Django]actor&movie(views.py)), 我々は、より多くの情報をここで見つけました https://velog.io/@shinisgood/WIL-9-p2zw0mjoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol