Skip to content

7. Web Framework — ویب فریم ورک

Difficulty: Advanced — اعلیٰ
Time: ~45 minutes


Overview — جائزہ

Three full-stack web frameworks are available — pick one:

Framework Best For Requires
فاسٹ_اے_پی_آئی REST APIs, async, auto-docs pip install fastapi uvicorn
فلاسک Simple apps, HTML sites pip install flask
ڈجانگو Full apps with ORM + admin pip install django werkzeug

FastAPI — فاسٹ اے پی آئی

Minimal API

درآمد { فاسٹ_اے_پی_آئی } سے "اردو/ویب";

متغیر ایپ = نیا فاسٹ_اے_پی_آئی({ عنوان: "میری API", نسخہ: "1.0.0" });

@ایپ.حاصل("/")
غیر_متزامن فنکشن گھر(درخواست) {
    واپس { پیغام: "سلام دنیا" };
}

انتظار ایپ.چلائیں(پورٹ=8000);

Open http://localhost:8000/docs for the auto-generated Swagger UI.


Route Decorators — راستے

// GET — data retrieval
@ایپ.حاصل("/صارف/{شناخت}")
غیر_متزامن فنکشن صارف_حاصل(شناخت) {
    واپس { شناخت: شناخت, نام: "احمد" };
}

// POST — create
@ایپ.بھیجیں("/صارفیں")
غیر_متزامن فنکشن نیا_صارف(درخواست) {
    متغیر ڈیٹا = انتظار درخواست_باڈی(درخواست);
    واپس { بنایا: سچ, صارف: ڈیٹا };
}

// PUT — full update
@ایپ.تازہ_کریں("/صارف/{شناخت}")
غیر_متزامن فنکشن صارف_تازہ(شناخت, درخواست) {
    متغیر ڈیٹا = انتظار درخواست_باڈی(درخواست);
    واپس { تازہ: سچ };
}

// PATCH — partial update
@ایپ.پیچ("/صارف/{شناخت}")
غیر_متزامن فنکشن صارف_جزوی(شناخت, درخواست) {
    واپس { پیچ: سچ };
}

// DELETE
@ایپ.حذف("/صارف/{شناخت}")
غیر_متزامن فنکشن صارف_حذف(شناخت) {
    واپس { حذف: سچ };
}

Request Helpers — درخواست مددگار

درآمد { درخواست_باڈی, درخواست_سوال, درخواست_سرخی } سے "اردو/ویب";

@ایپ.بھیجیں("/ڈیٹا")
غیر_متزامن فنکشن ڈیٹا_حاصل(درخواست) {
    // JSON body
    متغیر جسم = انتظار درخواست_باڈی(درخواست);

    // Query param: /ڈیٹا?صفحہ=2
    متغیر صفحہ = درخواست_سوال(درخواست, "صفحہ", "1");

    // Header
    متغیر ٹوکن = درخواست_سرخی(درخواست, "Authorization", "");

    واپس { جسم: جسم, صفحہ: صفحہ };
}

Response Types — جواب کی اقسام

درآمد { جیسن_جواب, ایچ_ٹی_ایم_ایل_جواب, سادہ_جواب, رجوع_جواب, جالی_خطا } سے "اردو/ویب";

@ایپ.حاصل("/جے_سون")
فنکشن جے_سون_جواب_دو(درخواست) {
    واپس نیا جیسن_جواب({ پیغام: "ٹھیک" }, رمز=200);
}

@ایپ.حاصل("/صفحہ")
فنکشن ایچ_ٹی_ایم_ایل_دو(درخواست) {
    واپس نیا ایچ_ٹی_ایم_ایل_جواب("<h1>سلام</h1>");
}

@ایپ.حاصل("/رجوع")
فنکشن رجوع_کریں(درخواست) {
    واپس نیا رجوع_جواب("/نیا_راستہ");
}

@ایپ.حاصل("/محدود/{شناخت}")
غیر_متزامن فنکشن محدود(شناخت) {
    اگر (شناخت != "1") {
        نیا جالی_خطا(404, "نہیں ملا");
    }
    واپس { شناخت: شناخت };
}

Routers — راؤٹر (URL grouping)

درآمد { فاسٹ_اے_پی_آئی, راؤٹر } سے "اردو/ویب";

متغیر ایپ = نیا فاسٹ_اے_پی_آئی({ عنوان: "میری API" });

// Group routes under /کتابیں
متغیر کتاب_ر = نیا راؤٹر({ سابقہ: "/کتابیں", ٹیگ: ["کتابیں"] });

@کتاب_ر.حاصل("/")
غیر_متزامن فنکشن کتابیں_فہرست(درخواست) {
    واپس [{ شناخت: 1, عنوان: "اردو کا سفر" }];
}

@کتاب_ر.حاصل("/{شناخت}")
غیر_متزامن فنکشن کتاب_حاصل(شناخت) {
    واپس { شناخت: شناخت, عنوان: "اردو کا سفر" };
}

@کتاب_ر.بھیجیں("/")
غیر_متزامن فنکشن کتاب_بنائیں(درخواست) {
    متغیر ڈیٹا = انتظار درخواست_باڈی(درخواست);
    واپس { بنایا: سچ };
}

ایپ.شامل_کریں(کتاب_ر);    // register at /کتابیں

انتظار ایپ.چلائیں(پورٹ=8000);

CORS — کراس اوریجن

ایپ.کورس(
    اصل=["http://localhost:3000", "https://meri-site.com"],
    اسناد=سچ
);

Startup / Shutdown — آغاز و اختتام

@ایپ.آغاز
غیر_متزامن فنکشن شروع() {
    لکھو("سرور شروع ہوا");
}

@ایپ.اختتام
غیر_متزامن فنکشن ختم() {
    لکھو("سرور بند ہوا");
}

JWT Authentication — جے ڈبلیو ٹی توثیق

درآمد { جے_ڈبلیو_ٹی } سے "اردو/ویب";

متغیر راز = "طویل_خفیہ_کلید_یہاں";

// Create token — ٹوکن بنائیں
متغیر ٹوکن = جے_ڈبلیو_ٹی.بنائیں(
    { صارف_نام: "احمد", کردار: "منتظم" },
    راز,
    میعاد_منٹ=60    // expires in 60 minutes
);

// Verify token — ٹوکن جانچیں
کوشش {
    متغیر ڈیٹا = جے_ڈبلیو_ٹی.جانچیں(ٹوکن, راز);
    // NOTE: decoded payload is a plain dict — use ["key"] not .key
    لکھو(ڈیٹا["صارف_نام"]);    // احمد
    لکھو(ڈیٹا["کردار"]);        // منتظم
} پکڑو (غلطی_م) {
    لکھو("ٹوکن غلط یا ختم ہو گیا");
}

Using JWT in a route:

@ایپ.حاصل("/محفوظ")
غیر_متزامن فنکشن محفوظ_راستہ(درخواست) {
    متغیر auth = درخواست_سرخی(درخواست, "Authorization", "");
    اگر (نہیں auth.startsWith("Bearer ")) {
        نیا جالی_خطا(401, "ٹوکن ضروری ہے");
    }
    متغیر ٹوکن = auth.slice(7);
    کوشش {
        متغیر ڈیٹا = جے_ڈبلیو_ٹی.جانچیں(ٹوکن, راز);
        واپس { صارف: ڈیٹا["صارف_نام"] };
    } پکڑو (غلطی_م) {
        نیا جالی_خطا(401, "ٹوکن غلط");
    }
}

Flask — فلاسک

Minimal App

درآمد { فلاسک, فلاسک_جیسن, فلاسک_درخواست } سے "اردو/ویب";

متغیر ایپ = نیا فلاسک();

@ایپ.راستہ("/", طریقے=["GET"])
فنکشن گھر() {
    واپس فلاسک_جیسن({ پیغام: "سلام دنیا" });
}

@ایپ.راستہ("/ڈیٹا", طریقے=["POST"])
فنکشن ڈیٹا_لو() {
    متغیر درخواست_م = فلاسک_درخواست();
    متغیر جسم = درخواست_م.get_json();
    واپس فلاسک_جیسن({ موصول: جسم });
}

// Shorthand decorators
@ایپ.حاصل("/پنگ")
فنکشن پنگ() {
    واپس فلاسک_جیسن({ نتیجہ: "پونگ" });
}

ایپ.چلائیں(پورٹ=5000);

Flask Blueprints — بلیو پرنٹ

Group routes by feature:

متغیر صارف_بی = نیا بلیو_پرنٹ("صارفیں", سابقہ="/صارفیں");

@صارف_بی.حاصل("/")
فنکشن صارف_فہرست() {
    واپس فلاسک_جیسن(["احمد", "فاطمہ"]);
}

@صارف_بی.بھیجیں("/")
فنکشن نیا_صارف_فلاسک() {
    متغیر ڈیٹا = فلاسک_درخواست().get_json();
    واپس فلاسک_جیسن({ بنایا: سچ }, 201);
}

ایپ.بلیو_پرنٹ_شامل(صارف_بی);

Flask Helpers — مددگار فنکشن

Function Description
فلاسک_جیسن(data) JSON response
فلاسک_درخواست() Current request object
فلاسک_رجوع(url) HTTP redirect
فلاسک_سانچہ(file, **ctx) Render Jinja2 template
فلاسک_جواب(body, code, mime) Custom response
فلاسک_منسوخ(code) Abort with status code
فلاسک_نشست() Session object

Django — ڈجانگو

اردو: Django ماڈل ہمیشہ .ترتیب_دیں() کے بعد تعریف کریں۔

Setup + ORM + Routes

درآمد {
    ڈجانگو, ڈجانگو_ماڈل,
    متن_خانہ, عدد_خانہ, بولین_خانہ, ای_میل_خانہ, تاریخ_خانہ, وقت_خانہ,
    سب_حاصل, بنائیں, فلٹر, ایک_حاصل,
    ڈجانگو_جیسن, ڈجانگو_جواب, ڈجانگو_سانچہ
} سے "اردو/ویب";

// 1. Configure Django FIRST
متغیر ایپ = نیا ڈجانگو({
    ڈیبگ: سچ,
    ڈیٹا_بیس: "میرا_ڈیٹا.db",            // SQLite file
    خفیہ_کلید: "محفوظ-اصل-کلید-یہاں"
});
ایپ.ترتیب_دیں();

// 2. Define models AFTER configure
کلاس طالب_علم توسیع ڈجانگو_ماڈل {
    جامد نام = متن_خانہ(100);
    جامد ای_میل = ای_میل_خانہ(منفرد=سچ);
    جامد نمبر = عدد_خانہ(ڈیفالٹ=0);
    جامد داخلہ = تاریخ_خانہ(آج=سچ);
}

// 3. Create tables
ایپ.میزیں_بنائیں();

// 4. Views
فنکشن طلباء_نظارہ(درخواست) {
    متغیر طلباء = سب_حاصل(طالب_علم);
    متغیر نتیجہ = [];
    کے_لیے (متغیر ط میں طلباء) {
        نتیجہ.شامل({ نام: ط.نام, نمبر: ط.نمبر });
    }
    واپس ڈجانگو_جیسن(نتیجہ);
}

فنکشن نیا_طالب_نظارہ(درخواست) {
    اگر (درخواست.method == "POST") {
        بنائیں(طالب_علم,
            نام=درخواست.POST.get("نام", ""),
            ای_میل=درخواست.POST.get("ای_میل", ""),
            نمبر=70
        );
        واپس ڈجانگو_جیسن({ بنایا: سچ }, 201);
    }
    واپس ڈجانگو_جیسن({ غلطی: "POST صرف" }, 405);
}

// 5. Register URLs
ایپ.راستہ("طلباء/", طلباء_نظارہ, نام="طلباء");
ایپ.راستہ("طالب/", نیا_طالب_نظارہ, نام="نیا_طالب");

// 6. Start server
ایپ.چلائیں(پورٹ=8000);

Django ORM — ڈیٹا بیس

// Create — بنائیں
بنائیں(طالب_علم, نام="احمد", ای_میل="احمد@مثال.com", نمبر=85);

// Get all — سب حاصل
متغیر سب = سب_حاصل(طالب_علم);

// Filter — فلٹر
متغیر اچھے = فلٹر(طالب_علم, نمبر__gte=80);    // نمبر >= 80

// Get one — ایک حاصل
متغیر ایک = ایک_حاصل(طالب_علم, نام="احمد");
لکھو(ایک.نام);    // احمد

// Update
ایک.نمبر = 90;
ایک.save();

// Delete
ایک.delete();

Django Field Types — خانے کی اقسام

Function Django Field
متن_خانہ(زیادہ) CharField
طویل_متن() TextField
عدد_خانہ() IntegerField
اعشاریہ_خانہ(کل, اعشاریہ) DecimalField
بولین_خانہ() BooleanField
تاریخ_خانہ() DateField
وقت_خانہ() DateTimeField
ای_میل_خانہ() EmailField
فائل_خانہ(فولڈر) FileField
غیر_ملکی_کلید(ماڈل) ForeignKey

Socket.IO — ساکٹ آئی او

Real-time bidirectional events. Works with Flask or FastAPI:

With Flask (WSGI)

درآمد { فلاسک, فلاسک_جیسن } سے "اردو/ویب";
درآمد { ساکٹ_آئی_او } سے "اردو/ویب";

متغیر ایپ = نیا فلاسک();
متغیر سیو = نیا ساکٹ_آئی_او(ایپ=ایپ);

@ایپ.راستہ("/")
فنکشن گھر() {
    واپس فلاسک_جیسن({ حالت: "فعال" });
}

@سیو.پر("connect")
فنکشن پر_جڑنا(sid, environ) {
    لکھو(`${sid} جڑا`);
}

@سیو.پر("message")
فنکشن پر_پیغام(sid, ڈیٹا) {
    لکھو(`پیغام: ${ڈیٹا}`);
    // Echo back
    سیو.بھیجو("reply", { پیغام: ڈیٹا }, کمرہ=sid);
}

@سیو.پر("disconnect")
فنکشن پر_منقطع(sid) {
    لکھو(`${sid} منقطع`);
}

سیو.چلائیں(ایپ, پورٹ=5000);

With FastAPI (ASGI)

درآمد { فاسٹ_اے_پی_آئی } سے "اردو/ویب";
درآمد { ساکٹ_آئی_او } سے "اردو/ویب";

متغیر ایپ = نیا فاسٹ_اے_پی_آئی({ عنوان: "ریئل ٹائم" });
متغیر سیو = نیا ساکٹ_آئی_او(ایپ=ایپ);

@سیو.پر("chat")
غیر_متزامن فنکشن پر_چیٹ(sid, ڈیٹا) {
    // Broadcast to all
    انتظار سیو.نشر("chat", { سے: sid, پیغام: ڈیٹا });
}

سیو.چلائیں(ایپ, پورٹ=8000);

Practical Example: FastAPI CRUD — عملی مثال

درآمد { فاسٹ_اے_پی_آئی, راؤٹر, جالی_خطا, درخواست_باڈی } سے "اردو/ویب";

متغیر ایپ = نیا فاسٹ_اے_پی_آئی({ عنوان: "کتابیں API", نسخہ: "1.0.0" });

// In-memory store (use a real database in production)
متغیر ڈیٹا_بیس = [];
متغیر اگلی_شناخت = [1];

متغیر ر = نیا راؤٹر({ سابقہ: "/کتابیں", ٹیگ: ["کتابیں"] });

@ر.حاصل("/")
غیر_متزامن فنکشن سب_کتابیں(درخواست) {
    واپس ڈیٹا_بیس;
}

@ر.حاصل("/{شناخت}")
غیر_متزامن فنکشن ایک_کتاب(شناخت) {
    کے_لیے (متغیر ک میں ڈیٹا_بیس) {
        اگر (ک.شناخت == شناخت) { واپس ک; }
    }
    نیا جالی_خطا(404, "کتاب نہیں ملی");
}

@ر.بھیجیں("/")
غیر_متزامن فنکشن کتاب_شامل(درخواست) {
    متغیر ڈیٹا = انتظار درخواست_باڈی(درخواست);
    متغیر کتاب = { شناخت: اگلی_شناخت[0], عنوان: ڈیٹا.عنوان, مصنف: ڈیٹا.مصنف };
    اگلی_شناخت[0] += 1;
    ڈیٹا_بیس.شامل(کتاب);
    واپس کتاب;
}

@ر.حذف("/{شناخت}")
غیر_متزامن فنکشن کتاب_حذف(شناخت) {
    کے_لیے (متغیر ک میں ڈیٹا_بیس) {
        اگر (ک.شناخت == شناخت) {
            ڈیٹا_بیس.سے_نکالو(ک);
            واپس { حذف: سچ };
        }
    }
    نیا جالی_خطا(404, "کتاب نہیں ملی");
}

ایپ.شامل_کریں(ر);
انتظار ایپ.چلائیں(پورٹ=8000);

Running — چلانا

// FastAPI
انتظار ایپ.چلائیں(میزبان="0.0.0.0", پورٹ=8000, دوبارہ_لوڈ=سچ);

// Flask
ایپ.چلائیں(میزبان="0.0.0.0", پورٹ=5000, ڈیبگ=سچ);

// Django
ایپ.چلائیں(میزبان="0.0.0.0", پورٹ=8000);

← Previous: GUI | Next: Machine Learning →