نحوه ایجاد یک رابط کاربری برای برنامه پایتون


پایتون یکی از زبان های برنامه نویسی رایج برای خودکارسازی فرآیندهای سئو است.

یکی از بهترین کتابخانه‌ها برای ایجاد یک فرانت‌اند برای برنامه‌های ما بدون دانش HTML، CSS، یا کدنویسی با فریم‌ورک مبتنی بر جاوا اسکریپت، بسته Streamlit است.

در این آموزش Streamlit، به نحوه ایجاد یک برنامه زیبا با پایتون و Dockerfile برای استقرار برنامه Streamlit خود خواهیم پرداخت.

Streamlit چیست؟

Streamlit یک چارچوب برنامه منبع باز (یک بسته پایتون) است که به ما قدرت ایجاد برنامه های زیبا و ظاهری زیبا بدون دانش توسعه front-end را می دهد.

این ما را از دخالت در هر چارچوب front-end یا کدنویسی در HTML، CSS و جاوا اسکریپت آزاد می‌کند.

شما از Python خالص برای توسعه front-end خود استفاده می کنید.

کتابخانه Streamlit چه زمانی مفید خواهد بود؟

اول از همه، اگر اسکریپت‌های پایتون را کدنویسی می‌کنید که به طور منظم روی ماشینی با زمان‌بندی کار مانند cron اجرا می‌شوند، Streamlit برای شما مفید نیست.

اما اگر در حال توسعه ابزاری هستید که می‌خواهید با اعضای تیم خود به اشتراک بگذارید، به عنوان مثال، یک برنامه تحقیق کلمات کلیدی، می‌توانید از Streamlit استفاده کنید.

همچنین، اگر به یک روش احراز هویت کاربر نیاز دارید، جامعه Streamlit بسته ای را توسعه داده است که می تواند آن را برای شما مدیریت کند.

ایجاد یک برنامه Streamlit: شروع به کار

بیایید یک برنامه ساده ایجاد کنیم که درخواست های تکمیل خودکار یک کلمه کلیدی اولیه را از API عمومی Google دریافت می کند.

قبل از شروع، یک پوشه در دستگاه خود ایجاد کنید و نام آن را آنچه می خواهید بگذارید.

همچنین، من فرض می‌کنم که شما قبلا پایتون را نصب کرده‌اید و اصول برنامه‌نویسی پایتون را می‌دانید.

برای کل فرآیند، باید از این کتابخانه های پایتون استفاده کنیم:

  • درخواست ها.
  • Streamlit.
  • Streamlit-Authenticator.
  • PyYAML.

همچنین، یک کتابخانه استاندارد پایتون را وارد خواهیم کرد:

کد آموزشی را می توان در مخزن قالب استارتر Streamlit من در Github یافت.

نصب بسته Streamlit

اول از همه، ترجیح می دهم با اجرای python3 -m venv .env یک محیط مجازی ایجاد کنم و سپس با اجرای pip3 install streamlit بسته Streamlit را نصب کنم.

حالا یک اسکریپت پایتون بسازید. بگذارید آن را streamlit_app.py بنامیم.

در پروژه‌های پیچیده‌ای که توابع زیادی دارند، ترجیح می‌دهم فایل‌های اسکریپت پایتون جداگانه برای توابع مختلف خود داشته باشم و سپس آن‌ها را به streamlit_app.py وارد کنم یا یک برنامه جداگانه با Flask یا FastAPI ایجاد کنم.

به عنوان مثال، در یک برنامه تحقیق کلمات کلیدی، من یک اسکریپت پایتون برای توابع مختلف دارم که داده ها را از Semrush دریافت می کند، یک اسکریپت برای دریافت 10 یا 20 نتیجه برتر از Google، یک اسکریپت برای دریافت تکمیل خودکار گوگل و جستجوهای مرتبط با Google و غیره. .

جستجوهای تکمیل خودکار Google را دریافت کنید

برای درخواست، باید از بسته Requests استفاده کنیم. برای دریافت این بسته، باید درخواست های نصب pip3 را اجرا کنید.

همچنین، برای تجزیه پاسخ API تکمیل خودکار، باید کتابخانه JSON استاندارد پایتون را وارد کنیم.

اول از همه، ما کتابخانه استاندارد JSON، بسته Requests برای ایجاد درخواست و Streamlit را برای ایجاد برنامه خود وارد می کنیم.

سپس، تابعی را برای دریافت پرس و جوهای تکمیل خودکار گوگل به عنوان لیستی از رشته ها تعریف کردم.

من دو بار از تابع تعویض برای ساده نگه داشتن همه چیز استفاده کردم، اما می توانید از re library برای استفاده از regex استفاده کنید.

"""A Streamlit app for getting the Google autocomplete queries
"""
import json

import requests
import streamlit as st

def google_autocomplete(keyword: str) -> list[str]:
    """Get Google autocomplete queries for a seed keyword

    Args:
        keyword (str): The seed keyword

    Returns:
        list[str]: A list of the autocomplete queries
    """
    google_autocomplete_api: str = "https://www.google.com/complete/search"
    google_autocomplete_params: dict = {
        "q": keyword,
        "cp": 8,
        "client": "gws-wiz",
        "xssi": "t",
        "hl": "en-US"
    }

    response = requests.get(google_autocomplete_api, params=google_autocomplete_params)

    list_google_autocomplete_uncleaned: list[list] = json.loads((response.content).decode("UTF-8")[5:])[0]
    list_google_autocomplete_cleaned: list[str] = [
        element[0].replace('<b>', '').replace('</b>', '')
        for element in list_google_autocomplete_uncleaned
        ]

    return list_google_autocomplete_cleaned

برنامه Streamlit

تا به حال بسته Streamlit را نصب کرده و عملکرد خود را برای دریافت کوئری های تکمیل خودکار گوگل تعریف کرده ایم. اکنون، بیایید برنامه واقعی را ایجاد کنیم.

برای مشاهده برنامه Streamlit، باید Streamlit را با دستور run streamlit_app.py در ترمینال اجرا کنیم تا برنامه ما به صورت محلی اجرا شود. پس از اجرای این دستور، با رفتن به آدرس http://localhost:8501/ می توانید برنامه را مشاهده کنید.

بله، خالی است زیرا ما هیچ عنوان و غیره را به آن اضافه نکردیم.

اجرای برنامه Streamlit از ترمینالتصویر از نویسنده، اکتبر 2022

یک عنوان به برنامه Streamlit اضافه کنید

بیایید یک عنوان به برنامه خود اضافه کنیم. همانطور که در بالا می بینید، من Streamlit را به عنوان st.

حال با فراخوانی تابع st.title() می‌توانیم یک عنوان با سبک عنوان به صفحه اضافه کنیم. بیایید بگوییم st.title (“این یک برنامه سئو سطح بعدی است”).

به یاد داشته باشید که پس از ویرایش فایل streamlit_app.py و ذخیره آن، یک نماد در گوشه سمت راست بالای صفحه ظاهر می شود و باید آن را فشار دهید. همیشه برگرد برای مشاهده تغییرات برنامه بدون رفرش صفحه.

دکمه همیشه بازگشت در برنامه Streamlitتصویر از نویسنده، اکتبر 2022

اکنون برنامه ما مانند تصویر زیر است. اگر طرح زمینه سیستم شما تیره است، برنامه شما دارای تم تیره است.

نگاهی به یک برنامه Streamlit با عنوانتصویر از نویسنده، اکتبر 2022

متن را به برنامه Streamlit اضافه کنید

برای افزودن یک پاراگراف متنی به برنامه، باید از تابع st.write() استفاده کنید. به عنوان مثال، st.write (“ایده های خود را واقعی کنید”).

برنامه Steamlitتصویر از نویسنده، اکتبر 2022

یک ورودی متن به برنامه Streamlit اضافه کنید

همانطور که در تابع تکمیل خودکار گوگل دیدید، یک آرگومان به نام کلمه کلیدی وجود داشت.

این آرگومان باید از ورودی کاربر باشد.

برای دریافت ورودی کاربر، می توانیم از یک فیلد ورودی متن در Streamlit استفاده کنیم. با st.text_input() می توانیم یک ورودی متن اضافه کنیم. به عنوان مثال، st.text_input («کلمه کلیدی seed شما چیست؟»).

همچنین برای اینکه بعداً از کلمه کلیدی ورودی برای عبور به تابع خود استفاده کنیم، باید آن را به یک متغیر اختصاص دهیم.

input_google_autocomplete_keyword: str = st.text_input(
    "What is your seed keyword?")

اکنون می خواهیم برنامه خود را زمانی که کلمه کلیدی ورودی وجود دارد اجرا کنیم. در اینجا از دستور if برای بررسی خالی بودن یا نبودن متغیر استفاده می کنیم.

if input_google_autocomplete_keyword:
    output_list_google_autocomplete: list[str] = google_autocomplete(
        input_google_autocomplete_keyword)
نگاهی به یک برنامه Streamlit با عنوان، متن و ورودی متنتصویر از نویسنده، اکتبر 2022

دانلود از برنامه Streamlit

بنابراین، ما یک عنوان، یک خط متن و یک فیلد متن ورودی برای دریافت کلمه کلیدی seed کاربر اضافه کرده‌ایم.

اکنون باید تابع نوشته شده خود را اجرا کنیم و یک دکمه دانلود برای کاربر ایجاد کنیم تا نتایج را در یک فایل متنی دریافت کند.

if output_list_google_autocomplete:
        st.download_button("Download the output",
                           ("\n").join(output_list_google_autocomplete))
نگاهی به برنامه Streamlit با عنوان، متن، ورودی متن و دکمه دانلودتصویر از نویسنده، اکتبر 2022

ما برنامه ساده خود را ساختیم! بیایید عنوان برنامه و فاویکون را تغییر دهیم.

قبل از آن، اجازه دهید کد بخش برنامه Streamlit را تا کنون ببینیم.

کد بخش برنامه Streamlitتصویر از نویسنده، اکتبر 2022

عنوان برنامه و فاویکون را تغییر دهید

عنوان پیش فرض برنامه streamlit_app · Streamlit و فاویکون برنامه نماد Streamlit است.

برای تغییر عنوان و فاویکون باید از st.set_page_config() استفاده کنیم.

همچنین، من ترجیح می‌دهم طرح‌بندی برنامه گسترده باشد (می‌توانید آن را آزمایش کنید).

st.set_page_config(
    page_title="Oh My App!",
    page_icon="😎",
    layout="wide"
)
برنامه Streamlit در مرورگرتصویر از نویسنده، اکتبر 2022

تم پیش فرض برنامه را تنظیم کنید

طرح زمینه برنامه بر اساس تنظیمات سیستم کاربر است، اما شخصاً، اغلب اوقات، متوجه می‌شوم که تم روشن کنتراست بهتری دارد – و نمی‌خواهم تیم من وقت خود را برای یافتن نحوه تغییر تم برنامه صرف کند.

برای تنظیم یک تم پیش فرض برای برنامه Streamlit، ابتدا باید یک پوشه ایجاد کنید و نام آن را streamlit. در داخل این پوشه یک فایل ایجاد کنید و نام آن را config.toml بگذارید.

در داخل config.toml باید خطوط زیر را وارد کنید تا تم پیش فرض برنامه خود را تنظیم کنید.

[theme]
base = "light"
کد فایل confing.toml برای سفارشی کردن تم برنامه Streamlitتصویر از نویسنده، اکتبر 2022

احراز هویت کاربران در Streamlit

تصور کنید که پس از استقرار برنامه خود، شخصی URL برنامه را پیدا کرده و به آن دسترسی پیدا می کند.

برای محافظت از برنامه خود، باید به کاربران قبل از استفاده از برنامه مجوز دهید – مانند بسیاری از SASS هایی که ما هر روز استفاده می کنیم.

برای یک برنامه Streamlit، می توانیم از بسته Streamlit-Authenticator استفاده کنیم. برای نصب آن، در ترمینالی که در پوشه برنامه شما قرار دارد، دستور pip3 install streamlit-authenticator را تایپ کنید و بسته را به برنامه خود وارد کنید.

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

streamlit_authenticator را به عنوان stauth وارد کنید

اکنون یک فایل config.yaml برای درج اطلاعات کاربری کاربران خود ایجاد کنید.

credentials:
  usernames:
    firstUser:
      email: firstuser@gmail.com
      name: The first username
      password: 12345 # Must be replaced with the hashed password
    secondUser:
      email: seconduser@gmail.com
      name: The second username
      password: 111213 # Must be replaced with the hashed password
cookie:
  expiry_days: 30
  key: some_signature_key
  name: some_cookie_name
preauthorized:
  emails:
    - my@gmail.com

همانطور که در سند بسته می بینید، اکنون باید رمزهای عبور را با ماژول های هاشر هش کنیم. من ترجیح می دهم یک IPython را باز کنم و خط کد زیر را اجرا کنم.

hashed_passwords = stauth.Hasher([‘12345’, ‘111213’]).تولید می کنند()

ایجاد ویجت ورود

اکنون باید یک ویجت ورود ایجاد کنیم که در آن کاربران بتوانند نام کاربری، رمز عبور خود را وارد کرده و سپس وارد برنامه شوند.

ابتدا باید بسته PyYAML را با دستور pip3 install pyyaml ​​نصب کرده و با import yaml وارد کنید.

سپس یک شی authenticator ایجاد کنید و ماژول ورود را رندر کنید.

with open("./config.yaml") as file:
    config = yaml.load(file, Loader=yaml.SafeLoader)

authenticator = stauth.Authenticate(
    config["credentials"],
    config["cookie"]["name"],
    config["cookie"]["key"],
    config["cookie"]["expiry_days"],
    config["preauthorized"]
)

name, authentication_status, username = authenticator.login("Login", "main")
ویجت ورود به سیستم Streamlitتصویر از نویسنده، اکتبر 2022

نمایش برنامه برای کاربرانی که با موفقیت وارد شده اند

اکنون می توانیم از متغیر authentication_status برای دیدن برنامه برای کاربرانی که با موفقیت وارد شده اند استفاده کنیم.

if authentication_status:
    authenticator.logout('Logout', 'main')
    # OUR APP CODE COMES HERE
elif authentication_status == False:
    st.error('Username/password is incorrect')
elif authentication_status == None:
    st.warning('Please enter your username and password')

برنامه Streamlit را با داکر اجرا کنید

اکنون در مرحله نهایی توسعه اپلیکیشن خود هستیم.

می‌توانید از سرویس‌های مختلفی مانند AWS، Google Cloud، Azure، Heroku، DigitalOcean و غیره برای اجرای برنامه‌تان استفاده کنید.

قبل از Dockerfile، بیایید فایل requires.txt را ایجاد کنیم. برای انجام این کار، می توانیم از دستور pip3 freeze > requires.txt استفاده کنیم.

Dockerfile Streamlit

برای استقرار برنامه ما، من از Python 3.9.10 استفاده می کنم.

FROM python:3.9.10
WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt
CMD ["streamlit", "run", "streamlit_app.py"]
EXPOSE 8501

بسته شدن

در این آموزش دیدیم که چگونه می‌توانیم یک رابط کاربری خیره‌کننده با پایتون خالص ایجاد کنیم و آن را با Docker پیاده‌سازی کنیم.

برای کسب اطلاعات بیشتر در مورد ویجت های مختلف Streamlit، به مرجع API مستند آنها مراجعه کنید.

منابع بیشتر:


تصویر ویژه: Yaran/Shutterstock





منبع

مطالب مرتبط