[Django/실습 기본 활용]

SooYeon Yeon·2022년 6월 18일
0

Django

목록 보기
3/20

Django에서 Get과 Post방식으로 데이터 전송

GET으로 전송하기

  1. Client가 특정 페이지를 요청하며 Server로 데이터를 보냄

  2. views.py

    • context에 담아 데이터를 html에 함께 보낼 수 있음 (template)
    • 값은 항상 딕셔너리 타입으로 담아야 함
    def func1(request):
        numVar1 = request.GET.get('num1',None)
        numVar2 = request.GET.get('num2',0)
    
        result = int(numVar2) + int(numVar1)
        print(int(numVar2)+int(numVar1))
    
        context ={'key1' : result}
        return render(request, 'page1.html',context)
  3. html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    결과는 { {key1 }}입니다.
    </body>
    </html>

POST로 전송하기

  1. POST로 전송할 수 있는 html 페이지 필요, form 태그 이용

    • csrf_token은 서버에서 들어 온 요청이 실제 서버에서 허용한 요청이 맞는 지 확인하기 위한 토큰으로 보안정책을 위해 form 태그 밑에 작성
    • {% csrf_token %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <form action="getPost" method="post">
      {% csrf_token %}
        <input name="num1">
      <input name="num2">
      <button>전송</button>
    
    </form>
    
    </body>
    </html>
  2. urls.py

    """
    from django.contrib import admin
    from django.urls import path
    
    import ex01.views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('qwer/abcd/', ex01.views.func1),
        path('dfe', ex01.views.func2),
        path('getPost', ex01.views.getPost)
    ]

html에서의 input태그의 name과 views.py에서 .get(’변수명’)을 같게 해줘야 함

  1. views.py

    def func2(request):
    
        return render(request,'input.html')
    
    def getPost(request):
        num1 = request.POST.get('num1',None)
        num2 = request.POST.get('num2',None)
    
        return HttpResponse(int(num1)+int(num2))

0개의 댓글