[장고 거북이반] 221001 #2

2022. 10. 5. 16:39스파르타코딩클럽[AI트랙 3기]/장고 거북이반

2주차

1)form

html태그

action, method 가 중요함.

action을 통해 어느페이지로 이동할지

method를 통해 get, post 결정

다양한 url 설계 있음.

 

2)form 작성

-projecturls.py

path(‘review/’,views.review),

>articlesviews.py

def review(request):

return render(request, review.html)

>>review.html 없으니까 templatereview.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),

articlesviews.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에서 만든 htmlsubmit을 통해서 request를 보냈고, 받은 request에서 안에있던 데이터를 읽은 것을 볼 수 있다.

*과정 복기 : review.html에서 메시지 작성 > create_review라는 urlpost 방식으로 보냄. > post방식으로 된 requesturls.pypath create_review를 거쳐서 views.pydef create_review로 들어옴. > request.POST.get에서 content로 받아옴. review_result.html을 보여줄 때 context를 싣어서 보여주면 content라는 킷값을 꺼내옴.

request란 요청간에 모든 정보를 담고 있는 변수. 페이지 요청시 장고는 요청에 대한 메타데이터를 포함하고 있는 http request라는 객체를 만듬. 장고는 적절한 view함수 로드하고 httprequsetview함수의 첫 번째 인자로 전달. viewreturn을 할 때 httpresonse객체 반환을 해주고 있음. request를 받아서 response를 작성해서 보내주는 과정

 

3)url

새로운 앱추가시 url을 어떻게 할지

-새로운 app추가 python manage.py startapp foods

-settings.pyapp 추가

-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_reviewarticles에도 있고, 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