خرید بک لینک

Vote count: 0

Here python code. Simple request with user login (i remove some details for cleaess):

def process_request(request):
    if post:
        validators_map = (('email', (validators.v_required, validators.v_email,)),
                          ('password', (validators.v_required,)))
        has_errors, errors_map = validators.validate_map(post, validators_map)
        context['errors'] = errors_map

        if not has_errors:
            r = user_login(email=post['email'], password=post['password'])
            if r['result'] == 'fail':
                context['error'] = r['error']
                retu Template('/login')
            elif r['result'] == 'ok':
                session['user_id'] = r['user_id']
                retu Template('/succes_login')

retu Template('/login')

With if statems it looks like little messy. I want to make this code more expressive. So then i look for my code i want to see:

1. Expressive steps of my computation (DSL steps).

2. Expressive control flow grapth. (transition between my DSL steps)

I try with this code:

def process_request(request):
    def do_post()
        validators_map = (('email', (validators.required, validators.email,)),
                          ('password', (validators.required,)))
        has_errors, errors_map = validators.validate_map(post, validators_map)
        context['errors'] = errors_map

        def has_form_errors():
            retu Template('/login')

        def form_valid_succes():
            r = user_login(email=post['email'], password=post['password'])

            def login_ok():
                session['user_id'] = r['user_id']
                retu Template('/succes_login')

            def login_fail():
                context['error'] = r['error']
                retu Template('/login')

            {True: login_ok,
             False: login_fail}[r['result'] == 'ok']()

        {True: has_form_errors,
         False: form_valid_succes}[has_errors]()

    def default():
        retu Template('/login')

    {True: do_post,
     False: default}[bool(request.post)]()

It took more code, but now I express and isolate each of my high level steps in separate function block. If I look at this idea without bound to programming language I can express it by FSM graph or CFG graph:

enter image description here

So to make this idea more expressive what should i use for implementation? may be some FSM libs? Can i use monads here ? By definition monad is a structure that represents computations defined as sequences of steps... some libs, examples?

So, how you think what is more expressive way of doing this?

asked 36 secs ago

برچسب: نویسنده: استخدام کار تاريخ: يکشنبه 20 تير 1395 ساعت: 19:28

صفحه بندی