5 Fri
[HEAD FIRST PYTHON] 5๊ฐ ์น์ฑ ๋ง๋ค๊ธฐ
Flask ์ค์น
pip install flask
๊ฐ์ํ๊ฒฝ์์ ์ค์น
์ด ๋ flask๊ฐ ์์กด์ฑ์ ๊ฐ๋ ๋ค ๊ฐ์ ๋ชจ๋์ด ํจ๊ป ์ค์น๋๋ค.
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 flask-1.1.2 itsdangerous-1.1.0
Flask
๋ง์ดํฌ๋ก ์น ํ๋ ์์ํฌ
ํ์คํฌ์ ํ์ํ ์ต์ํ์ ๊ธฐ์ ์งํฉ์ ์ ๊ณต
๊ฒฝ์์์ธ ์ฅ๊ณ ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ค
1 : f๊ฐ ์๋ฌธ์์ธ flask๋ ๋ชจ๋๋ช ์ด๋ฉฐ F๊ฐ ๋๋ฌธ์์ธ Flask๋ ํด๋์ค๋ช ์ด๋ค.
import flask.Flask๋ ๊ฐ๋ฅํ์ง๋ง ๊ฐ๋ ์ฑ์ ์ํด from - import ๋ฅผ ์ฌ์ฉํ๋ค.
2 : Flask ํด๋์ค์ ์ธ์คํดํธ๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ app์ด๋ผ๊ณ ์ ์ํ๋ค. Flask ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ํ์ฌ ๋ฒ์ ์ __name__์ ์ธ์๋ก ๋ฐ์์ผ ํ๋ค.
__name__์ ํ์ฌ ํ์ฑ ๋ชจ๋์ ์ด๋ฆ
__name__๊ณผ ๊ฐ์ ๋ณ์๋ ๋ ๊ฐ์ ์ธ๋์ค์ฝ์ด๊ฐ ์์์ ์กด์ฌํ์ฌ ๋๋ธ ์ธ๋์ค์ฝ์ด๋ผ๊ณ ํ๋ค. ์ด๋ ์ค์ฌ์ ๋๋ ๋ค์, dunder name ์ด๋ผ๊ณ ๋ ํ๋ค.
4 : ์ฅ์์๋ฅผ ์ฌ์ฉํ๋ค.
์ฅ์์, decorator๋ ๊ธฐ์กด ์ฝ๋์ ์๋ก์ด ๋์์ ์ถ๊ฐํ๋ค. ์ด ๋ ํจ์์ ์ฝ๋๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ๋ ๋์์ ์กฐ์ ํ ์ ์๋ค. ํจ์๋ฟ ์๋๋ผ ํด๋์ค์๋ ์ฅ์์๋ฅผ ์ ์ฉํ ์ ์๋ค. ์ฃผ๋ก ํจ์์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ํจ์ ์ฅ์์๋ผ๊ณ ๋ง์ด ํ๋ค.
@ ๊ธฐํธ๋ก ์์ํ๋ค.
์ด ๋ URL '/' ๋ ๋ค์ ํ์ ์๋ ํจ์์ ์ด์ด์ง๋ค. URL ์์ฒญ์ด ๋ค์ด์์ ๋ ์ด๋ค ํจ์๋ฅผ ํธ์ถํ ๊ฒ์ธ์ง ์กฐ์ ํ๋ค. ์ด ๋ ์ฅ์์๋ ํจ์์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ๋ ๊น์ง ๋๊ธฐํ๋ค๊ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋๋ฉด ๋๊ธฐ ์ค์ธ ์น ๋ธ๋ผ์ฐ์ ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
'/' URL๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์๋ฒ ์์ฒญ์๋ ํจ์๋ฅผ ๋ฐํํ๋ฉฐ ๊ทธ ์ธ์ URL๋ก ๋ค์ด์ค๋ ์์ฒญ์๋ 404
Resource not found
์๋ฌ ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค.
8 : ์น์ฑ ์คํ ์์ฒญ
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด ํ๋ผ์คํฌ ์น ์๋ฒ๊ฐ ์คํ๋๋ฉฐ ํ๋ผ์คํฌ์ ํ ์คํธ ์น ์ฃผ์(127.0.0.1)์ ํ๋กํ ์ฝ ํฌํธ ๋ฒํธ(5000)๋ก ์๋น์ค ์น ์์ฒญ์ ๊ธฐ๋ค๋ฆฐ๋ค๋ ๋ฉ์์ง๊ฐ ๋ํ๋๋ค.
์น์ ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ
4์ฅ์์ ๋ง๋ค์๋ vsearch ๋ชจ๋์ ์ด์ฉํด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค.
์ด ๋
app.run(debug=True)
๋ก ์ค์ ํ๊ฒ ๋๋ฉด, ์ฝ๋๋ฅผ ๊ณ ์น ๋๋ง๋ค ์ฌ์คํ ํ์ง ์์๋ ์น ์๋ฒ๊ฐ ์์์ ๋ฆฌ๋ก๋ ๋๋ค.
127.0.0.1
์ localhost๋ผ ์๋ ค์ง ์ธํฐ๋ท์ ๋ฃจํ๋ฐฑ ์ฃผ์๋ฅผ ์๋ฏธํ๋ค. ์ด ์ฃผ์๋ IP์ ๊ด๊ณ์์ด ๋ด ์ปดํจํฐ๋ฅผ ์ง๋ชฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.5000
์ ์น ์๋ฒ๊ฐ ์คํ ์ค์ธ ํ๋กํ ์ฝ ํฌํธ ๋ฒํธ๋ฅผ ์๋ฏธํ๋ค. ๋ณดํต ์น์๋ฒ๋80
์ด๋ผ๋ ํฌํธ ๋ฒํธ์์ ์คํ๋๋ฉฐ, ์น์ฑ์ ๊ฐ๋ฐํ๋ ๋์์๋80
๋ฒ์ ์ฐ์ง ์๋ ๊ฒ์ด ๊ด๋ก์ด๋ค.8080
๋ฒ ํฌํธ๊ฐ ๊ฐ๋ฐ ์ ์์ฃผ ์ฌ์ฉํ๋ ํฌํธ ์ค ํ๋์ด๋ค. ํ๋ผ์คํฌ๋ ํ ์คํธ ํ๋กํ ์ฝ ํฌํธ๋ก5000
๋ฒ์ ์ฌ์ฉํ๋ค.
ํ ํ๋ฆฟ ์์ง
HTML์ ์ฝ๋์ ์์ฑํ๋ ๊ฒ์ ์๋ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ง๋ง ํ์ฅ์ฑ์ ๋จ์ด์ง๋ค. ์น์ฑ์ด ๋ ์ปค์ง์๋ก ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ฉฐ ์ด๋ฅผ ์น ๋์์ด๋์๊ฒ ๋๊ฒจ์ ๊ฐ์ ํ๊ธฐ๋ ์ด๋ ต๋ค
๋ฐ๋ผ์ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ๋ค
ํ๋ก๊ทธ๋๋จธ๊ฐ ์น ํ์ด์ง ๊ฐ์ ํ ์คํธ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ฒด ์งํฅ ๊ฐ๋ ์ ์ ์ฉํ ์ ์๋๋ก ํ๋ค.
๋ค์๊ณผ ๊ฐ์ ์ต์์ ํ ํ๋ฆฟ์ ์์ฑํ๋ค. ์ดํ ์ฌ๋ฌ ํ์ ํ ํ๋ฆฟ์ด ์ถ๊ฐ๋๋ค.
5 : css๋ html์ ์คํ์ผ์ ๊ฒฐ์ ํ๋ ํ ์คํธ๋ก ์ฌ๊ธฐ์๋ hf.css๋ฅผ ์ฌ์ฉํ ๊ฒ์ผ๋ก ๋ช ์ํ๊ณ ์๋ค.
8, 10 : block body ๊ณผ endblock ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ํ ํ๋ฆฟ์ ํ์ฅํ ๊ฒ์ ๋ช ์ํ๊ณ ์๋ค.
๋ค์์ ๊ธฐ๋ณธ ๋ฒ ์ด์ค ํ ํ๋ฆฟ
bast.html
์ block body์ endblock ์ฌ์ด์ ๋ค์ด๊ฐ ์ ์๋entry.html
๊ณผresults.html
์ด๋ค.
HTTP ์ํ ์ฝ๋
GET ๋ฉ์๋
๋ธ๋ผ์ฐ์ ๊ฐ ์น ์๋ฒ๋ก ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ๋ฉ์๋
POST ๋ฉ์๋
๋ธ๋ผ์ฐ์ ๊ฐ HTTP๋ฅผ ํตํด ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฉ์๋
Render_Template
๋ค๋ฅธ ํ ํ๋ฆฟ์ผ๋ก ๋์ ๋ณ์๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉํ ์ ์๋ค
๋ง์ง๋ง์
,
๋ฅผ ๋ช ์ํด์ค์ผํ๋ค.
Redirect
redirect๋ฅผ ์ด์ฉํด์ URL('/') ์ URL('/entry')๋ก redirectํ ๋ชจ์ต
์ด๋ ์๋์ ๊ฐ์ด ๋ฐ๊ฟ์ ์ธ ์ ์๋ค.
์ต์ข ์ฝ๋
vsearch4web.py
app.run()
๋ฐฐํฌ์์๋
app.run()
์ ์คํํ ๊ฒฝ์ฐ ์น์ฑ ์คํ์ด ๊ฑฐ์ ๋๋ค. ์ด๋ ํ์ด์ฌ์ ๋์จ์ด์์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ.๊ทธ๋ฌ๋ ๋๋ฒ๊น ๋ฐ ๊ฐ๋ฐ์์๋
app.run()
์ ์ฌ์ฉํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๊ฐ๋ฐ์์๋ง ์คํํ๊ฒ ๋๋ค.
Last updated
Was this helpful?