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 — کراس اوریجن
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);