पर्यवेक्षित मशीन अनुवाद
यह सामग्री मानव-निर्मित शब्दावलियों और शैली गाइडों के मार्गदर्शन में मशीन जनरेशन द्वारा अनुवादित की गई है। चूँकि इस पाठ की समीक्षा लाइन-दर-लाइन मैन्युअल रूप से नहीं की गई है, इसलिए कभी-कभी त्रुटियाँ या अनाड़ी वाक्य-रचना हो सकती है।
किसी भी विसंगति की स्थिति में, मूल अंग्रेज़ी संस्करण ही प्रामाणिक स्रोत है।
विस्तारशील एडमिन इंटरफ़ेस
FastAPI और Starlette के लिए
अपने SQLAlchemy, SQLModel, Beanie, MongoEngine, या Tortoise ORM models से पूर्ण एडमिन इंटरफ़ेस जनरेट करें। Tabler UI kit पर निर्मित starlette-admin आपको list views, auto-generated forms, data exports, और secure authentication देता है। पूरा interface Python में configure करें — frontend code की एक भी line लिखे बिना।
pip install starlette-admin
बिल्ट-इन फ़ीचर्स
आपकी ज़रूरत की हर चीज box से बाहर काम करती है। हर core feature documented extension points include करता है, ताकि आप उसे अपनी requirements के अनुसार ढाल सकें।
Tables
Pagination, multi-column ordering, और state-preserving URLs के साथ data browse, search, और sort करें। List view से fields inline edit करें।
Filters
UI में nested AND/OR queries बनाएँ — text, numbers, dates, और booleans के लिए type-aware operators के साथ।
Forms और uploads
25 से अधिक field types और relational data के लिए forms automatically generate करें। File uploads local या S3 storage पर भेजें।
Actions
Standard Python decorators से bulk और row-level operations बनाएँ। हर run को confirmation modals और custom payload forms के पीछे gate करें।
Export और import
Records को CSV, Excel, JSON, PDF, या tablib द्वारा supported किसी भी format में export करें। Preview-first wizard से bulk import करें जो database में लिखने से पहले हर row validate करता है।
Auth और security
वह authentication provider connect करें जो आप पहले से उपयोग करते हैं। Production-ready defaults के साथ deploy करें — CSRF protection और exports/imports की built-in limits सहित।
Inline forms
Relational data को जगह पर manage करें। Page छोड़े बिना parent model form के भीतर child records edit करें।
Dashboards
Built-in statistic, chart, और table widgets से home page बनाएँ, या उसे पूर्ण custom view से replace कर दें।
i18n और timezones
Admin को multiple languages में serve करें — locale-aware formatting और precise timezone handling box से बाहर।
सब कुछ Python है
rapid development, readable syntax, और long-term maintainability के लिए डिज़ाइन किए गए pure Python API से पूर्ण admin interface बनाएँ।
एडमिन पैनल माउंट करें
कोई model register करें और admin panel को किसी भी FastAPI या Starlette application पर mount करें। फिर fastapi dev चलाएँ और /admin खोलें।
from fastapi import FastAPI
from sqlalchemy import create_engine
from starlette_admin.contrib.sqla import Admin, ModelView
from models import Base, Post
engine = create_engine("sqlite:///blog.db")
Base.metadata.create_all(engine)
app = FastAPI()
admin = Admin(engine, title="Blog Admin", secret_key="change-me")
admin.add_view(ModelView(Post, icon="fa fa-newspaper"))
admin.mount_to(app)
व्यूज़
Search, sorting, default ordering, और export formats plain class attributes से सेट करें। Create/edit forms को form_layout से arrange करें।
from starlette_admin.contrib.sqla import ModelView
class PostView(ModelView):
fields = ["id", "title", "author", "content", "published", "created_at"]
searchable_fields = ["title", "content"]
fields_default_sort = [("created_at", True)]
exporters = ["csv", "xlsx", "json"]
form_layout = [
("title", "author"),
"content",
("published", "created_at"),
]
admin.add_view(PostView(Post, icon="fa fa-newspaper"))
फ़ील्ड्स
Validation, per-page visibility, और starlette-admin values को कैसे पढ़े/दिखाए — इसे नियंत्रित करने के लिए किसी भी auto-detected field को override करें।
from starlette_admin import DateTimeField, RequestAction, StringField, TextAreaField
from starlette_admin.contrib.sqla import ModelView
class PostView(ModelView):
fields = [
"id",
StringField("title", required=True, help_text="Shown on the blog"),
TextAreaField("content", exclude_from_list=True),
StringField(
"author_email",
getter=lambda request, obj: obj.author.email,
formatter={RequestAction.LIST: lambda request, value: value or "unset"},
),
DateTimeField("created_at", read_only=True, exclude_from_create=True),
]
फ़िल्टर
Built-in query builder को अपने business rules से match करने वाले custom filters से extend करें। आपको जो operations चाहिए, वे underlying database model पर सीधे apply हो सकते हैं।
from datetime import datetime
from typing import Any
from starlette_admin.contrib.sqla import ModelView
from starlette_admin.filters.base import BaseFilter, FilterApplyContext, FilterDataType
class ActiveThisMonthFilter(BaseFilter):
name = "this_month"
label = "Created this month"
data_type = FilterDataType.NONE # No value input. The range comes from now().
def apply(self, ctx: FilterApplyContext) -> Any:
now = datetime.utcnow()
start = now.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
col = getattr(ctx.view.model, ctx.field_name)
return col.between(start, now)
class ProductView(ModelView):
fields = [
DateTimeField(
"created_at",
filters=[ActiveThisMonthFilter, ...],
),
]
एक्शन
Single decorator से business operations attach करें। Confirmation modals, custom forms, और flash messages framework में बने हैं।
from starlette.requests import Request
from starlette_admin import ActionSelection, action, flash
from starlette_admin.contrib.sqla import ModelView
class ArticleView(ModelView):
actions = ["publish", "delete"]
@action(
name="publish",
text="Mark as published",
confirmation="Publish the selected articles?",
submit_btn_text="Yes, publish",
)
async def publish(self, request: Request, selection: ActionSelection) -> None:
articles = await selection.rows()
for article in articles:
article.published = True
flash(request, f"{len(articles)} articles published.", "success")
प्रमाणीकरण
अपने credential check के चारों ओर तीन standard methods implement करें। Login page, sessions, और redirects starlette-admin handle कर लेता है।
from starlette.requests import Request
from starlette_admin.auth import AdminUser, AuthProvider, LoginFailed
class MyAuthProvider(AuthProvider):
async def login(self, username, password, remember_me, request: Request) -> None:
if not await check_credentials(username, password):
raise LoginFailed("Invalid username or password")
request.session["username"] = username
async def authenticate(self, request: Request) -> AdminUser | None:
if username := request.session.get("username"):
return AdminUser(username=username)
return None
async def logout(self, request: Request) -> None:
request.session.clear()
admin = Admin(engine, auth_provider=MyAuthProvider(), secret_key=SECRET)
डैशबोर्ड
Statistic, chart, और table widgets — जो हर request पर live data query करते हैं — से admin home page compose करें।
from starlette_admin import CardRowWidget, ChartWidget, CustomView, StatWidget
dashboard = CardRowWidget(
children=[
StatWidget(title="Orders", value_callback=count_orders, countup=True),
StatWidget(title="Revenue", value_callback=sum_revenue, color="success"),
ChartWidget(title="Sales", chart_type="area", series_callback=sales_series),
]
)
admin = Admin(
engine,
title="Shop Admin",
secret_key="change-me",
index_view=CustomView(menu_label="Dashboard", icon="fa fa-home", widget=dashboard),
)
प्लगइन और एक्सटेंशन
हर layer replaceable है। Features को self-contained plugins के रूप में package करें, या dedicated extension point में hook करके framework को अपने domain के अनुसार ढालें।
Zero-boilerplate plugins
Plugin package इंस्टॉल करें और उसे अपने Admin instance को pass करें। Fields, converters, templates, और assets स्वयं-ही-स्वयं wire up हो जाते हैं।
किसी भी component में hook करें
Predefined interfaces से आप हर concern को independently swap या extend कर सकते हैं। आवश्यक base class subclass करें और register करें — authentication flow से export formats तक सब customize किया जा सकता है।
- Custom fields
BaseField - Custom filters
BaseFilter - Exporters
BaseExporter - Importers
BaseImporter - Themes
BaseTheme - Auth providers
BaseAuthProvider - Storage backends
BaseStorage - Dashboard widgets
BaseWidget - Templates
templates_dir