آموزش پایتون: ساخت وب اپلیکیشن برای گردآوری داده با PostgreSQL و Flask

۷۵۰ بازدید
آخرین به‌روزرسانی: ۳۰ آبان ۱۴۰۲
زمان مطالعه: ۸ دقیقه
آموزش پایتون: ساخت وب اپلیکیشن برای گردآوری داده با PostgreSQL و Flask

کار کردن با پایگاه داده و کوئری‌ها در برخی موارد ممکن است برای برخی از افراد و یا شاید اغلب افراد کاملاً ملال‌آور باشد. ما قطعاً واقف هستیم که حتی گنجاندن عبارت PostgreSQL در عنوان این مطلب نیز باعث انصراف تعداد زیادی از خواننده‌های مجله فرادرس از مطالعه آن خواهد شد، اما شما که این مطلب را برای مطالعه انتخاب کرده‌اید، باید بدانید که پایگاه داده موضوع مهمی برای یادگیری محسوب می‌شود. مطالعه آنچه در ادامه آمده با موضوع ساخت وب اپلیکیشن برای گردآوری داده با PostgreSQL و Flask هیچ دشواری برای شما نخواهد داشت. پیشنهاد می‌کنیم قبل از مطالعه این راهنما، نقل‌قول زیر را دو بار بخوانید:

آن چه افراد خودساخته را از مردمی که زندگی الهام‌بخشی ندارند، جدا می‌سازد، این است که آن‌ها کارهایی انجام می‌دهند که افراد کمتر رشد‌ یافته دوست ندارند انجام دهند؛ هر چند آن‌ها نیز احتمالاً این کارها را دوست نداشته‌اند.

-رابین شارما - کتاب «راهبی که فِراری‌اش را فروخت»

شاید اغلب ما از کار با پایگاه داده خوشمان نیاید؛ اما همچنان که شارما در کتاب خود گفته است این همان چیزی است که ما را از انبوه مردم جدا می‌کند. در این مقاله قصد داریم یک وب‌سایت (با استفاده از Flask) بسازیم که داده‌هایی که کاربر در آن وارد می‌کند را در یک پایگاه داده (PostgreSQL) ذخیره کند. ضمناً آن را به صورت live طراحی می‌کنیم تا بتواند به صورت آنی عمل کند.

نکته مهم: ما در بخش چهارم این سری مقالات آموزش پایتون (+) یک وب اپلیکیشن با استفاده از Flask ساختیم و آن را با استفاده از اپلیکیشن سرویس کلود Heroku به صورت آنلاین درآوردیم. اگر آن مطلب را مطالعه نکرده‌اید پیشنهاد می‌کنیم پیش از ادامه مطالعه این مقاله سری به آن بزنید تا با روش راه‌اندازی فرانت‌اند، محیط مجازی و همچنین شیوه آنلاین ساختن اپلیکیشن آشنا شوید. ضمناً برای مطالعه قسمت قبلی این مجموعه مطلب آموزشی نیز می‌توانید روی لینک زیر کلیک کنید:

اگر آماده هستید اینک زمان آن رسیده است که کار خود را شروع کنیم.

گام اول: راه‌اندازی فرانت‌اند

همان طور که قبلاً اشاره کردیم، در این مقاله به طور عمده بر روی بک‌اند متمرکز خواهیم شد. اما این بدان معنی نیست که چیزهای دیگر را رها خواهیم کرد. ما هر چیزی را که لازم است ولو در حد یک یادآوری سریع، مورد اشاره قرار می‌دهیم تا افرادی که به صورت مبتدی این مقاله را شروع به مطالعه کرده‌اند بتوانند از آن بهره‌مند شوند.

Flask یک میکروفریمورک برای توسعه وب است و در اغلب موارد در زمان کار با پایگاه داده نیز استفاده می‌شود. ما یک صفحه وب ایجاد می‌کنیم که با استفاده از آن می‌توانیم ورودی کاربر را بگیریم. ایجاد یک وب‌سایت با استفاده از Flask کار آسانی محسوب می‌شود. به کد زیر نگاه کنید:

1#Import dependencies
2from flask import Flask, render_template
3
4#Create instance of Flask App
5app = Flask(__name__)
6
7#Define Route and Contant of that page
8@app.route("/")
9def index():
10    return render_template("index.html")
11
12#Define 2nd Route and Content
13@app.route("/success", methods = ['POST'])
14def success():
15    return render_template("success.html")
16
17#Running and Controlling the script
18if (__name__ =="__main__"):
19app.run(debug=True)

اگر بخش چهارم این سری مقالات آموزشی را مطالعه کرده باشید؛ ایده‌ای از شیوه کار این موارد خواهید داشت. تنها نکته جدید در کد فوق ['methods = ['POST است که برای ارسال داده‌ها به سرور استفاده می‌شود. ضمناً باید مطمئن شویم که محیط مجازی نیز برای این اپلیکیشن راه‌اندازی شده است. برای کسب اطلاعات بیشتر به بخش چهارم این مطلب (+) مراجعه کنید.

ما یک قالب را دانلود کردیم و آن را طوری تغییر دادیم که داده‌های قد، وزن، جنسیت و همچنین اندازه کفش کاربر را می‌پرسد. شاید از خود بپرسید اندازه قد و وزن ممکن است به کار بیاید، اما اندازه کفش کاربر به چه دردی می‌خورد؟ پاسخ این سؤال را در انتهای مقاله خواهید دانست. بنابراین فرانت‌اند به صورت زیر خواهد بود. البته شیوه طراحی آن بسته به میل شما می‌تواند تغییر پیدا کند:

 Flask

گام دوم: راه‌اندازی بک‌اند

در این بخش مراحلی که برای راه‌اندازی بک‌اند پروژه‌مان نیاز داریم توضیح داده‌ایم.

2.1 ایجاد یک پایگاه داده PostgreSQL

ما قصد داریم برای ایجاد یک مخزن داده از یک سیستم مدیریت پایگاه استفاده کنیم. از این رو از PostgreSQL به این منظور استفاده می‌کنیم. اگر روی سیستم ویندوز یا Mac کار می‌کنید، فایل‌های نصبی برای این پایگاه داده در وب‌سایت رسمی (+) آن وجود دارد. در صورتی که از سیستم لینوکس استفاده می‌کنید، می‌توانید با مراجعه به Ubuntu Software نسخه 16.04 یا جدیدتر به دنبال اپلیکیشن pgAdmin III بگردید. با این وجود اگر از اوبونتو 15.10 یا قدیمی‌تر استفاده می‌کنید (که البته بسیار بعید است!) می‌توانید با راهنمایی که در این صفحه (+) ارائه شده آن را به صورت دستی نصب کنید. ما قبلاً محیط مجازی خود را ایجاد کرده‌ایم و از این رو می‌توانید مراحل کار را در آن محیط اجرا کنید.

ایجاد کاربر

زمانی که pgAdmin 3 را نصب کردید باید یک کاربر ایجاد کرده و رمز عبوری برای آن تعیین کنید. در تصویر زیر عبارت postgres اول نام کاربری و postgres دوم نام پایگاه داده است.

اتصال به سرور localhost

pgAdmin3 را از file روی گوشه سمت چپ-بالا باز کنید و سپس گزینه add server را بزنید. در این زمان صفحه‌ای به صورت زیر می‌بینید که باید نام کاربری و رمز عبور خود را در آن وارد کنید:

PostgreSQL و Flask

PostgreSQL و Flask

همان طور که می‌بینید پایگاه داده postgres را که در زمان ایجاد کاربر ساخته‌ایم در این جا حضور دارد. روی گزینه databases راست کلیک کرده و یک پایگاه داده جدید برای ذخیره‌سازی داده‌ها ایجاد کنید. ما یک پایگاه داده به نام Data Collector ایجاد کردیم، چون این نام جالبی به نظر می‌رسید. اینک ما مجموعه داده خود را داریم و باید ستون‌ها (جداول) را که داده‌هایی در آن ذخیره خواهند شد ایجاد کنیم.

2.2 اتصال پایگاه داده و ایجاد جدول

SQLAlchemy به ما کمک می‌کند که به پایگاه داده خود وصل شویم و psycopg نیز یک پوشش PostgreSQL برای پایتون محسوب می‌شود. البته لزومی به آشنایی با جزییات آن نداریم و کافی است این دو کتابخانه را نصب کرده و به کدنویسی بپردازیم.

1#Import dependencies
2from flask import Flask, render_template
3from flask.ext.sqlalchemy import SQLAlchemy
4
5#Create instance of Flask App
6app = Flask(__name__)
7
8#Connect to the Database
9app.config['SQLALCHEMY_DATABASE_URI']='postgresql://postgres:postgres1@localhost/DataCollector'
10db = SQLAlchemy(app)
11
12class Data(db.Model):
13    #create a table
14    __tablename__ = "data"
15    id = db.Column(db.Integer, primary_key = True)
16    height = db.Column(db.Integer)
17    weight = db.Column(db.Integer)
18    shoesize = db.Column(db.Integer)
19    sex = db.Column(db.String)
20
21    def __init__(self, height, weight, shoesize, sex):
22        self.height = height
23        self.weight = weight
24        self.shoesize = shoesize
25        self.sex = sex
26
27#Define Route and Contant of that page
28@app.route("/")
29def index():
30    return render_template("index.html")
31
32#Define 2nd Route and Content
33@app.route("/success", methods = ['POST'])
34def success():
35    return render_template("success.html")
36
37#Running and Controlling the script
38if (__name__ =="__main__"):
39app.run(debug=True)

اتصال به پایگاه داده

در ادامه باید اپلیکیشن خود را با وارد کردن نام کاربری، رمز عبور و نام پایگاه داده پیکربندی کنیم. پس از //:postgresql ابتدا نام کاربری و سپس یک دونقطه (:) و سپس رمز عبور را وارد می‌کنیم. درنهایت نوبت به نام پایگاه داده می‌رسد. زمانی که این کارها را انجام دادید باید یک وهله از SQLAlchemy بسازید.

سپس نوبت به کلاس می‌رسد. برنامه‌نویسی شیءگرا در این مرحله به کمک ما می‌آید. اگر با مفاهیم شیءگرایی آشنا نیستید، پیشنهاد می‌کنیم مقاله زیر را مطالعه کنید:

ما به کمک وهله‌ای که ساخته‌ایم یک مدل ایجاد می‌کنیم. در این مدل نام جدول و نام همه ستون‌هایی را که کاربر در آن‌ها مقداری وارد می‌کند را می‌آوریم. ما قصد نداریم همه کدها را بنویسیم چون هنوز ناقص است و از این رو مدل را به صورت دستی اجرا می‌کنیم. به این منظور به دایرکتوری app بروید و کنسول پایتون را با وارد کردن دستور python باز کنید و دستورهای زیر را وارد کنید:

from app import db

db.create_all()

PostgreSQL و Flask

همان طور که می‌بینید جدول و همه ستون‌های ما آماده ذخیره‌سازی داده‌ها هستند. تنها کاری که اکنون باید انجام دهیم این است که 3 خط کد واقعی برای اجرایی شدن همه چیز بنویسیم.

2.3 ذخیره‌سازی داده‌ها در پایگاه داده

1#Import dependencies
2from flask import Flask, render_template, request
3from flask_sqlalchemy import SQLAlchemy
4
5#Create instance of Flask App
6app = Flask(__name__)
7
8#Connect to the Database
9app.config['SQLALCHEMY_DATABASE_URI']='postgresql://postgres:postgres1@localhost/DataCollector'
10db = SQLAlchemy(app)
11
12class Data(db.Model):
13    #create a table
14    __tablename__ = "data"
15    id = db.Column(db.Integer, primary_key = True)
16    height = db.Column(db.Integer)
17    weight = db.Column(db.Integer)
18    shoesize = db.Column(db.Integer)
19    sex = db.Column(db.String)
20
21    def __init__(self, height, weight, shoesize, sex):
22        self.height = height
23        self.weight = weight
24        self.shoesize = shoesize
25        self.sex = sex
26
27#Define Route and Contant of that page
28@app.route("/")
29def index():
30    return render_template("index.html")
31
32#Define 2nd Route and Content
33@app.route("/success", methods = ['POST'])
34def success():
35    if(request.method == 'POST'):
36        height_ = request.form["height"]
37        weight_ = request.form["weight"]
38        shoesize_ = request.form["shoesize"]
39        sex_ = request.form["sex"]
40        data = Data(height_,weight_,shoesize_,sex_)
41        db.session.add(data)
42        db.session.commit()
43        return render_template("success.html")
44
45#Running and Controlling the script
46if (__name__ =="__main__"):
47app.run(debug=True)

ما متد را بررسی می‌کنیم و در صورتی که POST باشد داده‌های وارد شده از سوی کاربر در متغیرها را ذخیره می‌کنیم. اینک باید یک «نشست» (Session) ایجاد، داده‌ها را به پایگاه داده اضافه و درنهایت کامیت کنیم. بدین ترتیب کار در این مرحله پایان می‌یابد.

PostgreSQL و Flask

PostgreSQL و Flask

گام سوم: توزیع وب اپلیکیشن روی سرور آنلاین

شما قبلاً با روش ایجاد 3 فایل مورد نیاز و توزیع وب اپلیکیشن روی سرورهای Heroku آشنا شده‌اید. برای این که این وب اپلیکیشن آنلاین شود ابتدا باید آن فرایند را تکرار کنیم. زمانی که وب اپلیکیشن آنلاین شد، باید یک پایگاه داده روی سرور Heroku بسازیم که اسکریپت اصلی ما را به جایی در localhost متصل می‌کند. به این منظور باید وارد CLI مربوط به Heroku شویم و یک پایگاه داده را با وارد کردن دستور زیر ایجاد کنیم. در این دستور dataforml نام اپلیکیشن ما است.

heroku addons:create heroku-postgresql:hobby-dev --app dataforml

نکته: ابتدا باید اپلیکیشن آنلاین شود تا بتوانید اقدامات فوق را اجرا کنید.

PostgreSQL و Flask

دستور زیر را وارد کنید تا URI پایگاه داده را مشاهده کنید و در اسکریپت اصلی نمایش یابد (خط 9 کد زیر را ببینید):

heroku config --app dataforml

اکنون گام نهایی همانند زمانی که جدول را روی localhost ایجاد کردیم، ساختن آن روی Heroku است. بنابراین پوسته پایتون را روی Heroku با دستور زیر باز کنید:

heroku run python
from (name of your main file) import db
db.create_all()
exit()

کد نهایی

بدین ترتیب کار به پایان رسیده و اپلیکیشن گردآوری داده‌ها راه‌اندازی شده است. کد این اپلیکیشن پس از پیکربندی پایگاه داده Heroku به صورت زیر درمی‌آید:

1#Import dependencies
2from flask import Flask, render_template, request
3from flask_sqlalchemy import SQLAlchemy
4
5#Create instance of Flask App
6app = Flask(__name__)
7
8#Connect to the Database
9app.config['SQLALCHEMY_DATABASE_URI']='postgres://qlypyonycmvmjc:4d216baa0889e5e1cf70f59ba26f9fa25e6abc2b6c86d952a489b6c3ef7bf452@ec2-23-23-184-76.compute-1.amazonaws.com:5432/d8cvi73sj545ot?sslmode=require'
10db = SQLAlchemy(app)
11
12class Data(db.Model):
13    #create a table
14    __tablename__ = "data"
15    id = db.Column(db.Integer, primary_key = True)
16    height = db.Column(db.Integer)
17    weight = db.Column(db.Integer)
18    shoesize = db.Column(db.Integer)
19    sex = db.Column(db.String)
20
21    def __init__(self, height, weight, shoesize, sex):
22        self.height = height
23        self.weight = weight
24        self.shoesize = shoesize
25        self.sex = sex
26
27#Define Route and Contant of that page
28@app.route("/")
29def index():
30    return render_template("index.html")
31
32#Define 2nd Route and Content
33@app.route("/success", methods = ['POST'])
34def success():
35    if(request.method == 'POST'):
36        height_ = request.form["height"]
37        weight_ = request.form["weight"]
38        shoesize_ = request.form["shoesize"]
39        sex_ = request.form["sex"]
40        data = Data(height_,weight_,shoesize_,sex_)
41        db.session.add(data)
42        db.session.commit()
43        return render_template("success.html")
44
45#Running and Controlling the script
46if (__name__ =="__main__"):
47app.run(debug=True)

بررسی صحت داده‌ها

اینک از کجا بدانیم که داده‌ها به صورت صحیحی ذخیره شده‌اند؟ برای بررسی داده‌ها می‌توانید پایگاه داده روی Heroku.com را باز کنید و یا دستور زیر را در خط فرمان وارد کنید:

heroku pg:psql --app dataforml

خروجی آن به صورت زیر است:

PostgreSQL و Flask

برای نوشتن یک کوئری از خط فرمان عبارت زیر را وارد کنید:

select * from data

در خروجی همه داده‌های ثبت‌شده خود را مشاهده خواهید کرد.

سخن پایانی

از آنجا که پردازش‌های کوچک زیادی در بک‌اند وجود دارند، پوشش دادن همه آن‌ها در یک مطلب کار دشواری است. اما ما در این نوشته تلاش کرده‌ایم همه مواردی که ضروری بودند را توضیح دهیم. در مورد داده‌ها نیز باید بگوییم که ما یک ابزار طبقه‌بندی جنسیت را آموزش می‌دهیم که به طبقه‌بندی جنسیت کاربر بر مبنای قد، وزن و اندازه کفش می‌پردازد. وب اپلیکیشن ما در حال حاضر در آدرس DataForML.herokuapp.com آنلاین است و در حدود یک دقیقه طول می‌کشد تا پاسخ دهد. شما نیز می‌توانید داده‌های خود را در آن وارد کنید.

قسمت بعدی این مجموعه مطلب را می‌توانید از طریق کلیک روی لینک زیر مطالعه کنید:

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۴ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
towardsdatascience
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *