Methodism sizga djangoda API larni tezroq yaratish va tez ishlatish imkoni beradi.
Egamberdiyev Xudoyberdi Tomonidan Yaratilgan
- Virtual muhit yarating va faollashtiring:
python -m venv venv
# Windows: venv\Scripts\activate
# Linux/Mac: source venv/bin/activate- Pip va setuptools ni yangilang (muhim!):
python -m pip install --upgrade pip setuptools wheel- Methodism ni o'rnating:
pip install methodismAgar Python 3.12+ da muammo bo'lsa, --no-build-isolation flagini qo'shing:
pip install methodism --no-build-isolationTalablar: Python 3.8+, Django 4.2+, djangorestframework 3.14+
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
methodism/costumizing.pyushbu file tayyor bir qator claslarni custom holarga o'tqazilgan varianti hisoblanadi.methodism/decors.pyKerakli decoratorlar (params_required,public_methodva boshqalar).methodism/error_messages.pybo'lishi mumkin bo'lgan xatoliklar yig'ilgan lug'at ko'rinishidagi file.methodism/helper.pyYordamchi funksiyalar joylangan file.methodism/main.pyAsosiy classlar yozilgan filemethodism/models.pyKerakli bo'lishi mumkin bo'lgan abstract modellar to'plami (Token,Otp)methodism/paginator.pyvamethodism/sqlpaginator.pyUshbu fayllar bizga paginatsiya hosil qilishda yordam beradi
pip install -r requirements.txtpip install methodismYuklab 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.
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
| 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").
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={...})from methodism import MESSAGE, lang_helper, translate
lang = lang_helper(request) # user.lang -> Accept-Language header -> 'en'
translate(MESSAGE['NotData'], lang) # "Ma'lumot topilmadi" / "Информация не найдена" / ...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()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'yingdef 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 kelmaydifrom 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()})pip install -r requirements-dev.txt
python -m pytestQo'shimcha ishlatishga oid qoidalarni Methodism Asosiy funksiyasiga kiritilgan documentatsiyadan ham o'rganib olish mumkin
O'zgarishlar tarixi: CHANGELOG.md
Methodism Barcha uchun ochiq kutubxona. Kodlari va yoki qo'shimcha ma'lumotlarni bemalol githubdan yoki dasturchining o'zidan so'rab o'rganib olishingiz mumkin