Python & Django Day21 Django view
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 )