रियल वर्ल्ड पर aiohttp के लिए कोई उदाहरण नहीं है, और मैंने एक बनाने का फैसला किया। अनुभवी डेवलपर्स, ऐसा लगता है कि ऐसा करने के लिए कोई समय नहीं है, और aiohttp में शुरुआती समझ नहीं पाते हैं कि यह कैसे करना है। मैंने इसे कछुआ ORM के साथ करना शुरू कर दिया। प्रमाणीकरण करना शुरू करते समय।
मैं इस परियोजना को सही बनाना चाहता हूं, इसलिए कट के तहत अनुभवी aiohttp डेवलपर्स के लिए बहुत सारे सवाल हैं।
परियोजना स्थापना
कोष
भंडार का क्लोन:
git clone git@github.com: nomhoi / aiohttp-realworld-example-app -git
विकास में, मैंने पायथन 3.8 का उपयोग किया। निर्भरता स्थापित करें:
पाइप स्थापित करें -r आवश्यकताएँ
डेटाबेस को प्रारंभ करें:
अजगर init_db.py
हम सर्वर शुरू करते हैं:
अजगर -मैं नाली
भंडार में एक डाकिया संग्रह RealWorld.postman_collection.json है । इसे पोस्टमैन में आयात करें और आप परिणामी एपीआई की कोशिश कर सकते हैं।
PostgreSQL
डिफ़ॉल्ट रूप से, SQLite डेटाबेस का उपयोग किया जाता है।
PostrgeSQL का उपयोग करने के लिए, आपको DB_URL चर को /conduit/settings.py में बदलना होगा।
DB_URL = "पोस्टग्रेज: // पोस्टग्रेज: पोस्टग्रेज@0.0.0.0: 5432 / पोस्टर्स"
डेटाबेस सेवा शुरू करें:
docker-compose अप -d
उसके बाद, डेटाबेस को इनिशियलाइज़ करें:
अजगर init_db.py
प्रोजेक्ट फ़ाइल संरचना
Django: . .
, , RealWorld Django.
— conduit.
API
API
POST /api/users —
POST /api/users/login —
GET /api/user —
/authentication/views.py.
CORS
aiohttp_cors.
cors = aiohttp_cors.setup(app, defaults={
"*": aiohttp_cors.ResourceOptions(
allow_credentials=True,
expose_headers="*",
allow_headers="*",
)
})
for route in list(app.router.routes()):
cors.add(route)
, , .
, .
JWT
aiohttp_jwt:
app = web.Application(
middlewares=[
JWTMiddleware(
settings.SECRET_KEY,
whitelist=[
r'/api/users',
]
)
]
)
JWT , Authorization Token Bearer. Django — Token. .
User
Tortoise ORM
class TimestampedMixin:
created_at = fields.DatetimeField(auto_now_add=True)
updated_at = fields.DatetimeField(auto_now=True)
class AbstractBaseModel(Model):
id = fields.IntField(pk=True)
class Meta:
abstract = True
class User(TimestampedMixin, AbstractBaseModel):
username = fields.CharField(db_index=True, max_length=255, unique=True)
email = fields.CharField(db_index=True, max_length=255, unique=True)
password = fields.CharField(max_length=128)
class Meta:
table = "user"
def __str__(self):
return self.username
, Django :
ordering = ['-created_at', '-updated_at']
, User. .
Django: + PBKDF2. .
Tortoise ORM . , .
अब तक, बिना धारावाहिकों के किया जाता है। ऐसा प्रोजेक्ट मिला , लेकिन कछुआ ORM का एक पुराना संस्करण है।
धारावाहिकों के अन्य कार्यान्वयन हैं। शायद, उनके साथ विकास मुहावरेदार और तेज है। कोशिश करने की जरूरत है। ORM ने झुका दिया, अब हमें धारावाहिक जोड़ने की आवश्यकता है। या शायद अधिक renders जोड़ सकते हैं?
टेस्ट
अभी तक नहीं जोड़ा गया। कार्य की शर्तों के अनुसार, परीक्षण किए जा सकते हैं, लेकिन उनकी आवश्यकता नहीं है।
निष्कर्ष
आपको प्रोफाइल, लेख और बहुत कुछ के लिए समर्थन जोड़ने की आवश्यकता है। सभी को सदियों और सदियों से उनके नाम का गौरव प्राप्त करने के लिए इस परियोजना के लिए आमंत्रित किया जाता है। अनुभवी डेवलपर्स के संकेत और टिप्पणियां स्वागत योग्य हैं।