์ด์ ๋ถํฐ ์ค์ ๋ก ์๋์ํค๊ธฐ ์ํด ๋ฐฑ์๋ ๋ถ๋ถ์ ๋ง์ ธ๋ณด๋๋ก ํ ๊ฒ์ด๋ค.
ORM
๋๋น์ ์ค๋ฆฌ์ง๋ ๋ฐฉ์์ ๋จผ์ ์์๋ณด์.
๋๋น ๋ง๋ค๊ณ ์ฝ๋ ๋ฐ๋ก ๋ง๋ค๊ณ ์กฐํํ๋ ๊ฒ ๋ฐ๋ก ๋ง๋ค์ด์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
์ฌ๊ธฐ์ ์กฐํํ ๋๋ SQL
์ ์ฌ์ฉํ๋ค.
์ฆ, ์ค๋ฆฌ์ง๋ ๋ฐฉ์์ ์ฝ๋์์ ๋๋น๋ฅผ selectํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๊ณ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ค๋ฆฌ์ง๋ ๋ฐฉ์์์๋ ์ฝ๋์์ ๋ณ์(name
,age
,gender
,email
)์ ๋ํด ๋ชจ๋ ์ ์ธ์ ํด์ฃผ๊ณ , ๋๋น์์๋ (์ด๋ฆ
,๋์ด
,์ฑ๋ณ
,์ด๋ฉ์ผ
)์ ๋ฃ์ด์ค์ผ ํ๋ค.
์ด๋ฌํ ์ค๋ฆฌ์ง๋ ๋ฐฉ์์์ ๋๋น์ ์ ํ๋ฒํธ
๋ฅผ ์ถ๊ฐํด์ค ๊ฒฝ์ฐ,
์ฝ๋์์ ์ถ๊ฐํด์ฃผ์ง ์์์ ๋ ๋ฐ์ดํฐ๊ฐ ๋๋ฝ๋๋ ์ผ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
์ ํ๋ฒํธ
๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ์ฝ๋์์๋ phone
์ด๋ผ๊ณ ์ด์ค์์
์ ํด์ค์ผํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ด์ค์์
์ ํด์ผํ๋ ๋ฌธ์ ๋๋ฌธ์ ORM
์ด๋ผ๋ ๋ฐฉ์์ด ์๊ธฐ๊ธฐ ์์ํ ๊ฒ์ด๋ค.
๊ทธ๋ผ ORM
๋ฐฉ์์ ๋ฌด์์ด ๋ค๋ฅผ๊น?
ORM
์ ๊ฐ์ฒด(object)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๋น๋ฅผ ๋ง๋ค์ด์ค๋ค.
์ฝ๋์์ class user
๋ผ๋ ๊ฐ์ฒด์ ์ด๋ฆ
,๋์ด
,์ฑ๋ณ
,์ด๋ฉ์ผ
์ ๋ง๋ค์ด ์ฃผ๋ฉด
ORM
์ด db
์ object
๋ฅผ ์๋์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํด์ค๋ค.
๋ง์ด๊ทธ๋ ์ด์
์ ํตํด ๋๋น์๋ ์ฝ๋์ ์๋ object ๊ทธ๋๋ก user
๋ผ๋ ํ
์ด๋ธ์ ์ ์ฅ๋๋ค.
๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ถ๊ฐ๋ ์์ ์ฌํญ์ด ์์ด๋ ์ฝ๋์ ๋๋น๊ฐ ์๋์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
๋๊ธฐ๋๋ฌธ์
์์ชฝ์ ๋ชจ๋ ๊ด๋ฆฌํ ํ์์์ด ์ฝ๋๋ง ๊ด๋ฆฌํด์ฃผ๋ฉด ๋๋ค.
๋ํ ORM
์ sql
์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ์ง ์์๋ ๋๋ค. ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ORM
์ด ์์์ ์ฝ๋๋ฅผ sql
๋ก ๋ฐ๊ฟ์ค๋ค.
์ฅ๊ณ ์์๋ ์ด๊ฒ์ '์ฟผ๋ฆฌ์
'์ด๋ผ๊ณ ํ๋ค.
DB
๊ตฌ์ํ๊ธฐ๊ทธ๋ผ ์ด์ ํผ๋์ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค.
ORM
์ object
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๋น๋ฅผ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ object
๊ฐ ๋ฌด์์ผ์ง ์๊ฐํด๋ด์ผ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฝ๊ฒ ์์ ํ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ํ๋์ column(์ด)์ ํ๋์ ๊ฐ๋ง ๋ค์ด๊ฐ ์ ์๋ค
๋ค์ ํผ๋์ ๋๊ธ์ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ํด๋ณด์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
>> ํผ๋ table <<
ํ๋กํ์ฌ์ง | ๊ธ์ด์ด์์ด๋ | ์ฌ์ง | ๊ธ๋ด์ฉ
>> ๋๊ธ table <<
๋๊ธ๋จ๊ธด์ฌ๋ | ๋๊ธ๋ด์ฉ
ํผ๋๋ฅผ ๋ณด์ฌ์ค ๋ ๋๊ธ๊น์ง ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค๋ฉด,
์ฒซ๋ฒ์งธ ํผ๋์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฒซ๋ฒ์งธ ํผ๋๋ฅผ ๊ทธ๋ ค์ค ๋ค์,
๋๊ธ ํ
์ด๋ธ์์ ํผ๋id
๋ฅผ 1
๋ก ๊ฐ๋ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ ๊ฐ์ง๊ณ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๊ฒ ๋๋ค.
์ด๋ ๊ฒ ํ๋์ ํผ๋๋ฅผ ๊ทธ๋ฆฌ๋๋ฐ ํ๋์ ํ ์ด๋ธ๋ง์ด ํ์ํ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ํ ์ด๋ธ์ด ํ์ํ ์๋ ์๋ค.
์ฌ๋ฌ๊ฐ์ ํ ์ด๋ธ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ๊ณ ์ ํ id๊ฐ์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฐ๊ฒฐ์ํฌ ์ ์๋ค.
db์์๋ ์ด๋ฌํ ๊ณ ์ id๊ฐ์ผ๋ก
Primary key
(๊ธฐ๋ณธํค)์ Foreign key
(์ธ๋ํค)๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ค.
์๋น์ค์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ ์ฆ, ํ
์ด๋ธ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๋์ง ๋ฐ๋๊ธฐ ๋๋ฌธ์
์ํ๋ ์๋น์ค๊ฐ ์ด๋ค๊ฑด์ง, ์ด๋ ํ ๊ธฐ๋ฅ์ ํ๋์ง๋ฅผ ์ ์์์ผ ๋๋น์ ํ
์ด๋ธ์ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ๊ฒ์ธ์ง ์ ์ ์๋ค.
models
๋ง๋ค๊ธฐ- content/models.py
class Feed(models.Model): # Feed๋ผ๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ
profile = models.TextField() # ํ๋กํ์ฌ์ง
user_id = models.TextField() # ์ฌ์ฉ์์์ด๋
image = models.TextField() # ์ฌ์ง
content = models.TextField() # ๊ธ๋ด์ฉ
like_count = models.IntegerField() # ์ข์์์
์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด,
TextField()
์ ๊ฐ์ด ๋๋น์ ํด๋น ํ๋๊ฐ ์ด๋ค ๋ฐ์ดํฐํ์์ ํ์ํ๋์ง ์ ์ํด์ค ์ ์๋ค.
์ด๋ ๊ฒ Feed
๋ผ๋ ๊ฐ์ฒด์ ๋ํด ๋ค์ฏ๊ฐ์ ํ๋๋ฅผ ๋ง๋ค์ด ์ค ๋ค, ๋ง์ด๊ทธ๋ ์ด์
์ ํด์ค๋ค.
(venv)
python manage.py makemigrations
๋ง์ด๊ทธ๋ ์ด์
์ ํด์ฃผ๋ฉด ์ฅ๊ณ ์์ ์๋์ผ๋ก ์ฌ์ฉ์๊ฐ models
์ ์ ์ธํ ํด๋์ค(๊ฐ์ฒด)๋ฅผ ๋ชจ๋ ์ฐพ์์ ๋๋น๋ก ๋ง๋ค์ด์ค ์์
์ ํ๊ฒ๋๋ค.
(venv)
python manage.py migrate
๊ทธ๋ผ ๋๋น์ content_feed
๋ผ๋ ํ
์ด๋ธ๋ก ์์์ ๋ง๋ค์ด์ค 5๊ฐ์ ํ๋๊ฐ ๋ง๋ค์ด์ง๊ณ ์ถ๊ฐ๋ก id
๋ผ๋ ๊ณ ์ ๊ฐ์ด ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ค.
views
๋ง๋ค๊ธฐmodels.py
๋ก DB
๋ฅผ ๋ง๋ค์ด ์คฌ์ผ๋ฉด, ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํ
ํ๋ฆฟ์ผ๋ก ์ ๋ฌํด์ค์ง views
๋ฅผ ๋ง๋ค์ค์ผ ํ๋ค.
-content/views.py
from .models import Feed
class Main(APIView):
def get(self, request):
feed_list = Feed.objects.all()
return render(request, "instagram/main.html", context=dict(feed_list=feed_list))
์ฝ๋๋ฅผ ํด์ํด๋ณด์๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
feed_list = Feed.objects.all()
Feed
ํ
์ด๋ธ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋คreturn render(request, "instagram/main.html", context=dict(feed_list=feed_list))
instagram/main.html
์ ๋ณด๋ด์ค๋ค.์ด๋ ๊ฒ ๋ทฐ์์๋ ๋๋น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํ ํ๋ฆฟ์ผ๋ก ๋ณด๋ด์ฃผ๊ฒ ๋๋ค.
url
์ฐ๊ฒฐํ๊ธฐmain/
์ด๋ผ๋ url์ ๋ฐ์์ ๋ ๋ฐฉ๊ธ์ ๋ทฐ์์ ๋ง๋ค์ด์ค Main
์ ํธ์ถํ๊ธฐ ์ํด์ url.py
ํ์ผ์ ์์ ํด์ค๋ค.
- instagram/urls.py
from content.views import Main
urlpatterns = [
path('admin/', admin.site.urls),
path('main/', Main.as_view())
]
url์ ์ค์ ํด์ค์ผ๋ก์จ main/
์ด๋ผ๋ url์ ํ๊ณ ๋ค์ด์ฌ ๊ฒฝ์ฐ content
์ฑ์ ์๋ views
์ Main
์ ํธ์ถํ๊ฒ ๋๋ค.
๋ทฐ๋ก๋ถํฐ ๋์ด์จ ๋ฐ์ดํฐ๋ฅผ ํ ํ๋ฆฟ์ ์ ์ฉ์์ผ์ฃผ๋๋ก ํ๊ฒ ๋ค.
๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ํ ํ๋ฆฟ์ ์ ์ฉ์์ผ ์ค๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
{% for feed in feed_list %}
<p>{{ feed.id }}</p>
<p>{{ feed.image }}</p>
<p>{{ feed.content }}</p>
<p>{{ feed.profile_image }}</p>
<p>{{ feed.user_id }}</p>
<p>{{ feed.like_count }}</p>
{% endfor %}
๋ฐ๋ณต๋ฌธ์ด ์์ํ๋ ์ง์ ์ {% for feed in feed_list %}
์ ๋ฃ์ด์ฃผ๊ณ , ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ ์ง์ ์ {% endfor %}
๋ฅผ ๋ฃ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์์จ ๋ฐ์ดํฐ๊ฐ์ ๋ฃ์ด์ค ๊ณณ์ {{ feed.ํ๋์ด๋ฆ }}
์ ๋ฃ์ด์ฃผ๋ฉด, ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๊ฐ๋ค์ด ๋ค์ด์ค๊ฒ ๋๋ค.
์ด๊ฒ์ ๋ฐํ์ผ๋ก ์ด์ ์ ์์ฑํด์ค main.html
ํ์ผ์ ์์ ํด๋ณด๋๋ก ํ๊ฒ ๋ค.
- templates/instagram/main.html
...
<!-- ํผ๋๋ฐ์ค ์์ -->
{% for feed in feeds %}
<div class="feed-box">
<div class="profile">
<div class="profile-img-box">
<img class="profile-img"
src=" {{ feed.profile }} ">
</div>
<div class="profile-id">
{{ feed.user_id }}
</div>
</div>
<div class="feed-img">
<img id="feed-img"
src=" {{ feed.image }} ">
</div>
<div class="icon">
<div>
<span class="material-icons-outlined">favorite_border</span>
<span class="material-icons-outlined">chat_bubble_outline</span>
<span class="material-icons-outlined">send</span>
</div>
<div>
<span class="material-icons-outlined">bookmark_border</span>
</div>
</div>
<div class="like">
django <b>์ธ {{ feed.like_count }}๋ช
</b>์ด ์ข์ํฉ๋๋ค
</div>
<div class="feed-text">
<b>{{ feed.user_id }}</b> {{ feed.content }}
</div>
<div class="comment">
<div> <b>๊ธฐ๋</b> ์ฅ๊ณ ํ์ดํ
</div>
<div> <b>์ฌ๋ช
</b> ์๊ณ ๋ฆฌ์ฆ ํ์ดํ
</div>
<div> <b>์ด์ฑ</b> ํ์ด์ฌ ํ์ดํ
</div>
</div>
<div class="input-comment">
<input id="input-comment" type="text" class="form-control" placeholder="๋๊ธ ๋ฌ๊ธฐ...">
</div>
</div>
{% endfor %}
์ด๋ ํ๊ฐ์ง ์์ ํด์ค์ผํ ๋ถ๋ถ์ด ์๋ค.
์ง๊ธ์ ๊ฐ์ฅ ์ต๊ทผ์ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ํผ๋ ์๋์ ์๊ธฐ๊ณ ์๋ค.
์๋๋ ์ต๊ทผ์ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ์ต์ ๊ธ๋ก ์๋จ์ ๋ ์ผํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์์ ํด์ค์ผํ๋ค.
๊ฐ์ฅ ์ต๊ทผ์ ์ถ๊ฐ๋ ๋ฐ์ดํฐ์ id
๊ฐ์ด ๊ฐ์ฅ ํด ๊ฒ์ด๋ค.
์๋๋ ๋ทฐ์์ ๋๋น๋ฅผ ๊ฐ์ ธ์ฌ๋ id
๊ฐ์ด ์์๊ฑฐ ๋ถํฐ
์ฆ, 1 >> 2 >> 3๋ฒ ์์๋๋ก ๊ฐ์ ธ์จ๋ค.
๋ฐ๋ผ์ ์ด ์์๋ฅผ ์ญ์์ผ๋ก ๊ฐ์ ธ์ค๊ฒ ์์ ํด๋ณด๋๋ก ํ๊ฒ ๋ค.
- content/veiws.py
class Main(APIView):
def get(self, request):
feed_list = Feed.objects.all().order_by('-id')
return render(request, "instagram/main.html", context=dict(feeds=feed_list))
.order_by('-id')
: id
๊ฐ์ด ํฐ๊ฒ๋ถํฐ ๊ฐ์ ธ์ด์ด๋ ๊ฒ ์์ ํ ๋ค ์๋ฒ๋ฅผ ๋๋ฆฌ๋ฉด ์ต์ ๊ธ์ด ์ต์๋จ์ ์ฌ๋ผ์ค๋๋ก ์์ ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
๐ ์ฐธ๊ณ
๊ฐ์
๊ฐ์์๋ฃ