Study Anything 🧐

μ„œν‰ μž‘μ„± (2) - μ„œν‰ μ“°κ³  μ‘°νšŒν•˜κΈ° λ³Έλ¬Έ

ν”„λ‘œμ νŠΈ/[Web] μ„œν‰ μž‘μ„± μ‚¬μ΄νŠΈ

μ„œν‰ μž‘μ„± (2) - μ„œν‰ μ“°κ³  μ‘°νšŒν•˜κΈ°

솔 2022. 1. 12. 20:27

μ„œν‰ μž‘μ„± 파트의 첫번째 λ‹¨κ³„μ—μ„œ μž₯κ³  λͺ¨λΈλ‘œ μ„œν‰ DBλ₯Ό λ§Œλ“  ν›„

κ·Έ DB μ•ˆμ˜ μ„œν‰λ“€μ„ μ›ΉνŽ˜μ΄μ§€μ—μ„œ μ‘°νšŒν•˜λŠ” κΈ°λŠ₯κΉŒμ§€ κ΅¬ν˜„ν–ˆλ‹€.

 

μ΄λ²ˆμ—” κ·Έ λ‹€μŒ λ‹¨κ³„λ‘œ μž‘μ„±ν•œ μ„œν‰μ„ DB에 λ“±λ‘ν•˜λ„λ‘ ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆλ‹€.

μ›ΉνŽ˜μ΄μ§€μ—μ„œ μ„œν‰μ„ μ“΄ ν›„ κ·Έ λ‚΄μš©μ„ μ„œν‰ DB에 λ„£κ³  전체 λͺ©λ‘μœΌλ‘œ μ‘°νšŒν•˜λŠ” κΈ°λŠ₯이닀.

 

 

 

(1) μ„œν‰ λͺ©λ‘μ„ μ‘°νšŒν•˜λŠ” νŽ˜μ΄μ§€μ— κΈ€μ“°κΈ° νŽ˜μ΄μ§€λ‘œ 이동할 수 μžˆλŠ” μš”μ†Œλ₯Ό μΆ”κ°€ν•œλ‹€.

파일 > templates/review/list.html

...
<a href="/review/write/">κΈ€μ“°κΈ°</a>
...

 

 

(2) urls.py νŒŒμΌμ— write νŽ˜μ΄μ§€μ™€ κ΄€λ ¨λœ λ‚΄μš©μ„ μΆ”κ°€ν•œλ‹€.

파일 > review/urls.py

urlpatterns = [
    ...
    path('write/', views.write, name='write'),
    ...
]

urls.py νŒŒμΌμ— ν•΄λ‹Ή λ‚΄μš©μ„ μΆ”κ°€ν•¨μœΌλ‘œμ¨ 'http://κΈ°λ³Έμ£Όμ†Œ/review/write' μ£Όμ†Œκ°€ μš”μ²­λ˜μ—ˆμ„ λ•Œ,

views.py 파일의 write ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ²Œ λœλ‹€.

 

 

 

(3) views.py νŒŒμΌμ— write ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•œλ‹€.

파일 > review/views.py

def write(request):
    user = User.objects.get(userId='002')
    context = {'user':user}
    if request.method == 'POST':
        Review.objects.create(
            userId = user,
            bookId = request.POST['bid'],
            reviewId = request.POST['rid'],
            reviewTxt = request.POST['review']
        )
        return redirect('list')
    return render(request, 'review/write.html', context)

url 이 호좜되면 views.py 파일의 write ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€.

그럼 λ¨Όμ € 글을 μž‘μ„±ν•œ μœ μ €κ°€ λˆ„κ΅¬μΈμ§€ 정보λ₯Ό μ–»μ–΄μ„œ user λ³€μˆ˜μ— μ €μž₯ν•˜κ³ ,

(μ΄λŠ” 둜그인 κΈ°λŠ₯κ³Ό μ—°κ²°λ˜μ–΄μ•Ό κ°€λŠ₯ν•œ λΆ€λΆ„μ΄λ―€λ‘œ μ§€κΈˆμ€ μž„μ˜λ‘œ μœ μ € ν•œ λͺ…을 μ§€μ •ν–ˆλ‹€.)

κΈ€μ“°κΈ° νŽ˜μ΄μ§€μ—μ„œ μž‘μ„±ν•œ λ‚΄μš©μœΌλ‘œ μ„œν‰ DB에 데이터λ₯Ό μΆ”κ°€ν•œ ν›„ 전체 λͺ©λ‘μ„ λ³΄λŠ” list url 을 ν˜ΈμΆœν•œλ‹€.

 

이 λ•Œ, 맨 μ²˜μŒμ— κΈ€μ“°κΈ°μ˜ url 을 μš”μ²­ν–ˆμ„ λ•ŒλŠ” μ•„λ¬΄λŸ° 정보가 μ—†κΈ° λ•Œλ¬Έμ— (μž‘μ„±ν•œ λ‚΄μš©μ΄ μ—†κΈ° λ•Œλ¬Έμ—)

쑰건문을 톡해 μš”μ²­ν•œ λ©”μ†Œλ“œκ°€ POST 인지λ₯Ό νŒλ³„ν•˜λ„λ‘ ν–ˆλ‹€.

λ§Œμ•½ λ‚΄μš©μ΄ μ—†λ‹€λ©΄ μœ μ € μ •λ³΄λ§Œ 가지고 write.html λ₯Ό λ„μš΄λ‹€.

 

 

 

(4) templates 폴더에 write.html νŒŒμΌμ„ μž‘μ„±ν•œλ‹€.

파일 > templates/review/write.html

...
<form action="{% url 'write' %}" method="POST">
	{% csrf_token %}
	<div>
	    uid: {{ user.userName }}<br>
	    bookId: <input type="text" name="bid"/><br>
	    reviewId: <input type="text" name="rid"/><br>
	    μ„œν‰ λ‚΄μš© <br>
	    <textarea name="review", rows="10", cols="40"></textarea><br>
	    <button type="submit">등둝</button>
	</div>
</form>
...

write.html 이 λ„μ›Œμ§€λ©΄ μš”μ†Œλ“€μ„ 톡해 μ„œν‰DB에 데이터λ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μš”μ†Œλ“€κ³Ό μ„œν‰ λ‚΄μš©μ„ μž…λ ₯ν•  수 있고,

(μ΅œμ’…μ μœΌλ‘œλŠ” userId, bookId, reviewId κ°€ μžλ™μœΌλ‘œ μ±„μ›Œμ§€λ„λ‘ κ΅¬ν˜„ν•  μ˜ˆμ •μ΄λ‹€.)

textarea νƒœκ·Έμ— μ„œν‰ λ‚΄μš©μ„ μž‘μ„±ν•œ ν›„ 등둝 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄

μ„œν‰ 데이터λ₯Ό 가지고 write url 을 λ‹€μ‹œ ν˜ΈμΆœμ‹œμΌœ views.py 파일의 write ν•¨μˆ˜λ‘œ 이동해 데이터λ₯Ό μ €μž₯ν•œλ‹€.

 

이 λ•Œ {% csrf_token %} 뢀뢄은 CSRF 곡격을 막기 μœ„ν•œ κ²ƒμœΌλ‘œ,

csrf_token νƒœκ·Έλ₯Ό μΆ”κ°€ν•¨μœΌλ‘œμ¨ 우리 μ‚¬μ΄νŠΈκ°€ μ•„λ‹Œ λ‹€λ₯Έ μ‚¬μ΄νŠΈμ—μ„œ μš”μ²­μ„ 보내면 였λ₯˜ νŽ˜μ΄μ§€λ₯Ό λ„μš°λ©° κ±°λΆ€ν•œλ‹€.



 

(5) μ‹€ν–‰ ν™”λ©΄

 

κΈ€μ“°κΈ° νŽ˜μ΄μ§€

 

μ„œν‰ λͺ©λ‘ 쑰회 νŽ˜μ΄μ§€

 

 

 

 

728x90
Comments