티스토리 뷰

서버에게 정보를 질의 할 때 사용하는 문자열(query string)

위에 두 url은 브라우저가 서버에게 데이터를 GET하는 방식

 

아래 url창의 url은 브라우저가 서버의 데이터를 변경하려는 방식

주소를 copy시 방문자들이 임의로 추가 위험

따라서 서버의 데이터를 변경할 때는 query string 사용 X

POST 사용

 

view.py

from django.shortcuts import render, HttpResponse
topics = [
    {'id':1, 'title':'routing', 'body':'Routing is ..'},
    {'id':2, 'title':'view', 'body':'View is ..'},
    {'id':3, 'title':'Model', 'body':'Model is ..'},
]

def HTMLTemplate(articleTag): #템플릿 생성 함수 만들기
    global topics
    ol = ''
    for topic in topics:
        ol += f'<li><a href="/read/{topic["id"]}">{topic["title"]}</a></li>'
    return f'''
    <html>
    <body>
        <h1><a href="/">Django</a></h1> <!-- 클릭시 django로 이동-->
        <ul>
            {ol}
        </ul>
        {articleTag}    <!-- articleTag따라 내용 변경 -->
      <ul>
            <li><a href="/create/">create</a></li>
        </ul>
    </body>
    </html>
    '''
def index(request):
    article = '''
    <h2>Welcome</h2> 
    Hello, Django
    '''
    return HttpResponse(HTMLTemplate(article))
def read(request, id):
    global topics
    article = ''
    for topic in topics:
        if topic['id'] == int(id):
            article = f'<h2>{topic["title"]}</h2>{topic["body"]}'
    return HttpResponse(HTMLTemplate(article))

def create(request):
    article = '''
        <form action="/create/" method="post">     <!--폼 생성, post방식으로 변경 -->
            <p><input type="text" name="title" placeholder="title"></p> <!--제목 -->
            <p><textarea name="body" placeholder="body"></textarea></p> <!--내용 -->
            <p><input type="submit"></p>  <!--제출 -->
        </form>
    '''
    return HttpResponse(HTMLTemplate(article))

실행 후 검사

 

POST 방식으로 바뀐 것을 확인 가능

CSRF 보안 기능 관련 에러가 뜨지만 skip하는 방법 사용

 

 

view.ps

from django.shortcuts import render, HttpResponse
from django.views.decorators.csrf import csrf_exempt    #csrf 에러 스킵
topics = [
    {'id':1, 'title':'routing', 'body':'Routing is ..'},
    {'id':2, 'title':'view', 'body':'View is ..'},
    {'id':3, 'title':'Model', 'body':'Model is ..'},
]

def HTMLTemplate(articleTag): #템플릿 생성 함수 만들기
    global topics
    ol = ''
    for topic in topics:
        ol += f'<li><a href="/read/{topic["id"]}">{topic["title"]}</a></li>'
    return f'''
    <html>
    <body>
        <h1><a href="/">Django</a></h1> <!-- 클릭시 django로 이동-->
        <ul>
            {ol}
        </ul>
        {articleTag}    <!-- articleTag따라 내용 변경 -->
      <ul>
            <li><a href="/create/">create</a></li>
        </ul>
    </body>
    </html>
    '''
def index(request):
    article = '''
    <h2>Welcome</h2> 
    Hello, Django
    '''
    return HttpResponse(HTMLTemplate(article))
def read(request, id):
    global topics
    article = ''
    for topic in topics:
        if topic['id'] == int(id):
            article = f'<h2>{topic["title"]}</h2>{topic["body"]}'
    return HttpResponse(HTMLTemplate(article))

@csrf_exempt    #csrf 에러 스킵
def create(request):
    article = '''
        <form action="/create/" method="post">     <!--폼 생성, post방식으로 변경 -->
            <p><input type="text" name="title" placeholder="title"></p> <!--제목 -->
            <p><textarea name="body" placeholder="body"></textarea></p> <!--내용 -->
            <p><input type="submit"></p>  <!--제출 -->
        </form>
    '''
    return HttpResponse(HTMLTemplate(article))

csrf 스킵 해주는 코드 추가

 

POST방식으로 잘 작동하는 것 확인

 

'개발공부 > Django' 카테고리의 다른 글

12. DELETE  (0) 2022.04.26
11. 생성기능 (request response object)  (0) 2022.04.26
9. 생성기능 구현(form)  (0) 2022.04.26
8. 읽기 기능 상세 보기 페이지 만들기  (0) 2022.04.26
7. 홈페이지 읽기 기능 구현하기  (0) 2022.04.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함