본문 바로가기
개발

[Django] lotto - form 만들기

by 마스터누누 2017. 6. 28.
728x90
반응형

lotto - form 만들기



어느정도 앱이 윤곽을 보이고 있지만 아직 데이터를 입력받는 폼이 없다.

관리자 페이지에서 일일이 데이터를 입력할수도 없기 때문에

폼 양식을 작성하여 웹 페이지에 출력해야한다.




1
2
3
4
5
6
7
8
from django import forms
from .models import GuessNumbers
 
class PostForm(forms.ModelForm):
 
    class Meta:
        model = GuessNumbers
        fields = ('name''text',)
cs


장고에서 폼 양식을 만드는 법은 아주 간단하다.

먼저, lotto 안에 forms.py를 만들어준다.


여기에 장고가 제공해주는 기본 폼인 from django import forms를 추가한다.

또한 데이터베이스 입력을 위하여 from .models import GuessNumbers도 추가해준다.


또한 폼을 위한 class PostForm을 만드는데, 이는 forms.ModelForm을 상속받는다.

이 안에 class Meta를 선언하고 다시 Meta 클래스 안에 model 이라는 변수를 선언하는데,

어떤 모델을 사용할 것인지를 지정하는 것이다.

우리는 사용할 모델로 GuessNumbers를 넣는다.


또한 fields는 어떤 필드를 입력받을것인가를 지정하는것이므로

name과 text만 입력해 주도록하자.

나머지는 자동 생성 될 것이다.





1
url(r'^lotto/new$', views.post, name = "new_lotto"),
cs


작업이 완료되었으면 urls.py를 수정해야한다.

위와 같은 코드를 추가 하는데, view에 post 메소드로 접근하라는 뜻이다.

이 url의 이름은 new_lotto가 된다.


따라서 현재까지의 작업이 완료되고, 서버에 접근하면 에러가 나는데,

views에 post가 없기 때문이다.




1
2
3
4
5
import .forms import PostForm
 
def post(request):
    form = PostForm()
    return render(request, "lotto/form.html",{"form": form})
cs


그러므로 views에 post를 추가해주자.

post 메소드는 앞서 만든 form 데이터를 불러와서 lotto/form.html 템플릿에 전달하게 된다.

그렇다면 당연히 템플릿은 이를 받아 랜더링 해야한다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html> {% load staticfiles %}
<html lang="ko">
 <head>
  <title>My Little Lotto</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
  <link href="//fonts.googleapis.com/css?family=Space+Mono" rel="stylesheet">
  <link rel="stylesheet" href="{% static 'css/lotto.css' %}"> 
 </head>
 <body>
  <div class="page-header">
   <h1>My Little New Lotto</h1>
  </div>
  <div class="container lotto">
   <form method="POST" class="post-form"> {%csrf_token%} {{form.as_p}} <button type="submit" class="save btn btn-default">Save</button> </form>
  </div>
 </body>
</html>
cs


위의 코드로 lotto/form.html을 만들어 준다.

여기서 {%csrf_token%}이란 보안을 위해 form 태그안에 꼭 작성해줘야하는 키워드이다.

그리고 생성한 폼을 추가하기 위하여 {{form.as_p}}를 넣는다.

추가적으로 submit 버튼을 추가함으로써 폼 추가도 완료되었다.



출처 : 인프런, 파이썬 웹 프로그래밍, Django로 웹 서비스 개발하기


반응형

'개발' 카테고리의 다른 글

[Django] lotto - 앱 다듬기  (0) 2017.06.28
[Django] lotto - POST 처리  (0) 2017.06.28
[Django] lotto - MTV 연동하기  (0) 2017.06.28
[Django] lotto - shell을 이용한 장고 관리  (0) 2017.06.28
[Django] lotto - views와 템플릿 연동  (0) 2017.06.28

댓글