RealWorld: aiohttp, कछुआ ORM

रियल वर्ल्ड पर 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.


# Configure default CORS settings.
cors = aiohttp_cors.setup(app, defaults={
    "*": aiohttp_cors.ResourceOptions(
        allow_credentials=True,
        expose_headers="*",
        allow_headers="*",
    )
})

# Configure CORS on all routes.
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 जोड़ सकते हैं?


टेस्ट


अभी तक नहीं जोड़ा गया। कार्य की शर्तों के अनुसार, परीक्षण किए जा सकते हैं, लेकिन उनकी आवश्यकता नहीं है।


निष्कर्ष


आपको प्रोफाइल, लेख और बहुत कुछ के लिए समर्थन जोड़ने की आवश्यकता है। सभी को सदियों और सदियों से उनके नाम का गौरव प्राप्त करने के लिए इस परियोजना के लिए आमंत्रित किया जाता है। अनुभवी डेवलपर्स के संकेत और टिप्पणियां स्वागत योग्य हैं।

Source: https://habr.com/ru/post/undefined/


All Articles