पर्यवेक्षित मशीन अनुवाद
यह सामग्री मानव-निर्मित शब्दावलियों और शैली गाइडों के मार्गदर्शन में मशीन जनरेशन द्वारा अनुवादित की गई है। चूँकि इस पाठ की समीक्षा लाइन-दर-लाइन मैन्युअल रूप से नहीं की गई है, इसलिए कभी-कभी त्रुटियाँ या अनाड़ी वाक्य-रचना हो सकती है।
किसी भी विसंगति की स्थिति में, मूल अंग्रेज़ी संस्करण ही प्रामाणिक स्रोत है।
Django Admin से आ रहे हैं
अगर आप Django Admin जानते हैं, तो starlette-admin आपको जाना-पहचाना लगेगा। दोनों declarative, प्रति-मॉडल कॉन्फ़िगरेशन से एडमिन इंटरफ़ेस जनरेट करते हैं, और दोनों इनलाइन एडिटिंग, बैच एक्शन और per-request अनुमतियाँ सपोर्ट करते हैं।
फ़र्क़ संरचनात्मक हैं। starlette-admin को Django की ज़रूरत नहीं है और वह किसी भी ASGI ऐप्लिकेशन पर चलता है, कई ORMs के साथ काम करता है, और इनबिल्ट user model थोपने के बजाय आपको अपना प्रमाणीकरण प्लग करने देता है।
यह guide हर प्रमुख ModelAdmin concept को उसके starlette-admin समकक्ष से मैप करती है, side-by-side कोड के साथ।
मानसिक मॉडल
| Django Admin concept | starlette-admin समकक्ष |
|---|---|
AdminSite |
आपके ऐप्लिकेशन पर माउंट किया गया Admin इंस्टेंस |
ModelAdmin |
ModelView subclass |
admin.site.register(Model, ModelAdmin) |
admin.add_view(MyView(Model)) |
urlpatterns में admin.site.urls |
admin.mount_to(app) |
| Django ORM | starlette_admin.contrib.* के ज़रिए SQLAlchemy, SQLModel, MongoEngine, Beanie या Tortoise ORM |
model पर __str__ |
__admin_repr__(self, request), जो async और request-aware है |
| model fields से inferred form fields | backend converter द्वारा infer किए गए Fields, प्रति फ़ील्ड अनुकूलन योग्य |
मॉडल रजिस्टर करना
from starlette_admin.contrib.sqla import Admin, ModelView
class PostView(ModelView):
fields = ["id", "title", "content", "published", "created_at"]
exclude_fields_from_list = ["content"]
searchable_fields = ["title", "content"]
admin = Admin(engine, title="Blog Admin", secret_key="change-me")
admin.add_view(PostView(Post, icon="fa fa-newspaper"))
admin.mount_to(app) # app is your FastAPI or Starlette instance
दो संरचनात्मक फ़र्क़ साफ़ दिखते हैं:
- एक फ़ील्ड लिस्ट हर पेज को सँभालती है।
fieldsएकमात्र source of truth है। फिर प्रति-पेज variations के लिए आपexclude_fields_from_list,exclude_fields_from_detail,exclude_fields_from_create, औरexclude_fields_from_editउपयोग करते हैं। Adminइंस्टेंस के पास database engine होता है। आप हर view को session पास नहीं करते।
लिस्ट पेज के विकल्प
| Django Admin | starlette-admin | नोट्स |
|---|---|---|
list_display |
fields में से exclude_fields_from_list घटाकर |
एक ही फ़ील्ड लिस्ट हर पेज को सँभालती है। |
callable या @admin.display वाला list_display |
ComputedField, या किसी भी फ़ील्ड पर getter= |
उदाहरण के लिए, ComputedField("full_name", getter=lambda request, obj: ...). date या image field जैसे typed फ़ील्ड पर getter= उपयोग करें ताकि उस type की rendering बनी रहे। |
| डिस्प्ले के लिए real column को reformat करना | फ़ील्ड पर formatter= |
एक dict[RequestAction, callable], इसलिए list, detail और export अलग-अलग format कर सकते हैं। Django को sorting बनाए रखने के लिए callable के साथ admin_order_field चाहिए; यहाँ कॉलम sortable ही रहता है। |
search_fields |
searchable_fields |
फ़ुल-टेक्स्ट सर्च और filter builder दोनों को power देता है। |
list_filter |
प्रति-फ़ील्ड filters= के साथ संयुक्त searchable_fields |
fixed sidebar की जगह nested AND/OR ग्रुप वाला visual builder मिलता है। Filters देखें। |
ordering |
fields_default_sort |
उदाहरण के लिए, fields_default_sort = [("created_at", True)] descending order में sort करता है। |
admin_order_field / sortability |
sortable_fields |
हर फ़ील्ड डिफ़ॉल्ट रूप से sortable होता है। |
list_editable |
inline_editable_fields |
उपयोगकर्ता किसी सेल को चुनकर वहीं edit कर सकते हैं। |
list_per_page |
page_size, page_size_options |
pagination limits नियंत्रित करता है। |
date_hierarchy |
Date filters, जैसे between और in the past |
कोई dedicated drill-down bar नहीं है; filter builder यह case cover कर लेता है। |
empty_value_display |
कोई formatter= entry, या null_template |
Formatters को None values मिलती हैं, इसलिए वे placeholder बदल सकते हैं। null_template rendered markup को ही बदल देता है। |
फ़ॉर्म
| Django Admin | starlette-admin | नोट्स |
|---|---|---|
fields / exclude |
fields, exclude_fields_from_create, exclude_fields_from_edit |
फ़ॉर्म fields की visibility नियंत्रित करता है। |
fieldsets |
form_layout |
FieldsetWidget, TabsWidget, GridWidget और RowWidget से आज़ादी से compose करें। |
readonly_fields |
फ़ील्ड पर read_only=True |
फ़ील्ड को create और edit views से exclude भी कर सकते हैं। |
prepopulated_fields |
SlugField("slug", populate_from="title") |
वही live slugification behavior। |
autocomplete_fields, raw_id_fields |
HasOne / HasMany का डिफ़ॉल्ट behavior |
Relation widgets शुरू से server-side search वाले Select2 inputs होते हैं। |
filter_horizontal / filter_vertical |
HasMany |
Searchable multi-select component की तरह render होता है। |
formfield_overrides |
fields लिस्ट में explicit entries |
Auto-detect किए गए field को सीधे replace करें: fields = ["id", TextAreaField("bio")] |
| कस्टम form validation | फ़ील्ड पर validators=, या hooks में FormValidationError |
Validators देखें। |
Form field to_python() / custom coercion |
फ़ील्ड पर parser= |
प्रत्येक RequestAction के लिए field की डिफ़ॉल्ट form या import parsing replace करता है। |
| Model form help text | help_text= |
किसी भी field definition पर उपलब्ध। |
Fieldsets उदाहरण
form_layout fieldsets से भी आगे जाता है: आप tabs, responsive grids और nested layouts बना सकते हैं। Form Layout देखें।
Inlines
starlette-admin foreign key तब detect कर लेता है जब वह unambiguous हो, और composite foreign keys सपोर्ट करता है। Advanced configurations के लिए Inline Forms देखें।
एक्शन
from starlette_admin import ActionSelection, action, flash
class ArticleView(ModelView):
actions = ["make_published", "delete"]
@action(
name="make_published",
text="Mark selected articles as published",
confirmation="Publish the selected articles?",
)
async def make_published(
self, request: Request, selection: ActionSelection
) -> None:
for article in await selection.rows():
article.published = True
flash(request, "Articles published")
जहाँ Django Admin QuerySet पास करता है, वहीं starlette-admin handler को एक ActionSelection object मिलता है। वह rows, primary keys और active filters lazily resolve करता है, और जब user सभी matching records select करता है तब भी इसी तरह व्यवहार करता है।
एक्शन confirmation dialog के अंदर कस्टम HTML फ़ॉर्म भी render कर सकते हैं, जो Django Admin में intermediate page बनाने जितना काम है। प्रति-पंक्ति operations के लिए @row_action और @link_row_action उपयोग करें, जिनका Django Admin में कोई समकक्ष नहीं है।
अनुमतियाँ और प्रमाणीकरण
Django Admin काम django.contrib.auth को सौंप देता है। starlette-admin इस समस्या को दो हिस्सों में बाँटता है: AuthProvider 'यह user कौन है' का जवाब देता है, और per-view methods 'वह क्या कर सकता है' का।
| Django Admin | starlette-admin |
|---|---|
django.contrib.auth login |
AuthProvider (इनबिल्ट sign-in page) या OAuthProvider (OIDC redirect flow) |
request.user |
request.state.admin_user |
has_module_permission |
view पर is_accessible(request) |
has_view_permission |
can_view_detail(request) |
has_add_permission |
can_create(request) |
has_change_permission |
can_edit(request) |
has_delete_permission |
can_delete(request) |
प्रति user get_readonly_fields |
can_access_field(request, field) |
| कोई समकक्ष नहीं | can_export(request), can_import(request), is_action_allowed(request, name) |
निम्नलिखित view deletion को admin role वाले users तक सीमित करता है:
class ArticleView(ModelView):
def can_delete(self, request: Request) -> bool:
return "admin" in request.state.admin_user.roles
हर can_* method को request मिलती है, इसलिए आपके authorization निर्णय current user, HTTP headers या request पर मौजूद किसी भी चीज़ को पढ़ सकते हैं।
सेव हुक और signals
| Django Admin | starlette-admin | नोट्स |
|---|---|---|
save_model(request, obj, form, change) |
view पर before_create / before_edit |
Async-native, और model instance के साथ parsed form data मिलता है। |
delete_model |
before_delete |
Deletion से पहले का logic सँभालता है। |
post_save और अन्य signals |
इवेंट | उदाहरण के लिए, admin.events.on(AdminEvent.AFTER_CREATE, handler) सभी views पर broadcast करता है। |
LogEntry परिवर्तन इतिहास |
Event system से ख़ुद बनाइए | अपनी audit table भरने के लिए AFTER_CREATE, AFTER_EDIT और AFTER_DELETE subscribe करें। |
messages.success(request, ...) |
flash(request, ...) |
Flash Messages देखें। |
साइट-व्यापी कॉन्फ़िगरेशन
| Django Admin | starlette-admin |
|---|---|
admin.site.site_header, site_title |
Admin(title="...") |
| Template override से कस्टम logo | Admin(logo_url="...", login_logo_url="...", favicon_url="...") |
AdminSite.index_template |
rich dashboard के लिए widgets के साथ Admin(index_view=...) |
templates/admin/ में template overrides |
Admin(templates_dir="..."), Templates देखें |
Multiple AdminSite instances |
अलग-अलग application paths पर माउंट किए गए multiple Admin instances |
ModelAdmin.get_queryset |
SQLAlchemy backend के लिए get_list_query, get_count_query या get_detail_query |
USE_I18N, LANGUAGES |
Admin(i18n_config=I18nConfig(default_locale="fr")) |
TIME_ZONE |
Admin(timezone_config=TimezoneConfig(...)), i18n और Timezones देखें |
बदलने से आपको क्या मिलता है
- End-to-end async: Handlers, lifecycle हुक और widget callbacks — सभी coroutines हो सकते हैं जो आपके existing event loop पर, आपके FastAPI एंडपॉइंट के साथ चलते हैं।
- Database flexibility: चाहे आप SQLAlchemy, SQLModel, MongoEngine या Beanie के ज़रिए MongoDB, या Tortoise ORM उपयोग करें, एक ही एडमिन कॉन्फ़िगरेशन लागू होता है।
- इनबिल्ट एक्सपोर्ट और इंपोर्ट: CSV, JSON और PDF, साथ ही
tablibके ज़रिए Excel और अन्य formats। Records सीधे एक्सपोर्ट करें, या preview-first wizard के ज़रिए bulk data इंपोर्ट करें जो row-level सत्यापन लागू करता है और optional primary key upserts सपोर्ट करता है। Export और Import देखें। - डैशबोर्ड विजेट: Stat cards, ApexCharts और layout grids मिलकर index pages और custom views बनाते हैं, इसलिए dashboard बनाने के लिए किसी external theme package की ज़रूरत नहीं। Custom Views और Widgets देखें।
- आधुनिक user interface: Tabler (Bootstrap 5) आपको डिफ़ॉल्ट रूप से डार्क मोड, column visibility toggles और search highlighting देता है।
जो आपको ख़ुद लाना होगा
- प्रमाणीकरण: कोई bundled user model या permission database नहीं है। अपने ऐप्लिकेशन के existing data store के आधार पर
AuthProvider.authenticate()implement करें। - Audit logging: starlette-admin कोई
LogEntrytable generate नहीं करता। event system को अपनी audit table से जोड़ें। - Model-level UI कॉन्फ़िगरेशन: Model-level
choices,verbose_nameऔर validators जैसी Django सुविधाएँ transfer नहीं होतीं। इन्हें इसकी जगह starlette-admin field पर declare करें,EnumField,label=औरvalidators=के साथ।