DX Data School

Django 활용하여 Web Programming 실습 2

Kim J 2024. 1. 30. 10:11

1) 요청이 오면 HTML 파일을 출력 시키기는 방법

> 애플리케이션의 views.py 파일에 html을 출력하기 위한 함수를 생성한다.

내가 만든 애플리케이션은 jweb이니까 jweb/views.py 에 작성하면 된다!

점심먹고 너무 졸려서 출력될 파일에 남길 메세지를 잠깨이새끼야! 로 설정.

def menu(request):
# menu.html 파일을 출력하는데 파일에 message 라는 이름으로 data를 전달
return render(request, 'menu.html', {'message':'잠깨이새끼야!'})

> 출력할 HTML 파일을 저장하기 위한 templates 디렉토리를 애플리케이션 디렉토리에 생성

- templates 디렉토리에 menu.html 파일을 만들고 출력 내용을 작성

서버 애플리케이션에 html파일을 만들어서 출력하는 방식을 서버 사이드 랜더링이라고 하고 최근에는 잘 사용하지 않는다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>메뉴</title>
</head>
<body>
    <h3>템플릿을 이용한 출력</h3>
    <h4>데이터 출력</h4>
    <div>
        {{message}} # 내가 설정한 메세지를 불러온다.
    </div>
    
</body>
</html>

> 프로젝트의 urls.py 파일에 url과 views의 함수를 연결하는 코드를 추가한다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

★★★★★ 어떤 url이 왔을때 누가 처리할지 정해주는 것이라 매우 중요하다!!!★★★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

from jweb import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("",views.index),
    path("menu/",views.menu),
    
]

서버를 구동하고 127.0.0.1/menu를 통해 확인해보자.

제발 잠 좀 깨...... 졸지마..... 정신차려........

잘 되는군요 하지만 잠이 깨지 않았다는게 함정이죠 잠이 깬척만 했습니다 쉬는시간에 바람을 맞으며 정신을 차려야겠어 너무 졸려

2) 파라미터 읽기

Parameter : 웹에서는 클라이언트가 서버에게 전송하는 데이터를 의미한다.

 

> 파라미터 전송 방식

[1] url 파라미터 : url에 파라미터를 포함해서 전송하는 방식으로 최근에 많이 사용

티스토리 URL은 https://ggangpae1.tistory.com/729 형식인데 여기서 729가 url파라미터 게시글 번호이다.

[2] querystring : GET 방식 요청에서 URL 뒤에 ? 를 추가하고 key=value&key=value 형태로 데이터를 전송하는 방식인데 이 방식은 파라미터가 URL에 노출되고 데이터의 길이 제한이 있어서 비밀번호, 파일 등은 전달이 불가하다.

네이버 검색의 경우 https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=go+to+bed &query= 뒤가 파라미터. go+to+bed!!

[그외] POST 나 PUT, DELETE 방식은 데이터를 header에 숨겨서 전송 [ 보 안 철 저 ! ] ex) 로그인

!! 서버에서는 어느 방식으로 오든 데이터를 읽어낼 수 있어야 한다. !!

3) URL 파라미터 읽기

> 처리방법

urls.py 파일에 요청을 만들 때 path('url/<자료형:변수이름>", 요청 처리 함수) 형식으로 만들고

views.py 파일에 요청 처리 함수를 만들 때 def 함수이름(request, 변수이름)으로 만들면 url의 변수값이 변수에 형 변환되어 대입된다.

https://ggangpae1.tistroy.com/731 과 같은 형식의 url 파라미터를 읽기 위해서는

urls.py 에는 path('/<int:no>',views.detail) views.py 에는 def detail(request,no): print(no)

형식으로 작성하면 된다. 상세보기를 만들 때 주로 사용한다.

이제 127.0.0.1/article/글번호 에 해당하는 숫자 형태의 URL을 처리할 때 글 번호에 해당하는 숫자를 출력해보자고~!

먼저 views.py 파일에 함수를 넣어준다~

그리고 urls.py 파일에 요청을 연결하는 코드도 추가한다.

이제 슬슬 뭘 해야할지 감이 오겠쮸? 서버 구동하고 확인 해봅시다.

짜잔~ 잘 되죠? but 지금의 경우에는 'article/<int:no>' INT 정수를 넣어뒀기 때문에 정수가 아닌 문자열을 넣으면 아래와 같이 연결이 안되니 주의 !!

상태코드 404 뭐라고 ? 저번시간에 했다. 상태코드 404: 지정한 리소스를 찾을 수 없는 경우!!

이 방식은 대부분의 경우 하나의 데이터를 가져오고자 할 때 기본키값을 데이토로 전송하는 형식에서 주로 이용한다!

4) GET 이나 POST 방식으로 전송 된 파라미터 읽기

> 요청 처리 함수의 매개변수에 GET이나 POST 라는 딕셔너리로 데이터가 전달 된다.

https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=go+to+bed 과 같은 형식의 GET 파라미터를 읽기 위해서는

urls.py 에는 path('serach.naver',views.search) views.py 에는 def search(request): request.GET["where"] -> nexearch request.GET["query"] -> adel request.GET["fbmm"] -> 라고 적으면 예외 발생함. POST 방식의 경우 GETPOST로 바꿔주면 된다.

이제 querystring 형식을 한번 읽어내도록 urls.py 와 views.py 를 수정해보자

views.py는 파라미터를 GET 방식으로 전송했을 때 연결해 줄 함수를 작성한다.

urls.py 는 search?query=검색어 를 처리하는 url과 함수를 연결!

이까지 했으면 당연히 서버 구동하고 되는지 테스트 해본다.

127.0.0.1/search?query=잠은 좀 깼니 제이야 형식으로 입력 해보즈아.

아니 아직이야

짜라잔짠 잘 되는구먼

지금 views.py에 작성한 것 처럼 함수를 작성하게 된다면 qurey오류가 났을 때 페이지가 터진다

그래서 기본값을 줘서 페이지가 터지더라도 기본값이 출력되도록 해주면 좋다.

이렇게 써주면 127.0.0.1/search?que1414ry4198741982479=잠은 좀 깼니 제이야 같이 주소가 잘못 입력 되어도 기본값으로 설정해둔 내용이 페이지에 출력된다.

어때요? 정말 쉽죠? [아니요;;]

졸음과 싸우던 시간이 끝났슴다.. 잠 좀 깨고와서 데이터베이스 연동으로 이어가도록 할게유 안냥~~~~~~

'DX Data School' 카테고리의 다른 글

데이터베이스 연동 2  (1) 2024.01.30
데이터베이스 연동  (0) 2024.01.30
Django 활용하여 Web Programming 실습  (2) 2024.01.30
Python Web Programming  (0) 2024.01.30
Python 과 Mongo DB 연동  (1) 2024.01.30