· 5 years ago · May 29, 2020, 04:18 AM
1import json
2import sqlite3
3from sqlite3 import Error
4
5from flask import abort, Flask, jsonify, redirect, request, url_for
6
7"""
8menghubungkan database SQLite.
9"""
10def create_connection():
11 try:
12 return sqlite3.connect('flask.db')
13 except:
14 print('Error! cannot create the database connection.')
15 return None
16
17"""
18Membuat table 'users' di database, apabila tidak ada.
19"""
20def create_table():
21 try:
22 with create_connection() as conn:
23 c = conn.cursor()
24 c.execute('''
25 CREATE TABLE IF NOT EXISTS users(
26 id integer PRIMARY KEY,
27 name text NOT NULL
28 );
29 ''')
30 except Error as e:
31 print(e)
32
33"""
34Mengambil data dari table 'users'.
35"""
36def get(id=None, is_set=False):
37 with create_connection() as conn:
38 c = conn.cursor()
39
40 if id:
41 c.execute(
42 '''
43 SELECT *
44 FROM users
45 WHERE id = ?;
46 ''',
47 (id,)
48 )
49
50 row = c.fetchall()
51
52 if row:
53 row = row[0]
54 data = {
55 'id': row[0],
56 'name': row[1]
57 }
58 else:
59 data = []
60 else:
61 c.execute(
62 '''
63 SELECT *
64 FROM users;
65 ''',
66 )
67 data = [
68 {
69 'id': row[0],
70 'name': row[1]
71 } for row in c.fetchall()
72 ]
73 if data:
74 data = {
75 'code': 200,
76 'message': 'User berhasil ditemukan.',
77 'data': data
78 }
79 if is_set:
80 data['code'] = 201
81 data['message'] = 'Data user barhasil tersimpan.'
82 else:
83 abort(404)
84 return data
85
86"""
87Menambahkan data ke table 'users'.
88Parameter name adalah string dan wajib.
89"""
90def post():
91 with create_connection() as conn:
92 c = conn.cursor()
93
94 if request.json:
95 name = json.loads(
96 request.data
97 ).get('name')
98 else:
99 name = request.form.get('name')
100
101 if name:
102 c.execute(
103 '''
104 INSERT INTO users(name)
105 VALUES(?);
106 ''',
107 (name,)
108 )
109
110 id = c.lastrowid
111 else:
112 abort(400)
113
114 return get(id, True)
115
116"""
117Update salah satu data di table 'users'.
118"""
119def put(id):
120 with create_connection() as conn:
121 c = conn.cursor()
122
123 if request.json:
124 name = json.loads(
125 request.data
126 ).get('name')
127 else:
128 name = request.form.get('name')
129
130 if name:
131 c.execute(
132 '''
133 UPDATE users
134 SET name = ?
135 WHERE id = ?;
136 ''',
137 (name, id)
138 )
139 else:
140 abort(400)
141
142 return get(id, True)
143
144"""
145Delete salah satu data di table 'users'.
146"""
147def delete(id):
148 with create_connection() as conn:
149 c = conn.cursor()
150
151 c.execute(
152 '''
153 DELETE
154 FROM users
155 WHERE id = ?;
156 ''',
157 (id,)
158 )
159
160 return {
161 'code': 200,
162 'message': 'Data user berhasil dihapus.',
163 'data': None
164 }
165
166"""
167Fungsi untuk menampilkan data kedalam format Json.
168"""
169def response_api(data):
170
171 return (
172 jsonify(**data),
173 data['code']
174 )
175
176
177app = Flask(__name__)
178
179
180"""
181Fungsi untuk Exception Handling.
182"""
183@app.errorhandler(400)
184def bad_request(e):
185 return response_api({
186 'code': 400,
187 'message': 'Input "name" kosong atau ada kekeliruan input.',
188 'data': None
189 })
190@app.errorhandler(404)
191def not_found(e):
192 return response_api({
193 'code': 404,
194 'message': 'URL atau User tidak berhasil ditemukan.',
195 'data': None
196 })
197@app.errorhandler(405)
198def method_not_allowed(e):
199 return response_api({
200 'code': 405,
201 'message': 'URL atau User tidak berhasil ditemukan.',
202 'data': None
203 })
204@app.errorhandler(500)
205def internal_server_error(e):
206 return response_api({
207 'code': 500,
208 'message': 'Mohon maaf, ada gangguan pada server kami.',
209 'data': None
210 })
211
212"""
213Tampilan root '/' halaman awal.
214"""
215@app.route('/')
216def root():
217 return 'Mini project API CURD Menggunakan Flask'
218
219"""
220RESTful API /users.
221"""
222@app.route('/users', methods=['GET', 'POST'])
223@app.route('/users/<int:id>', methods=['GET', 'PUT', 'DELETE'])
224def users(id=None):
225 if request.method == 'GET':
226 data = get(id)
227 if request.method == 'POST':
228 data = post()
229 elif request.method == 'PUT':
230 data = put(id)
231 elif request.method == 'DELETE':
232 data = delete(id)
233 return response_api(data)
234
235if __name__ == '__main__':
236 create_table()
237 app.run(debug=True)