Python, 로또 당첨 번호 확인 홈페이지 제작 (9)
http://conansjh20.pythonanywhere.com/lottopage/
위의 홈페이지를 만들기 위한 모든 과정을 하나하나 포스팅 하도록 하겠습니다.
일단 앞서 만들었던 내 로또 프로그램 lotto.py를 앱 폴더로 복사합니다.
굳이 한번더 lotto.py의 내용을 보면 다음과 같습니다.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import requests
from bs4 import BeautifulSoup
import re
def lotto(numbers):
get_address = requests.get("https://www.dhlottery.co.kr/common.do?method=main")
get_content = get_address.content
get_html = BeautifulSoup(get_content, "html.parser")
get_time = get_html.find("strong",{"id":"lottoDrwNo"}).text
get_date = get_html.find("span",{"id":"drwNoDate"}).text
num_filter = re.compile('drwtNo.*')
wn = []
for get_num in get_html.find_all("span",{"id": num_filter}):
wn.append(get_num.get_text())
bonus_num = get_html.find("span",{"id":"bnusNo"}).text
bn = bonus_num
wn = list(wn)
get_mynum = str.split(numbers)
yield get_time
yield get_date
yield wn
yield bn
yield get_mynum
k = 0
for i in wn:
if i in get_mynum:
k = k + 1
if k == 5:
if bn in get_mynum:
yield "2등"
else:
yield "3등"
elif k == 6:
yield "1등"
elif k == 4:
yield "4등"
elif k == 3:
yield "5등"
else:
yield "꽝"
|
cs |
그리고 views.py 를 엽니다.
1
2
3
4
|
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
from .lotto import lotto
|
cs |
일단 3열과 4열에 위와 같이 추가로 import합니다. django의 template에 있는 html 파일을 불러오기 위한 기능과 같은 경로에 있는 lotto.py의 lottopage 함수를 불러오기 위함입니다.
이어서 첫 홈페이지를 열기 위한 함수를 다음과 같이 작성합니다.
1
2
3
|
def lottopage(self):
context = {}
return render(self, 'lotto/lottopage.html', context)
|
cs |
위의 함수는 정말 아무 내용도 없이 순수한 html을 열기위한 가장 기본적인 내용이라 볼 수 있습니다.
일단 두번째 줄과 같이 context의 내용을 작성하고(위 구문에서는 내용이 없습니다.),
세번째 줄과 같은 형식으로 html파일을 context 내용과 함께 내보내는 것입니다.
templates 폴더에 lotto폴더를 만들어 그 안에 html파일을 넣었기 때문에 위에 경로를 lotto/를 넣었습니다.
홈페이지에 처음 들어갔을 때 나오는 화면에서는 실제로 파이썬 프로그램을 이용하지 않고 입력한 값을 처리할 때 만든 lotto.py 파이썬 프로그램을 적용하기 때문에 위는 단순히 첫 페이지를 보여주는 역할만 합니다.
그리고 앞서 만든 lottopage.html파일의 값, 즉 내 로또 번호를 입력하는 부분을 보면 다음과 같습니다.
1
2
3
4
5
6
|
<form action="{% url 'lottoresult' %}" method = "post">
{% csrf_token %}
<input placeholder="당첨번호를 입력하세요. (예: 1 11 21 31 41 45)" type="text" name="inputVal"/>
<button type="submit" class="button button1">
확인
</button>
|
cs |
위부분은 다음과 같이 보여집니다. (참고로 css 속성을 적용한 값입니다.)
1
|
<form action="{% url 'lottoresult' %}" method = "post">
|
cs |
<form>을 설정합니다. 그리고 action은 동작했을 때 수행하는 절차인데 {% %}로 묶인 부분을 보면 url 'lottoresult'로 되어 있고 이는 lottoresult 페이지로 이동한다는 말입니다. 결과 화면을 의미합니다. 그리고 method는 post로 작성합니다.
1
|
{% csrf_token %}
|
cs |
이부분은 post로 값을 넘겨줄 때 해킹을 막기 위하여 써주는 구문이라 합니다. 그냥 써주시면 됩니다.
1
|
<input placeholder="당첨번호를 입력하세요. (예: 1 11 21 31 41 45)" type="text" name="inputVal"/>
|
cs |
내 숫자를 입력하는 입력창입니다. placeholder는 보시는 바와 같이 사전 입력 값이고 type은 문자열 타입 text로 설정합니다. 그리고 name을 inputValue로 작성하였는데 곧 요약해보면 post라는 방법으로 입력한 text을 inputValue라는 이름으로 lottoresult 경로로 넘겨준다는 것입니다.
1
2
3
|
<button type="submit" class="button button1">
확인
</button>
|
cs |
이부분은 입력 버튼입니다. 문자열을 입력하고 엔터를 쳐도 되고 submit 기능이 있는 위 버튼을 눌러도 되는 것이죠.
앞서 말했듯이 숫자를 입력한 후 수행(submit)하면 lotto 경로로 넘어가 주기 때문에 로또 앱 안의 urls.py에 lottoresult경로를 추가해 주고 그 경로에는 views.py의 lottoresult 함수를 수행해 줄 수 있도록 작성합니다.
1
2
3
4
|
urlpatterns = [
path('', views.lottopage, name="lottopage"),
path('lottoresult/', views.lottoresult, name="lottoresult"),
]
|
cs |
위와 같이 추가합니다.
그리고 이제 views.py안의 핵심인 lottoresult 함수를 작성할 차례입니다.