Python & Django Day21 Django view

3 minute read

Fastcampus Python&Django 온라인 강의를 듣고 작성한 Class note입니다.

url

www.mydomain.com/ part / ? name=sol&like=python#tag

view

화면 구성을 통제

urls.py

모든 서버 url로 접속하는 요청들은 항상 urlpatterns을 먼저 인식한 후 일치하는 경로로 이동하게 된다.

(ex) 127.0.0.1:9000**/admin**

Url 추가하기

1# urls.py 파일 수정
2from django.contrib import admin
3from django.urls import path, include
4
5urlpatterns = [
6    path('admin/', admin.site.urls),
7    path('app/', include("myapp.urls"))
8]
1# myapp 폴더 아래 urls.py 파일 생성
2from django.urls import path
3
4urlpatterns =[
5    path("")
6]
1# 터미널에서 서버 실행
2python manage.py runserver 127.0.0.1:9000
3
4# 아래와 같은 에러가 발생한다
5TypeError: _path() missing 1 required positional argument: 'view'

views.py

화면 구성을 통제하는 파일

 1# myapp 폴더 아래 views.py 수정
 2from django.shortcuts import render, HttpResponse
 3import datetime
 4
 5def say_hi(request):
 6    now_time = str(datetime.datetime.now())
 7    return HttpResponse(
 8        "<h1> Hi </h1>" 
 9        + '<br>' 
10        + now_time
11        )

그 다음 urls.py로 views.py를 가져온다.

두 파일이 같은 폴더에 있기 때문에 import로 불러올 수 있다.

1# urls.py
2from django.urls import path
3from . import views
4
5urlpatterns =[
6    path("", views.say_hi)
7]
  • 실행 :
1> python manage.py runserve127.0.0.1:9000
2# http://127.0.0.1:9000/app/ 로 접속

경로를 통한 인자전달

경로에 ?name=value 를 입력하면 값을 전달할 수 있다.

(ex) http://127.0.0.1:9000/app/?name=jane

위의 예에서는 def say_hi() 에 있는 request라는 매개변수에 값이 들어가게 된다.

1def say_hi(request):
2    now_time = str(datetime.datetime.now())
3    print(request)    # print를 해서 값 확인
4    print(request.GET)
5    return HttpResponse(
6        "<h1> Hi </h1>" 
7        + '<br>' 
8        + now_time
9        )

브라우저에 http://127.0.0.1:9000/app/?name=jane 를 입력 후 새로고침 해 보면 아래와 같이 GET parameter가 출력된다.

<WSGIRequest: GET ‘/app/?name=jane’>

Request 값을 꺼내는 방법

먼저 print(request.GET) 로 출력해 보면

1def say_hi(request):
2    now_time = str(datetime.datetime.now())
3    print(request)    
4    print(request.GET)
5    return HttpResponse(
6        "<h1> Hi </h1>" 
7        + '<br>' 
8        + now_time
9        )

<QueryDict:{’name’: [‘Signal’]}>

이 출력되는 것을 확인할 수 있다.

Get의 값을 추출해서 사용해보면 아래와 같이 가능하다.

1def say_hi(request):
2    now_time = str(datetime.datetime.now())    
3    name = request.GET['name']  
4    return HttpResponse(
5        "<h1> Hi {}</h1>".format(name) 
6        + '<br>' 
7        + now_time
8        )

System check identified no issues (0 silenced). May 09, 2018 - 15:34:12 Django version 2.0.4, using settings ‘firstproject.settings’ Starting development server at http://127.0.0.1:9000/ Quit the server with CONTROL-C. [09/May/2018 15:34:21] “GET /app/?name=Signal HTTP/1.1” 200 47

입력값이 없을 경우 에러가 발생하므로 if문을 이용하여 아래와 같이 예외처리 해 줄 수 있다.

 1def say_hi(request):
 2    now_time = str(datetime.datetime.now())    
 3    name = request.GET('name')
 4    if not name:
 5        name = 'Guest'  
 6    return HttpResponse(
 7        "<h1> Hi {}</h1>".format(name) 
 8        + '<br>' 
 9        + now_time
10        )