2022. 10. 5. 16:39ㆍ스파르타코딩클럽[AI트랙 3기]/장고 거북이반
2주차
1)form
html태그
action, method 가 중요함.
action을 통해 어느페이지로 이동할지
method를 통해 get, post 결정
다양한 url 설계 있음.
2)form 작성
-project의 urls.py
path(‘review/’,views.review),
>articles의 views.py
def review(request):
return render(request, review.html)
>>review.html 없으니까 template에 review.html
<form action=“/create_review/” method=“POST”> #action은 이동하게 될 url
{%csrf_token%} #보안 강화
<label for = “content”>보낼 메시지</label>
<input type=“text” id=“content” name=“content” /> #작성되는 name으로 받는 곳에서 식별 가능
<input type =“submit” /> #버튼 만들기
>>>페이지 열고 입력해도 이동할 url을 지정안해서 오류남. create_review라는 부분 작성 필요.
프로젝트폴더(django_tutorial)>urls.py
path(‘create_reivew/’, views.create_review),
articles의 views.py
def create_review(request):
content = request.POST.get(‘content’) #request로 받은 것 중에 post메소드일 때 post로 온 데이터 안에서 content라 되어있는거 받아오기. review.html에서 name>content로 보냈기 때문에,
>함수 이어서 작성 print(request.POST)
context={
‘content’:content,
}
return render(request, ‘review_result.html’,context)
>review_result.html 폴더를 templates 안에 만들어줌.
<h1>보내서 받은 내용은 {{content}}야!</h1>
>그러면 context에서 content라는 것을 뽑아주고, views.py내부의 content로 들어감.
>>review url에서 만든 html이 submit을 통해서 request를 보냈고, 받은 request에서 안에있던 데이터를 읽은 것을 볼 수 있다.
*과정 복기 : review.html에서 메시지 작성 > create_review라는 url로 post 방식으로 보냄. > post방식으로 된 request가 urls.py의 path create_review를 거쳐서 views.py의 def create_review로 들어옴. > request.POST.get에서 content로 받아옴. review_result.html을 보여줄 때 context를 싣어서 보여주면 content라는 킷값을 꺼내옴.
request란 요청간에 모든 정보를 담고 있는 변수. 페이지 요청시 장고는 요청에 대한 메타데이터를 포함하고 있는 http request라는 객체를 만듬. 장고는 적절한 view함수 로드하고 httprequset를 view함수의 첫 번째 인자로 전달. 각 view는 return을 할 때 httpresonse객체 반환을 해주고 있음. request를 받아서 response를 작성해서 보내주는 과정
3)url
새로운 앱추가시 url을 어떻게 할지
-새로운 app추가 python manage.py startapp foods
-settings.py에 app 추가
-views를 두 앱에 다 작성할 수 있고, 함수이름이 같아질수도 있음. 그래서 urls로 가서 from django.urls import path, include 해줌.
*django_tutorial
-path(‘articles/’, include(’arcticles.urls‘)), #articles안에 urls.py를 만들어서 articles안으로 관련 파일을 모두 옮겨줌.> from articles import views 없애주고 path admin, path articles 남기고 잘라줌.
*articles>url.py 로 붙여넣기
from django.urls import path
from articles import views
urlpatterns=[
붙여넣기
]
>>그냥 주소창에 articles하면 이제 안되고 articles/dinner해야 페이지 나옴. +diner/이름 하면 이름 나옴. 프로젝트 urls에서 articles/까지하고 그 뒷부분의 url들이 aritcles안에 들어가서 나옴.
food를 만들어주면 path(‘foods/’include(‘food.urls’))
4)url namespace
path(‘review’, view.review, name=’review‘) #name이라는 킷값넣어주고 이름을 임의로 지정 가능
path(‘create_review’, view.review, name=’create_review‘) #name을 해주면 path의 이름이 바뀌어도 create_reveiw만 써주면 알아서 장고 탬플릿이 주소를 찾아와줌.
*review.html에서는 <form action = method =“POST”> url을 매번 작성하는 것이 아니라 장고 템플릿을 이용하여 <form action = “{% url ‘create_review’, %}” method =“POST”>
)띄어쓰기가 중요
앱별로 많이 작성되는 index인데 name을 통해서 구분 가능
articles의 이름도 명시 가능
app_name = ‘articles’ 하고 review.html에서 {% url ‘articles:create_review’ #}해주면 만약 create_review가 articles에도 있고, food 에도 있는 경우에도 구분을 해주는 것이 가능
url네임택을 쓸때는 appname을 쓰고 url의 이름을 쓰는 것으로 활용
5)template 상속
대부분 웹사이트 하단에 들어가는 해더, 밑에들어가는 푸터는 공통으로 사용. 그 뿐아니라 해더의 자바스크립트를 불러온다고 하는 것은 공통으로 작성됨. 매번 공통으로 사용되는 html을 섞어줘야하는데 그것을 사용하는 것이 templates
*base.html을 만들어줌.
<h1>헤더부분작성</h1>
{% block content %} {% endblock %} #헤더와 풋터 작성되고 내용은 block안에 다 포함.
<h1>풋터 부분 작성</h1>
*dinner.html 윗부분에
{% extends ‘base.html’ %} {% block content %} 넣어주고 맨밑에서 {% endblock %}추가
다른 html
'스파르타코딩클럽[AI트랙 3기] > 장고 거북이반' 카테고리의 다른 글
| [장고 프로젝트 거북이반] 221012 #1 (0) | 2022.10.12 |
|---|---|
| [장고 거북이반] 221012 #5 (0) | 2022.10.12 |
| [장고 거북이반] 221003 #4 (0) | 2022.10.05 |
| [장고 거북이반] 220102 #3 (0) | 2022.10.05 |
| [장고 거북이반] 220930 #1 (0) | 2022.09.27 |