рд╢реБрд░реБрдЖрддреА
рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛
рд╣реЙрд╡рдЯреЛ рдХреИрд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд░рд┐рдд рдХреБрдЫ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ
Django рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рд▓реЗрдХрд┐рди рдЗрд╕ рдФрд░ рдЗрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ ...
UPD Lyrical рд╡рд┐рд╖рдпрд╛рдВрддрд░: рд╢реБрд░реВ рдореЗрдВ, рдореИрдВрдиреЗ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рдо рдХреА рдореЗрд░реА рдХреБрдЯрд┐рд▓ рд╕рдордЭ рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рдмрдХрд╡рд╛рд╕ рд▓рд┐рдЦрд╛ рдерд╛ред рдЕрдм рдирд┐рд░реНрдгрдп рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╣реА рдФрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдХрд╛ рдмрд╣реБрдд рдЖрднрд╛рд░реА рд╣реВрдВред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк
рдХреЛ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЗ
рдХрд╛рдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ (рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ!)ред
рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдереА рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдереА:
Django рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдЪрд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╣реИ:
def check_nickname(funct): def wrapper(request, *args, **kwargs): if request.user.profile.nickname: return funct(request, *args, **kwargs) else: from django.shortcuts import render_to_response from django.template import RequestContext return render_to_response('need_profile.html', RequestContext(request)) return wrapper
check_nickname
рдлрд╝рдВрдХреНрд╢рди,
Django
рдкреНрд░рдкрддреНрд░ рдХреЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛
request
рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдЬрд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ
wrapper
рдкрд╛рд╕ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдЬрд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд:
@f1 def func(x): pass # : def func(x): pass func = f1(func)
рдпрд╛рдиреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп,
wrapper
рдлрд╝рдВрдХреНрд╢рди
check_nickname
рдбреЗрдХреЛрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣
wrapper
рджреГрд╢реНрдп рдХреЗ рдореВрд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рддрд░реНрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП
рдлрд┐рд░ рд╕реЗ
рджреАрдкрд╛рд╡рд▓реАрдХрд░ рдХреЛ рдзрдиреНрдпрд╡рд╛рджред