Back-end/Django

[HUFS/HUFStudy] #6 Form

성중 2021. 7. 30. 13:57

Faker

가짜 데이터들을 생성해주는 pip패키지인 Faker를 알아보자

 

데이터가 많은 상황을 테스트할 때 사용된다
‘pip install faker’를 입력해 faker 파일을 설치해주자

이런식으로 Faker를 import해 가짜 데이터를 생성할 수 있다 (출력을 위해 print문에 넣었다)

from faker import Faker

myfake = Faker()

# Faker의 매소드를 통해 어떤 종류의 가짜데이터를 뽑아낼지 결정 가능

print(myfake.name())
print(myfake.address())
print(myfake.text())
print(myfake.state())
print(myfake.sentence())
print(myfake.random_number())

 

해당 파일을 실행하면 이런 식으로 임의의 데이터가 생성된다

‘ko_KR’을 넣으면 한글이 되지만 name과 address만 생성할 수 있다

myfake = Faker('ko_KR')

파일에 seed번호를 넣으면,,

from faker import Faker

myfake = Faker('ko_KR')

# Faker의 매소드를 통해 어떤 종류의 가짜데이터를 뽑아낼지 결정 가능
Faker.seed(1)

print(myfake.name())
print(myfake.address())
print(myfake.random_number())

 

반복해도 데이터가 생성된 상태로 유지된다!

views.py에서 간단한 for문과 조합하면 DB에 데이터를 대량 생산/삭제할 수 있다

for i in range(0,10):
    blog=Blog()
    
    blog.title=myfake.name()
    blog.body=myfake.sentence()
    blog.save()

이런식으로 .save() 메소드나 .delete() 메소드와 사용

 

* 필수적인 내용은 아니기 때문에 참고만 해두자!

 

Form 이론

form을 html 태그로 하나하나 만들지 말고 Django 기능을 활용해 한 번에 만들어보자

 

form 태그와 연결할 Form.py 파일을 만들어 해당 기능들을 import 해준다
Field 를 활용해 임의의 입력을 받을 수도 있고
이런식으로 모델과 연동된 입력공간을 만들 수도 있다
views.py create 함수는 대충 이런 구조

모델에 일부만 입력 받고 나머지는 자동으로 함수에서 처리하려면,,

 

예를 들어 date만 자동으로 넣어주려면 중간에 끊어서 수정해줘야 한다

* .is_valid는 모든 입력값이 잘 입력되었는지 확인해주는 메소드함수

 

Form.py를 html파일에 띄울 때는 템플릿 태그로 감싸 어떤 내용으로 출력할지 결정할 수 있다

Form 실습

form을 전달할 model이 있는 앱 폴더에 form.py 파일을 생성해준다

form.py에 기능과 model을 import해주고 form으로 받아올 fields도 지정해준다

from django.forms import fields
from .models import Blog

class BlogPost(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ['title', 'body']

해당 파일을 연결할 함수를 실행할 url을 urls.py에 미리 추가해주자

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('<int:blog_id>', views.detail, name="detail"),
    path('new/', views.new, name="new"),
    path('create/', views.create, name="create"),
    path('newblog/', views.blogpost, name="newblog"),  
]

views.py에 import해주고,,

from .form import BlogPost

함수는 이렇게 작성한다

def blogpost(request):
    # 1. 입력된 내용을 처리하는 기능 -> POST 방식
    if request.method == 'POST':
        form = BlogPost(request.POST)
        if form.is_valid(): # 모든 입력 공간이 제대로 입력됐다면
            post = form.save(commit=False) # 아직 저장하지 않은 상태로 모델 객체 반환
            post.pub_date = timezone.now() # 따로 자동으로 처리
            post.save() # 저장
            return redirect('home')
    # 2. 빈 페이지를 띄워주는 기능 -> GET 방식
    else:
        form = BlogPost()
        return render(request, 'new.html', {'form':form})

html 파일은 이런식으로 form을 불러와준다

{% extends 'base.html' %}

{% block contents %}
<br>

<div class="container">
  <form method="POST">
    {% csrf_token %}
    <table>
      {{form.as_table}}
    </table>
    <br>
      <input class="btn btn-dark" type="submit" value="제출하기">
  </form>
</div>
{% endblock %}

 

모델과 연동하지 않고 임의로 form을 형성할 수도 있다

이런식으로 간결하게 form과 html 파일을 관리할 수 있다!

 

본 내용은 멋쟁이사자처럼의 '9기 운영진 교육'을 바탕으로 작성되었습니다.