Methodism
Methodism sizga djangoda API larni tezroq yaratish va tez ishlatish imkoni beradi.
Egamberdiyev Xudoyberdi Tomonidan Yaratilgan
O'rnatish uchun qo'llanma
- 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 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.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
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.