Professional Documents
Culture Documents
Tutorial Flask - Project Final
Tutorial Flask - Project Final
Pendahuluan
Flask adalah kerangka kerja aplikasi web bersifat
kerangka kerja mikro yang ditulis dalam bahasa
pemrograman Python dan menggunakan dependensi
Werkzeug dan Jinja2.
Flask bisa digunakan untuk membuat website rumit yang berbasis database, memulai dengan
membuat halaman statik berguna untuk memperkenalkan alur kerja, yang nantinya digunakan
untuk membuat halaman lain yang lebih rumit.
4. Setelah diekstak copy folder build, dist, plugins ke folder static kalian
5. Setelah itu copy file index.html dari adminLte ke folder templates kalian dan ubah namanya
menjadi base.html
6. Setelah itu edit file base.html sesuai dengan ketentuan seperti sebelumnya dengan mengubah
directory librarynya menjadi isi dari folder static
7. Setelah itu berikan block content untuk isi dari conten nantinya
8. Setelah itu berikan block title untuk title dari conten nantinya
{% extends 'base.html' %}
{% block title %} Dashboard{% endblock %}
{% block content %}
<p>C</p>
</div>
<div class="icon">
<i class="ion ion-stats-bars"></i>
</div>
<a href="/chartSuhu" class="small-box-footer">More info <i
class="fas fa-arrow-circle-right"></i></a>
</div>
</div>
<div class="col-lg-3 col-6">
<!-- small box -->
<div class="small-box bg-warning">
<div class="inner">
<h3>Kelembapan</h3>
<p>C</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#" class="small-box-footer">More info <i class="fas
fa-arrow-circle-right"></i></a>
</div>
</div>
<p>C</p>
</div>
<div class="icon">
<i class="ion ion-stats-bars"></i>
</div>
<a href="#" class="small-box-footer">More info <i class="fas
fa-arrow-circle-right"></i></a>
</div>
</div>
<div class="col-lg-3 col-6">
<!-- small box -->
<div class="small-box bg-image">
<div class="inner">
<h3>Kelembapan</h3>
<p>C</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#" class="small-box-footer">More info <i class="fas
fa-arrow-circle-right"></i></a>
</div>
</div>
{% block chart %} {% endblock %}
{% endblock %}
11. Setelah buat file chartSuhu.html untuk file ini tidak perlu menuliskan lagi kode
sebelumnya kita hanya perlu mengextends file index.html dan mengisi block chart
sepertid dibawah
{% extends 'index.html' %}
{% block chart %}
<div class="col-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title">Chart Cahaya</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-
widget="collapse">
<i class="fas fa-minus"></i>
</button>
<button type="button" class="btn btn-tool" data-card-
widget="remove">
<i class="fas fa-times"></i>
</button>
</div>
</div>
<div class="card-body">
<div class="chart">
<canvas id="myChart" style="min-height: 250px; height:
250px; max-height: 250px; max-width: 100%;"></canvas>
</div>
</div>
<!-- /.card-body -->
</div>
</div>
<script>
const ctx = document.getElementById('myChart');
const myChart = new Chart(ctx, {
type: 'line',
data: {
labels:{{create | safe}},
datasets: [{
label: '# of Votes',
data: {{ldr | safe}},
fill: true,
borderColor:'rgb(139,0,0)',
borderWidth: 0.1
}]
},
options: {
responsive: true
}
});
</script>
{% endblock %}
12. Setelah buat file chartKelembapan.html untuk file ini tidak perlu menuliskan lagi kode
sebelumnya kita hanya perlu mengextends file index.html dan mengisi block chart
sepertid dibawah
{% extends 'index.html' %}
{% block chart %}
<div class="col-12">
<div class="card card-warning">
<div class="card-header">
<h3 class="card-title">Chart Kelembapan</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-
widget="collapse">
<i class="fas fa-minus"></i>
</button>
<button type="button" class="btn btn-tool" data-card-
widget="remove">
<i class="fas fa-times"></i>
</button>
</div>
</div>
<div class="card-body">
<div class="chart">
<canvas id="myChart" style="min-height: 250px; height:
250px; max-height: 250px; max-width: 100%;"></canvas>
</div>
</div>
<!-- /.card-body -->
</div>
</div>
<script>
const ctx = document.getElementById('myChart');
const myChart = new Chart(ctx, {
type: 'line',
data: {
labels:[1,2,3,4,5,6,7],
datasets: [{
label: '# of Votes',
data: [3,4,5,6,7],
fill: true,
borderColor:'rgb(139,0,0)',
borderWidth: 0.1
}]
},
options: {
responsive: true
}
});
</script>
{% endblock %}
13. Setelah buat file lampu.html untuk file ini tidak perlu menuliskan lagi kode sebelumnya
kita hanya perlu mengextends file base.html dan mengisi block chart sepertid
dibawah
{% extends 'base.html' %}
{% block title %} Lampu {% endblock %}
{% block content %}
14. Setelah itu buat file login.html untuk membuat form login setelah itu ketikan code
dibawah ini
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1">
<title>Smart HOME | Log in</title>
<p class="mb-1">
<a href="forgot-password.html">I forgot my password</a>
</p>
<p class="mb-0">
<a href="/register" class="text-center">Register a new
membership</a>
</p>
</div>
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
<div class="card">
<div class="card-body register-card-body">
<p class="login-box-msg">Register a new membership</p>
<a href="/login" class="text-center">I already have a
membership</a>
</div>
<!-- /.form-box -->
</div><!-- /.card -->
</div>
<!-- /.register-box -->
16. Setelah itu kembali dan buat app.py untuk isi app.py seperti yang ada dibawah
app = Flask(__name__)
@app.route('/')
def hello():
return render_template('index.html')
@app.route('/chartSuhu')
def suhu():
return render_template('chart.html')
@app.route('/lampu')
def lampu():
return render_template('lampu.html')
17. Jika langkah anda sudah benar akan muncul tampilan seperti yang ada dibawah
setting login
1. Buka app.py dan importkan library dibawah
from flask import Flask, request, flash, session, url_for,
redirect, render_template, jsonify
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import RPi.GPIO as GPIO
import time
3. Setelah itu buat model untuk tabel user dan berikan perintah untuk membuat
database dan tabel
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(100))
name = db.Column(db.String(1000))
db.create_all()
user = User.query.filter_by(email=email).first()
if user:
flash('Email Sudah ada')
return redirect(url_for('register'))
db.session.add(new_user)
db.session.commit()
return redirect(url_for('login'))
user = User.query.filter_by(email=email).first()
if (user.password != password):
flash('Please check your login details and try again.')
return redirect(url_for('login'))
session['username'] = user.name
return redirect(url_for('index'))
9.
Setting lampu
1. Pertama setting GPIO untuk mematikan dan menghidupkan lampu
GPIO.setmode(GPIO.BOARD)
GPIO.setup(5,GPIO.OUT)
2. Buat route unutuk menampilkan halaman lampu
@app.route('/lampu')
def lampu():
lamp = "mati"
return render_template('lampu.html',lamp=lamp)
Setting monitoring
1. Pertama buat variabel ldr1 untuk pin dari sensor
ldr1 = 3
def rc_time(ldr):
count = 0
GPIO.setup(ldr, GPIO.OUT)
GPIO.output(ldr, GPIO.LOW)
time.sleep(3)
GPIO.setup(ldr, GPIO.IN)
while (GPIO.input(ldr) == GPIO.LOW):
count += 1
return count
class ldr(db.Model):
id = db.Column(db.Integer, primary_key=True)
ldr = db.Column(db.Integer)
created = db.Column(db.DateTime,
nullable=True,default=datetime.today)
4. Setelah itu buat route proses_cahaya untuk memasukan data dari sensor ke
database
@app.route('/proses_cahaya')
def proses_cahaya():
val=rc_time(3)
ldr3=ldr(ldr=val)
db.session.add(ldr3)
db.session.commit()
return redirect(url_for('cahaya')
5. Setelah itu buat route chartCahya untuk menampilkan data dari database
kedalam bentuk grafik atau chart
@app.route('/chartCahaya')
def cahaya():
proses_cahaya()
ld=ldr.query.all()
ld1=[]
create=[]
for amounts in ld:
ld1.append(amounts.ldr)
create.append(amounts.created.strftime('%M:%S'))
return
render_template('chartSuhu.html',ldr=ld1,create=create)
@app.route('/chartKelembapan')
def kelembapan():
return render_template('chartKelembapan.html')
@app.route('/lampu')
def lampu():
lamp = "mati"
return render_template('lampu.html',lamp=lamp)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///user.sqlite3'
app.config['SECRET_KEY'] = "random string"
db = SQLAlchemy(app)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(5,GPIO.OUT)
ldr1 = 3
tunda = 5
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(100))
name = db.Column(db.String(1000))
class ldr(db.Model):
id = db.Column(db.Integer, primary_key=True)
ldr = db.Column(db.Integer)
created = db.Column(db.DateTime,
nullable=True,default=datetime.today)
db.create_all()
def rc_time(ldr):
count = 0
GPIO.setup(ldr, GPIO.OUT)
GPIO.output(ldr, GPIO.LOW)
time.sleep(3)
GPIO.setup(ldr, GPIO.IN)
while (GPIO.input(ldr) == GPIO.LOW):
count += 1
return count
@app.route('/proses_cahaya')
def proses_cahaya():
val=rc_time(3)
ldr3=ldr(ldr=val)
db.session.add(ldr3)
db.session.commit()
return redirect(url_for('cahaya'))
@app.route('/index')
def index():
return render_template('index.html')
@app.route('/chartCahaya')
def cahaya():
proses_cahaya()
ld=ldr.query.all()
ld1=[]
create=[]
for amounts in ld:
ld1.append(amounts.ldr)
create.append(amounts.created.strftime('%M:%S'))
return
render_template('chartSuhu.html',ldr=ld1,create=create)
@app.route('/chartKelembapan')
def kelembapan():
return render_template('chartKelembapan.html')
@app.route('/lampu')
def lampu():
lamp = "mati"
return render_template('lampu.html',lamp=lamp)
@app.route('/')
def login():
return render_template('login.html')
@app.route('/register')
def register():
return render_template('register.html')
@app.route('/registerProses', methods=['POST'])
def proses_register():
email = request.form.get('email')
name = request.form.get('name')
password = request.form.get('password')
user = User.query.filter_by(email=email).first()
if user:
flash('Email Sudah ada')
return redirect(url_for('register'))
db.session.add(new_user)
db.session.commit()
return redirect(url_for('login'))
@app.route('/loginProses', methods=['POST'])
def proses_login():
email = request.form.get('email')
password = request.form.get('password')
user = User.query.filter_by(email=email).first()
if (user.password != password):
flash('Please check your login details and try again.')
return redirect(url_for('login'))
session['username'] = user.name
return redirect(url_for('index'))
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('login'))
@app.route('/lampu/<action>')
def prosesLampu(action):
if(action =="hidup"):
GPIO.output(5,False)
lamp = "mati"
if(action =="mati"):
GPIO.output(5,True)
lamp = "hidup"
return render_template('lampu.html',lamp=lamp)