рдПрдХ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдЯрдЯреНрдЯреВ ORM рдПрдореНрдмреЗрдбрд┐рдВрдЧ

рдкрд┐рдЫрд▓реЗ рдкреНрд░рджрд░реНрд╢рди рдкреЛрд╕реНрдЯ рдиреЗ рдкреЛрдиреЛ рдУрдЖрд░рдПрдо рдХрд╛ рд╡рд░реНрдгрди Django ORM рдФрд░ SQLAlchemy рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╢рд╛рдирджрд╛рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд, рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреЛрдиреА рдУрдЖрд░рдПрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ, рд░реЛрд▓ рджреЗрдЦрд┐рдПред


рд▓рд╛рд▓рдЪ


рдмреЗрд╢рдХ, рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░рд▓реЛрднрди рд╣рдореЗрд╢рд╛ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдКрдкрд░ рдордВрдбрд░рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рдирдХреА рдЬрдбрд╝реЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдЯреВрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛, рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд░реИрдорд┐рдлрд╝рд╛рдЗрдб рдбреЗрдЯрд╛ рдореЙрдбрд▓, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП Django рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд▓рдЧ-рдЗрди рдХреА рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдорд╛рддреНрд░рд╛ рдиреЗ рдЗрд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рдФрд░ рдореЛрдЯрд╛ рдХреНрд░реЙрд╕ рд▓рдЧрд╛рдпрд╛ред

рд╡рд┐рдХрд▓реНрдк


рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, Django ORM рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреА рддрд▓рд╛рд╢ рдореЗрдВ, рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк Aldjemy рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред рдпрд╣ Django ORM рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ SQLAlchemy рдореЙрдбрд▓ рдХреА рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Django рдореЙрдбрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред SQLAlchemy рдХрд╛ рд╕рд╣реА рдФрд░ рдХреЗрд╡рд▓ рдЬрд╣рд╛рдВ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рд╕рдВрдкреВрд░реНрдг Django рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕рд╣рд┐рдд) рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдФрд░ рдХреЛрдб рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЪрд╛рдЯрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкреЛрди рдУрдЖрд░рдПрдо рдХреЛ Django ORM рдХреЛ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдпрд╛, рдЗрд╕реЗ рдбреАрдЬреЗрдиреА (рдбреАрдЬреЗрдВрдЧреЛ рдкреЛрдиреА) рдХрд╣рд╛ред

рд▓рдШреБ рднреНрд░рдордг


Djony рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдкрд░ djony рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pip install git+git://github.com/nnseva/djony.git@master#egg=djony рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рд╣рдо djony рдХреЛ рдЙрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╣реИрдВред рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдирд╡реАрдирддрдо рдЖрд╡реЗрджрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ Django рдореЙрдбрд▓ (рдЕрд░реНрдерд╛рддреН рдореЙрдбрд▓ - рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ) рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ 'p` (рд╢рдмреНрдж рдЯрдЯреНрдЯреВ рд╕реЗ)ред рдпрд╣ рдкреЛрдиреА рдУрдЖрд░рдПрдо рдореЙрдбрд▓ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЯрдЯреНрдЯреВ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдЖрдкрдХреЛ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдСрд░рдо рдореЙрдбреНрдпреВрд▓ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕реЗ рдкреЛрдиреА рдореЙрдбреНрдпреВрд▓ ( from pony import orm ) from pony import orm рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк djony.orm рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ pony.orm рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рдЪрд░, рд╕рд╛рде рд╣реА рд╕рд╛рде djony- рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЪрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЯрдЯреНрдЯреВ ORM рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдФрд░ рд░рд┐рд▓реЗрд╢рдирд╢рд┐рдк рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд▓реЗрдХреНрд╢рди рд╣реЛрдВрдЧреЗ (рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдкрдиреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Pony ORM рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдХрд╕рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛)ред

рдХрд╕реМрдЯреА


рдЕрдм рдЖрдЗрдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдСрдкрд░реЗрд╢рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

Django рдХреЗ рд▓рд┐рдП, рд╣рдо рддреИрдпрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ User.has_perm рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдмреЗрд╢рдХ, рдЯрдЯреНрдЯреВ ORM рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд░рд╛рдмрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

 def has_perm(user,perm): if not user.is_active: return False app_label,codename = perm.split('.') for p in orm.select( p for p in Permission.p if (user in p.user_set or user in p.group_set.user_set) and p.codename == codename and p.content_type.app_label == app_label ): return True return False 


рдЖрдЗрдП рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦреЗрдВ (рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 1000 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯреНрдЯреА рдХреА рднреВрдорд┐рдХрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реБрдП)ред

 >>> import test_pony >>> import test_django >>> test_django.test_django() check user permissions: django req/seq: 170.308759221 req time (ms): 5.8716886 >>> test_pony.test_pony() check user permissions: pony req/seq: 729.517146462 req time (ms): 1.3707697 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ 4 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛!

рдЖрд╡реЗрджрдиред рдЯреЗрд╕реНрдЯ рдХреЛрдбред



test_django.py


 import datetime from django.contrib.auth.models import User def test_django(): t1 = datetime.datetime.now() for i in range(10000): test() t2 = datetime.datetime.now() print "check user permissions: django req/seq:",10000/(t2-t1).total_seconds(),'req time (ms):',(t2-t1).total_seconds()/10. def test(): user = User.objects.get(username='testuser') return user.has_perm('auth.add_user') 


test_pony.py


 import datetime from django.contrib.auth.models import User, Permission def test_pony(): t1 = datetime.datetime.now() for i in range(10000): test() t2 = datetime.datetime.now() print "check user permissions: pony req/seq:",10000/(t2-t1).total_seconds(),'req time (ms):',(t2-t1).total_seconds()/10. from djony import orm @orm.db_session def test(): user = User.p.get(username='testuser') return has_perm(user,'auth.add_user') def has_perm(user,perm): if not user.is_active: return False app_label,codename = perm.split('.') for p in orm.select( p for p in Permission.p if (user in p.user_set or user in p.group_set.user_set) and p.codename == codename and p.content_type.app_label == app_label ): return True return False 

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


All Articles