본문 바로가기
개발일지/Django

Django - form class 기초 (다음 포스팅과 연결될 예정)

by 다니엘의 개발 이야기 2022. 10. 1.
320x100

# django

 

#GET

 

지정된 리소스에서 데이터를 요청함

GET과 POST는 둘다 근본적으로 html request 메서드 이지만

GET은 데이터를 요청해서 받아오고

POST는 데이터를 서버에 보낸다.

라고 이해하면 되겠다.

 

#POST

 

리소스를 생성하거나 업데이트를 하기 위해 서버에 데이터를 보내도록 요청함.

 


# django form으로 제작 루틴

 

#1

vscode상의 터미널에서

내가 작업하고자 하는 폴더로 이동


#2

 

터미널에 명령문을 입력한다.

django-admin startproject mysite


#3

 

생성된 프로젝트 폴더로

터미널 상에서 이동해준다.


#4

 

어플리케이션 생성

python manage.py startapp 어플리케이션이름

 

예시

python manage.py startapp cars


#5

 

4번의 어플리케이션으로 생성된 폴더 안에

templates라는 이름의 폴더를 만들고

templates라는 폴더 안에는 cars라는 폴더를 만든다.

 

그리고 그 안에는

thank_you.html

rental_review.html

이라는 이름의 파일을 넣는다.


#6

 

4번에서 생성된 어플리케이션 안에

views.py라는 파일을 열자.

from django.shortcuts import render

# Create your views here.
def rental_review(request):
    return render(request, 'cars/rental_review.html')

def thank_you(request):
    return render(request, 'cars/thank_you.html')

라는 내용의 코드를 넣자.


#7

 

4번에서 생성된 어플리케이션 안에

urls.py라는 파일을 만든다.

from django.urls import path
from . import views

app_name = 'cars'

urlpatterns = [
    path('rental_review/', views.rental_review, name ='rental_review'),
    path('thank_you/', views.thank_you, name ='thank_you')
]

라는 내용의 파일을 넣는다


#8

 

이제 7번에서 생성한 어플리케이션 단위의 urls.py와

프로젝트 단위의 urls.py를 연결해주어야 한다.

 

mysite > mysite > urls.py

로 이동한다.

"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

# domain.com/cars/thank_you
urlpatterns = [
    path("admin/", admin.site.urls),
    path(‘cars/', include('cars.urls'))
]

이 코드로 씌워준다.


#9

 

mysite > mysite > settings.py

경로로 온다.

 

어플리케이션의 apps.py에 설정되어있는 클래스를

settings.py의 INSTALLED_APPS로 추가시켜준다.

 

INSTALLED_APPS = [

    'cars.apps.CarsConfig',

    "django.contrib.admin",

    "django.contrib.auth",

    "django.contrib.contenttypes",

    "django.contrib.sessions",

    "django.contrib.messages",

    "django.contrib.staticfiles",

]


#10

 

5번에서 만들었던

rental_review.html

안에

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>rental_review.html</title>
</head>
<body>
    <h1>Thank you</h1>
</body>
</html>

라는 코드를 심어준다.


#11

 

터미널로 서버실행해준다.

python manage.py runserver

 

127.0.0.1.8000/cars/thank_you

라는 페이지에 접속이 되면 된거고

접속이 안되면 보통은 문법에러 등일것이다.


#12

 

어플리케이션인 cars안에 forms.py라는 파일을 만들어준다.

 

from django import forms

 

class ReviewForm(forms.Form):

    first_name = forms.CharField(label = 'First Name', max_length=100)

    last_name = forms.CharField(label = 'Last Name', max_length=100)

    email = forms.EmailField(label = 'Email')

    review = form.CharField(label = 'Please write your review here')

 

그 안에 이 코드를 입력해준다.


#13

 

다시

 

mysite > cars > views.py

로 이동

from django.shortcuts import render, redirect
from django.urls import reverse
from .forms import ReviewForm

# Create your views here.
def rental_review(request):

    # POST REQUEST --> form contents --> thank_you
    if request.method == 'POST':
        form = ReviewForm(request.POST)

        if form.is_valid():
            #{'first_name':'Jose', }
            print(form.cleaned_data)
            return redirect(reverse('cars:thank_you'))

    # ELSE, RENDER Form
    else:
        form = ReviewForm()

    return render(request, 'cars/rental_review.html', context = {'form':form})

def thank_you(request):
    return render(request, 'cars/thank_you.html')

라고 코드를 심는다.


#14

 

mysite > cars > templates > cars > rentel_review.html

으로 이동 

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>rental_review.html</title>
</head>
<body>
    <h1>Rental review form</h1>
    <form method="POST">
        {% csrf_token %}
        {{form}}
        <input type='submit'>
    </form>
</body>
</html>

라고 코드 작성


#15

 

mysite > cars > urls.py

 

코드가 다르다면

from django.urls import path
from . import views

app_name = 'cars'

urlpatterns = [
    path('rental_review/', views.rental_review, name ='rental_review'),
    path('thank_you/', views.thank_you, name ='thank_you')
]

이렇게 해주고


#16

 

mysite > mysite > urls.py

도 코드가 다르다면

"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

# domain.com/cars/thank_you
urlpatterns = [
    path("admin/", admin.site.urls),
    path('cars/', include('cars.urls'))
]

이렇게 해주자.


#17

 

결과적으로

vscode터미널을 이용해서 python manage.py runserver

로 접속 후에

 

http://127.0.0.1:8000/cars/rental_review/

에 접속되면 정상접속이다.

 

중간에 너무 왔다갔다를 심하게해서

과정을 적진 못했고 코드를 전체적으로 가져왔다.

300x250