डिपेंडेंसी इंजेक्शन और प्रमाणीकरण
साझा तर्क और JWT-आधारित प्रमाणीकरण के लिए FastAPI के DI सिस्टम का उपयोग करें।
डिपेंडेंसी इंजेक्शन और प्रमाणीकरण, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
निर्भरता इंजेक्शन क्या है
FastAPI का Depends() आपको साझा लॉजिक (डेटाबेस सत्र, प्रमाणीकरण जाँच और कॉन्फ़िगरेशन) घोषित करने देता है, जिसे रूट हैंडलर में अपने-आप इंजेक्ट किया जाता है।
from fastapi import FastAPI, Depends
app = FastAPI()
def get_db():
db = connect_db()
try: yield db
finally: db.close()
@app.get("/users")
def list_users(db = Depends(get_db)):
return db.query_all("users")निर्भरता फ़ंक्शन
निर्भरता कोई भी कॉल करने योग्य वस्तु हो सकती है। यह फ़ंक्शन, क्लास या किसी अन्य निर्भरता का उपयोग करने वाला फ़ंक्शन हो सकता है।
from fastapi import Depends, FastAPI
app = FastAPI()
def common_params(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
@app.get("/items")
def list_items(params: dict = Depends(common_params)):
return params
@app.get("/users")
def list_users(params: dict = Depends(common_params)):
return paramsक्लास निर्भरताएँ
संबंधित सेटिंग्स को एक साथ रखने के लिए क्लास को निर्भरता के रूप में उपयोग करें। क्लास को उसके __init__ आर्ग्युमेंट के साथ कॉल किया जाता है, जिन्हें इंजेक्ट किया जाता है।
from fastapi import Depends, FastAPI, Query
app = FastAPI()
class Pagination:
def __init__(self, page: int = Query(1,ge=1), size: int = Query(10,ge=1,le=100)):
self.page = page
self.size = size
self.offset = (page - 1) * size
@app.get("/items")
def list_items(pag: Pagination = Depends()):
return {"offset": pag.offset, "size": pag.size}OAuth2 पासवर्ड बियरर
Authorization हेडर से Bearer टोकन पढ़ने के लिए OAuth2PasswordBearer का उपयोग करें।
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2 = OAuth2PasswordBearer(tokenUrl="/token")
@app.get("/me")
def me(token: str = Depends(oauth2)):
return {"token": token} # validate token hereJWT टोकन
python-jose (या pyjwt) से JWT टोकन बनाएँ और उनका सत्यापन करें। लॉगिन पर टोकन लौटाएँ और प्रत्येक सुरक्षित रूट में उसका सत्यापन करें।
# pip install python-jose passlib
from jose import jwt, JWTError
SECRET_KEY = "change-me"
ALGORITHM = "HS256"
def create_token(data: dict) -> str:
return jwt.encode(data, SECRET_KEY, algorithm=ALGORITHM)
def verify_token(token: str) -> dict:
return jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])वर्तमान उपयोगकर्ता की निर्भरता
ऐसी get_current_user निर्भरता बनाएँ जो JWT का सत्यापन करे और प्रमाणित उपयोगकर्ता लौटाए।
from fastapi import Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from jose import jwt, JWTError
oauth2 = OAuth2PasswordBearer(tokenUrl="/token")
def get_current_user(token: str = Depends(oauth2)):
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
return payload["sub"]
except JWTError:
raise HTTPException(status_code=401, detail="Invalid token")
# @app.get("/me")
# def me(user=Depends(get_current_user)): return userपासवर्ड हैशिंग
सादे पासवर्ड कभी संग्रहीत न करें। bcrypt से हैश करने के लिए passlib का उपयोग करें।
from passlib.context import CryptContext
pwd_ctx = CryptContext(schemes=["bcrypt"], deprecated="auto")
def hash_pw(plain: str) -> str:
return pwd_ctx.hash(plain)
def verify_pw(plain: str, hashed: str) -> bool:
return pwd_ctx.verify(plain, hashed)टोकन एंडपॉइंट
ऐसा POST /token लागू करें जो फ़ॉर्म क्रेडेंशियल स्वीकार करे, पासवर्ड का सत्यापन करे और JWT लौटाए।
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordRequestForm
app = FastAPI()
@app.post("/token")
def login(form: OAuth2PasswordRequestForm = Depends()):
user = get_user_by_username(form.username)
if not user or not verify_pw(form.password, user.hashed_pw):
raise HTTPException(status_code=401, detail="Bad credentials")
token = create_token({"sub": form.username})
return {"access_token": token, "token_type": "bearer"}API कुंजी प्रमाणीकरण
सरल मामलों में, हेडर या क्वेरी पैरामीटर से API कुंजी का सत्यापन करें।
from fastapi import Depends, HTTPException, Security
from fastapi.security import APIKeyHeader
API_KEY_HEADER = APIKeyHeader(name="X-API-Key")
def require_api_key(key: str = Security(API_KEY_HEADER)):
if key != "secret-key":
raise HTTPException(status_code=403, detail="Forbidden")
return keyभूमिका-आधारित पहुँच नियंत्रण
निर्भरताओं में भूमिका जाँच जोड़कर प्रमाणीकरण के ऊपर अनुमतियों की एक अतिरिक्त परत बनाएँ।
from fastapi import Depends, HTTPException
def require_admin(user=Depends(get_current_user)):
if user.get("role") != "admin":
raise HTTPException(status_code=403, detail="Admins only")
return user
# @app.delete("/users/{uid}")
# def delete_user(uid: int, admin=Depends(require_admin)):निर्भरता कैशिंग
डिफ़ॉल्ट रूप से, किसी अनुरोध में निर्भरता को एक बार कॉल किया जाता है और उस अनुरोध में उसका उपयोग करने वाले सभी रूट के बीच उसका परिणाम साझा किया जाता है।
# The same db session object is shared:
@app.get("/summary")
def summary(
db = Depends(get_db), # db resolved once
stats = Depends(get_stats) # get_stats also uses get_db — same db instance
): ...त्वरित जाँच
FastAPI में Depends() क्या करता है?
पुनरावलोकन
साझा तर्क को इंजेक्ट करने के लिए Depends(func) का उपयोग करें। OAuth2PasswordBearer, JWT टोकन और get_current_user निर्भरता की सहायता से प्रमाणीकरण तैयार करें। पासवर्ड को passlib/bcrypt से हैश करें। आगे की निर्भरताओं के रूप में भूमिका-जाँच जोड़ें।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 76
- पाठ
- 320
अक्सर पूछे जाने वाले प्रश्न
क्या “डिपेंडेंसी इंजेक्शन और प्रमाणीकरण” पाठ निःशुल्क है?
हाँ—“डिपेंडेंसी इंजेक्शन और प्रमाणीकरण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“डिपेंडेंसी इंजेक्शन और प्रमाणीकरण” में मैं क्या सीखूँगा?
साझा तर्क और JWT-आधारित प्रमाणीकरण के लिए FastAPI के DI सिस्टम का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“डिपेंडेंसी इंजेक्शन और प्रमाणीकरण” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- FastAPI प्रोजेक्ट सेटअप और पहला एंडपॉइंट
- पाथ पैरामीटर, क्वेरी पैरामीटर और रिक्वेस्ट बॉडी
- डिपेंडेंसी इंजेक्शन और प्रमाणीकरण
- असिंक्रोनस एंडपॉइंट और डेटाबेस एकीकरण