Python-Flask – Tạo form submit, lưu vào database.
Tạo form với wtf-form. Thao tác trên Database Postgres với SqlAlchemy
.
3.
Kết nối Postgres với Python Flask web
Trước tiên cài đặt các công cụ sau: Flask-SQLAlchemy (Flask extension that
provides SQLAlchemy support), Psycopg2 (a Python
adapter for Postgres)
$ pip install psycopg2 Flask-SQLAlchemy
Trong hello.py
# SQL Alchemy
from flask_sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
#SQLALchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://<
user_name>:<password>@localhost/<database_name>'
db = SQLAlchemy(app)
Trong đó, khai báo <user_name>,
<password>,<database_name> theo đúng cấu hình mà bạn đã cài đặt
trong PgAdmin.
Khai báo các biến. Trong ví dụ này ta cần 2
biến username và email để lưu vào database, khai báo như sau:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username =
db.Column(db.String(80), unique=True)
email =
db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
4.
Tạo form
Phần này sử dụng công cụ flask_wtf để tạo
form.
Cài đặt flask_wtf. Mở CMD và đánh lệnh sau:
$
pip install Flask-WTF
Sau khi cài xong, mở hello.py
# Web form
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
Chúng ta sẽ tạo Form bao gồm 2 input: name và email, khai
báo như sau:
class MyForm(FlaskForm):
name = StringField('name', validators=[DataRequired()])
email = StringField('email', validators=[DataRequired()])
Trong thư mục templates, tạo file ‘submit.html’ (để hiễn thị
form):
<form method="POST" action="{{ url_for('submit') }}">
{{ form.csrf_token }}
{{ form.name.label }}
{{ form.name(size=80) }}
{{ form.email.label}}
{{ form.email(size=120)}}
<input type="submit" value="Submit">
</form>
Trong thư mục templates, tạo tiếp file ‘success.html’ (để
redirect sau khi submit thành công):
<div class="page-header">
<h1>Success!</h1>
</div>
Để hiễn thị form với địa chỉ ‘/submit’, trong hello.py.
@app.route('/submit', methods=['GET','POST'])
def submit():
form = MyForm()
if
form.validate_on_submit():
user=User(request.form['name'],request.form['email'])
db.session.add(user)
db.session.commit()
return redirect('/success')
return render_template('submit.html',form=form)
@app.route('/success')
def success():
return render_template('success.html')
Như trên, sau khi bấm nút Submit trên form, thông tin user sẽ được lưu vào database.
5.
Demo
Truy cập localhost:8080/submit
Sau đó nhập username và email -> bấm submit. Web sẽ lưu vào database và redirect qua trang success.html
Kiểm tra dữ liệu trong pgAdmin
Tìm đến mục Schemas/Tables/user (R_Click
user chọn View/Edit) để xem dữ liệu đã được lưu vào.
Nhận xét
Đăng nhận xét