반응형
form을 이용해 입력을 받고, 처리하여, 다시 결과를 보여주는 로직을 구현하겠습니다.
1. localhost:5000/all의 db.html 화면에서 입력 받고,
2. __init__.py에서 라우팅 처리하고,
3. db.html에 결과를 보여줍니다.
1. __init__.py
form 으로부터 전달된 이름('nm')을 받아서 temp 변수에 저장하고, query.filter_by로 DB에서 조회한 후, 결과를 members로 저장합니다. 그리고 members의 갯수를 count에 저장합니다. render_template함수를 통해 db.html로 연결이 되는데, 이때 members와 count를 함께 넘겨줍니다.
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from helloflask.model import Members
from datetime import datetime
app = Flask(__name__)
# database 설정파일
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:1234@localhost:3306/testdb"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)
@app.route("/")
def home():
member = Members.query.first()
return 'Hello {0}, {1}, {2}, {3}, {4}'\
.format(member.name, member.email, member.phone, member.start.isoformat(), member.end.isoformat())
#return render_template('home.html')
@app.route('/all')
def select_all():
members = Members.query.all()
return render_template('db.html', members=members)
@app.route('/search', methods=['POST','GET'])
def calculate():
if request.method=='POST':
#temp = request.args.get('nm')
temp = request.form['nm']
members = Members.query.filter_by(name=temp)
count=members.count()
return render_template('db.html', members=members, cnt=count)
2.db.html
form 입력은 "POST" 형태로 이루어지고, 처리를 한 action을 명시해줍니다. 이후 "/search"에서 처리한 결과는 members 변수에 담아 전달됩니다. members 변수의 각 attribute를 출력하는 부분을 작성합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flask App</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<form method="POST" action="/search">
<div>
<label for="nm">검색이름</label>
<input type="text" name="nm">
</div>
<div class="'button'">
<button type="submit">검색</button>
</div>
</form>
<p>
{% if members ==None %}
<h5>결과가 없습니다.</h5>
{% else %}
<h5>{{ cnt }}개의 결과가 있습니다.</h5>
{% endif %}
<table>
{% for member in members %}
<tr>
<td>{{ member.id }}</td>
<td>{{ member.name }}</td>
<td>{{ member.email }}</td>
<td>{{ member.phone }}</td>
<td>{{ member.start }}</td>
<td>{{ member.end }}</td>
</tr>
{% endfor %}
</table>
</p>
</div>
</body>
</html>
<결과>
(1) localhost:5000/all 접속화면
(2) 검색이름에 '홍길동' 을 입력 후 검색한 화면
반응형
'Programming > Python_Web' 카테고리의 다른 글
FastAPI - Jinja2로 프론트 적용하기 (0) | 2021.09.09 |
---|---|
Flask강좌6 - 등록/로그인/로그아웃 (0) | 2020.12.04 |
Flask강좌4 - Flask_SQLAlchemy MySQL연동 (5) | 2020.12.02 |
Flask강좌3 - Request (0) | 2020.12.01 |
Flask강좌2 - Global Object: g, Response객체 (0) | 2020.12.01 |