3.3. ‫تنظیمات‬

‫در پروژه‌های Backendpy تمامی تنظیمات پروژه، داخل فایل config.ini تعریف می‌شوند که در مسیر ریشه‌ی هر پروژه و در کنار ماژول اصلی پروژه قرار می‌گیرد. این فایل تنظیمات با فرمت INI تعریف می‌شود که شامل sectionها و optionها است. فهرست پایه‌ی تنظیمات چارچوب و مثالی از نحوه‌ی تعریف آن‌ها به شرح زیر است:‬

project/config.ini
; Backendpy Configurations

[networking]
allowed_hosts =
    127.0.0.1:8000
    localhost:8000
stream_size = 32768

[environment]
media_path = /foo/bar

[apps]
active =
    backendpy_accounts
    myproject.apps.myapp

[middlewares]
active =
    backendpy_accounts.middleware.auth.AuthMiddleware

[database]
host = localhost
port = 5432
name =
username =
password =

‫در فرمت INI برای commentها از ;، برای تعریف بخش‌ها از []، برای تعریف مقادیر از key = value و برای مقادیر لیست هم از خطوط زیرهم استفاده می‌شود.‬

  • ‫بخش networking شامل مقادیر مرتبط با سرور و شبکه است.‬

  • ‫بخش environment شامل مقادیری از قبیل مسیر فایل‌های media و … است.‬

  • ‫بخش apps شامل لیست اپلیکیشن‌های فعال پروژه است.‬

  • ‫بخش middlewares شامل لیست middlewareهای فعال پروژه است.‬

  • ‫بخش database هم در صورت استفاده از ORM پیش‌فرض، شامل تنظیمات مرتبط با آن خواهد بود.‬

‫همچنین ممکن است تنظیمات اختصاصی دیگری برای هر یک از اپلیکیشن‌های فعال موردنیاز باشد که آن‌ها نیز باید در این فایل مشخص شوند. برای مثال، یک اپلیکیشن حساب کاربری ممکن است تنظیماتی مانند زیر داشته باشد: ‬

[accounts]
aes_key = 11111111111111111111111111111111
auth_tokens_secret = 2222222222222222222222222222

توجه

‫برای محافظت از اطلاعات حساس موجود در فایل تنظیمات مانند گذرواژه‌ها، کلیدهای خصوصی و غیره، حتما دسترسی به این فایل را محدود کنید. به عنوان مثال، مجوز آن را روی 600 قرار دهید.‬

‫به منظور دسترسی به تنظیمات پروژه در داخل کد، می‌توانبد از فیلد config نمونه‌ی کلاس Backendpy پروژه استفاده کنید که حاوی این تنظیمات در قالب دیکشنری است:‬

project/main.py
from backendpy import Backendpy

bp = Backendpy()

print(bp.config['database']['host'])

‫و به‌طور مشابه در داخل توابع پردازش‌کننده‌ی درخواست‌ها:‬

project/apps/hello/handlers.py
async def hello_world(request):
    print(request.app.config['database']['host'])
    ...