Skip to main content

Methodism

Methodism sizga djangoda API larni tezroq yaratish va tez ishlatish imkoni beradi.
Egamberdiyev Xudoyberdi Tomonidan Yaratilgan

O'rnatish uchun qo'llanma

  1. Virtual muhit yarating va faollashtiring:
python -m venv venv
# Windows: venv\Scripts\activate
# Linux/Mac: source venv/bin/activate
  1. Pip va setuptools ni yangilang (muhim!):
python -m pip install --upgrade pip setuptools wheel
  1. Methodism ni o'rnating:
pip install methodism

Agar Python 3.12+ da muammo bo'lsa, --no-build-isolation flagini qo'shing:

pip install methodism --no-build-isolation

Talablar: Python 3.8+, Django 4.2+, djangorestframework 3.14+

About

Ushbu Kutubxona Egamberdiyev Xudoyberdi Tomonidan yaratilgan bo'lib tog'ridan tog'ri django kutubxonasi ustiga qurulgan. Bu sizga API lar yozganda uni tez ishlatish va tezroq API yozish imkoni beradi. Avtomatik tarzda siz yozgan funksiyani method ga aylantirgan holatda api hosil qiladi

filelar

  • methodism/costumizing.py ushbu file tayyor bir qator claslarni custom holarga o'tqazilgan varianti hisoblanadi.
  • methodism/decors.py Kerakli decoratorlar (params_required, public_method va boshqalar).
  • methodism/error_messages.py bo'lishi mumkin bo'lgan xatoliklar yig'ilgan lug'at ko'rinishidagi file.
  • methodism/helper.py Yordamchi funksiyalar joylangan file.
  • methodism/main.py Asosiy classlar yozilgan file
  • methodism/models.py Kerakli bo'lishi mumkin bo'lgan abstract modellar to'plami (Token, Otp)
  • methodism/paginator.py va methodism/sqlpaginator.py Ushbu fayllar bizga paginatsiya hosil qilishda yordam beradi

Ishlatish ketma ketligi

Birinchi navbatda kerakli kutubxonalarni o'rnatib olishingiz kerak

From GitHub

pip install -r requirements.txt

From PyPi

pip install methodism

Yuklab olib bo'lgach O'zingizga views.py faylida kerakli bo'lgan classni yozing va uni urls.py ga ulang, class ga esa methodism dagi METHODISM classidan vorislik bering.

Example in views.py

from methodism import METHODISM

# agar bundan foydalansangiz settings.INSTALLED_APPS ga 'rest_framework.authtoken' ni qo'shib qo'ying
from rest_framework.authtoken.models import Token 
from app import services


class YourClass(METHODISM):

    file = services              # yoki yo'l ko'rinishida: file = "app.services"
    get_methods = services       # faqat get methodlari uchun
    token_key = "Bearer"
    auth_headers = "Authorization"
    token_class = Token
    not_auth_methods = []        # ro'yxatdan o'tish shart bo'lmagan funksiyalarni qo'shib qo'ying ("*" - hammasi)
    
    
    """ Misol uchun yozgan funksiyangiz:
        def salom_dunyo(requests, params):
            return "salom"
        methodism:
            salom.dunyo
        
        siz yozgan har qanday ostki chiziqli yoki oddiy chiziqli funksiyalar nuqta orqali avtomatik ajratiladi!
        not_auth_methods = ['salom.dunyo']
     """

urls.py:

from django.urls import path
from app.views import YourClass

urlpatterns = [
    path("api/", YourClass.as_view()),
]

So'rov:

POST /api/
Authorization: Bearer <token>
{"method": "salom.dunyo", "params": {}}

GET /api/?method=salom.dunyo

Qo'shimcha sozlamalar (0.4.0 dan boshlab)

Atribut Default Vazifasi
token_lifetime None Token amal qilish muddati: timedelta(days=7) yoki sekundlarda int
use_http_status False True bo'lsa HTTP status status_code ga teng bo'ladi (401, 404, 500 ...). False - doim 200
show_exception_details None Xatolik tafsilotlarini javobda ko'rsatish. None - settings.DEBUG ga qarab
strict_methods False True bo'lsa faqat file ning o'zida yozilgan funksiyalar chaqiriladi (import qilinganlari emas)
database "default" (faqat SqlAPIMethodism) qaysi bazada sql ishlatiladi

settings.py da APP_NAME = "Loyiha nomi" yozib qo'yishingiz mumkin - u javobdagi "Origin" ga chiqadi (yozilmasa "Methodism").

Decoratorlar

from methodism import custom_response, params_required, public_method


@public_method                          # not_auth_methods ga yozish shart emas
@params_required("phone", "password")   # params da shu kalitlar bo'lmasa avtomatik xatolik qaytaradi
def auth_login(request, params):
    ...
    return custom_response(True, data={...})

Tillar

from methodism import MESSAGE, lang_helper, translate

lang = lang_helper(request)   # user.lang -> Accept-Language header -> 'en'
translate(MESSAGE['NotData'], lang)   # "Ma'lumot topilmadi" / "Информация не найдена" / ...

Modellar

from methodism import models


class Token(models.Token):     # 200 belgili kalit, METHODISM(token_class=Token) bilan ishlaydi
    pass


class Otp(models.Otp):
    max_tries = 3      # nechta xato urinishdan keyin yaroqsiz bo'ladi
    time_limit = 3     # necha daqiqa amal qiladi

# otp.is_valid(), otp.add_try(), otp.check_time_limit()

Navbatdagi class SqlAPIMethodism

from methodism import SqlAPIMethodism

# agar bundan foydalansangiz settings.INSTALLED_APPS ga 'rest_framework.authtoken' ni qo'shib qo'ying
from rest_framework.authtoken.models import Token 
from app import sql_services

class YourClass(SqlAPIMethodism):

    file = sql_services  # funksiyalar joylashgan file
    get_methods = sql_services  # faqat get methodlari uchun
    token_key = "Bearer"
    auth_headers = "Authorization"
    token_class = Token
    not_auth_methods = [] # ro'yxatdan o'tish shart bo'lmagan funksiyalarni qo'shib qo'ying

funksiya taxminan shunaqa yozilishi shart!

def funk(request, params):
    return "select colums from your_table", False

# funk 2ta qiymat qaytaradi: str -> sql va Bool
# True -> agar natija bitta bo'lsa
# False -> agar natija bittadan ko'p bo'lsa


# XAVFSIZ USUL: foydalanuvchidan kelgan qiymatlarni 3-qiymat sifatida bering (SQL injectiondan himoya)
def user_detail(request, params):
    return "select * from users where id = %s", True, [params["id"]]

# DIQQAT: params ni hech qachon f-string orqali sql ichiga qo'shmang!
# YOMON:  return f"select * from users where id = {params['id']}", True


# AGARDA XATOLIK QAYTARMOQCHI BO'LINSA
def funk(request, params):
    return {"error": "xatolik"}  # status=False bo'lib qaytadi
    # yoki: return custom_response(False, message="...")

# DIQQAT: GET zaprosi uchun funksiya yozilganda params kirib kelmaydi

Paginatsiya

from methodism.sqlpaginator import SqlPaginator

def users(request, params):
    total = ...  # select count(*) ...
    p = SqlPaginator(request, page=params.get("page"), per_page=20, count=total, max_per_page=100)
    rows = ...   # "select * from users limit %s offset %s", [p.limit, p.offset]
    return custom_response(True, data={"items": rows, **p.get_paginated_response()})

Testlar

pip install -r requirements-dev.txt
python -m pytest

Qo'shimcha ishlatishga oid qoidalarni Methodism Asosiy funksiyasiga kiritilgan documentatsiyadan ham o'rganib olish mumkin

O'zgarishlar tarixi: CHANGELOG.md


Kod Manbalari

Methodism Barcha uchun ochiq kutubxona. Kodlari va yoki qo'shimcha ma'lumotlarni bemalol githubdan yoki dasturchining o'zidan so'rab o'rganib olishingiz mumkin

Happy Time. Enjoy IT ;)

if you can't understand contact with programmer

Metadata

Release files for methodism 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for methodism 0.4.0
File Size Uploaded Provenance Actions
methodism-0.4.0.tar.gz 22.8 kB Without provenance Details for methodism-0.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for methodism 0.4.0
File Interpreter ABI Platform Actions
methodism-0.4.0-py3-none-any.whl Python 3 none any Details for methodism-0.4.0-py3-none-any.whl

Total release size: 43.6 kB

Release files / methodism-0.4.0.tar.gz

Download URL methodism-0.4.0.tar.gz
Size 22.8 kB
Tags Source
SHA-256 checksum
How to use checksums
f7bbf9af0e74f2541ef75c6fa34c84329c967a7405a91b692647b38cd124f1af
BLAKE2b-256 checksum
How to use checksums
395fa526620f6346785135a228a3c0076bb9eb2ee4908de267f6f3af5a713cb4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / methodism-0.4.0-py3-none-any.whl

Download URL methodism-0.4.0-py3-none-any.whl
Size 20.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
33990a2686f00850c4c6cd750baa234c1e5ed1172278547ba42a8272c280c50d
BLAKE2b-256 checksum
How to use checksums
bd9c2ed42a475c5c20dfabd2fe21d5cded653f84eaf339f4555d846e9f030d4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Security for methodism 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page