Self-Improvement

Head First Python 5-2장 본문

프로그래밍/Python

Head First Python 5-2장

JoGeun 2018. 10. 22. 18:52

※http://python.itcarlow.ie/ed2/ch05/에서 파일들을 받을 수 있음

*웹앱 hello_flask.py 최종 예제



윈도우에서 작성함

---------------------hello_flask.py------------------------
#render_template와 request을 임포트를 한다.
from flask import Flask, render_template, request  
#4장에서 작성한 vsearch.py모듈을 사용
from vsearch import search4letters

app = Flask(__name__)

@app.route('/search4', methods=['POST'])   
#URL 경로와 POST메소드를 사용 (데이터를 수용하기 위해)
def do_search() -> 'html':
    phrase=request.form['phrase']    
#phrase폼에 입력한 값을 받아온다
    letters=request.form['letters']   
  #letters폼에 입력한 값을 받아온다
    title = 'Here are your results:'
    results = str(search4letters(phrase, letters))    
#vsearch의 선언된 함수를 사용(4장 참조)
    #results.html로 렌더링을 하며 값을 넘겨준다.
    return render_template('results.html', the_phrase=phrase, the_letters=letters, the_title=title, the_results=results,)

#'/'경로시 '/entry'로 가게한다.
@app.route('/')
@app.route('/entry')
def entry_page() -> 'html':
    #entry.html로 렌더링을 하며 값을 넘겨준다.
    return render_template('entry.html', the_title='Welcome to search4letters on the web!')

app.run(debug=True)     
#디버거를 활성화사키며 코드변경시 자동으로 재실행
---------------------------------------------------------------


*html파일
template폴더에 entry.html, base,html, results,html 파일이 세개 있어야한다.





-------------------------entry.html--------------------------
{% extends 'base.html' %}

{% block body %}

<h2>{{ the_title }}</h2>

<form method='POST' action='/search4'>
<table>
<p>Use this form to submit a search request:</p>
<tr><td>Phrase:</td><td><input name='phrase' type='TEXT' width='60'></td></tr>
<tr><td>Letters:</td><td><input name='letters' type='TEXT' value='aeiou'></td></tr>
</table>
<p>When you're ready, click this button:</p>
<p><input value='Do it!' type='SUBMIT'></p>
</form>

{% endblock %}
-----------------------------------------------------------------



-------------------------base.html--------------------------
<!doctype html>
<html>
    <head>
        <title>{{ the_title }}</title>
        <link rel="stylesheet" href="static/hf.css" />
    </head>
    <body>
        {% block body %}

        {% endblock %}
    </body>
</html>
-----------------------------------------------------------------



-------------------------result.html--------------------------
{% extends 'base.html' %}

{% block body %}

<h2>{{ the_title }}</h2>

<p>You submitted the following data:</p>
<table>
<tr><td>Phrase:</td><td>{{ the_phrase }}</td></tr>
<tr><td>Letters:</td><td>{{ the_letters }}</td></tr>
</table>

<p>When "{{the_phrase }}" is searched for "{{ the_letters }}", the following 
results are returned:</p>
<h3>{{ the_results }}</h3>

{% endblock %}
---------------------------------------------------------------


*hf.css파일 작성 (교재의 스타일을 위하여 작성)




-------------------------hf.css--------------------------
body {
  font-family:      Verdana, Geneva, Arial, sans-serif;
  font-size:        medium;
  background-color: tan;
  margin-top:       5%;
  margin-bottom:    5%;
  margin-left:      10%;
  margin-right:     10%;
  border:           1px dotted gray;
  padding:          10px 10px 10px 10px;
}
a {
  text-decoration:  none; 
  font-weight:      600; 
}
a:hover {
  text-decoration:  underline;
}
a img {
  border:           0;
}
h2 {
  font-size:        150%;
}
table {
  margin-left:      20px;
  margin-right:     20px;
  caption-side:     bottom;
  border-collapse:  collapse;
}
td, th {
  padding:          5px;
  text-align:       left;
}
.copyright {
  font-size:        75%;
  font-style:       italic;
}
.slogan {
  font-size:        75%;
  font-style:       italic;
}
.confirmentry {
  font-weight:      600; 
}

/*** Tables ***/

table {
font-size:          1em;
background-color:   #fafcff;
border:             1px solid #909090;
color:              #2a2a2a;
padding:            5px 5px 2px;
border-collapse:    collapse;
}

td, th {
border:             thin dotted gray;
}

/*** Inputs ***/
input[type=text] {
  font-size:        115%;
  width:            30em;
}
input[type=submit] {
  font-size:        125%;
}
select {
  font-size:        125%;
}
----------------------------------------------------

*실행
app.run(debug=True)로 인해 디버거가 활성화되었으며 코드변경시 자동으로 재시작을 해준다.





172.0.0.1:5000/으로 접속해도 /entry로 접속하게 된다. 이유는 hello_flask.py 내용확인




/entry로 접속하게되면 Letters에 초기값이 저장되어있다 전 5-1포스터에서 코드를 확인하면 알 수 있다.



Phrase값에서 Letters들을 찾아내는 결과물이다.




xyz와 맞는 철자가 없어서 빈 집합이 표시가 된다.