Python 新手,这段代码怎么写比较优雅?

新手上路,请多包涵

刚刚学习 python2 个月,这段代码基本功能实现了,不过视图函数里面写这么一堆好乱,请问下如何优化这段代码比较好呢,以下代码主要就是通过表单提交的数据,通过 ajax 发送 post 请求到后端,实现修改和新增


@admin.route("/set", methods=['GET', 'POST'])
def set_task():
    if request.method == 'GET':
        req = request.args
        task_id = int(req.get('id', 0))
        task_item = None
        if task_id:
            task_item = TaskItem.find(task_id)
        task_cats = TaskCategory.find_all()
        return render_template('admin/task/edit.html', task_item=task_item, task_cats=task_cats)

    req = request.values
    task_id = req['id'] if 'id' in req else ''
    task_name = req['task_name'] if 'task_name' in req else ''
    cat_id = int(req['cat_id']) if 'cat_id' in req else ''
    price = req['price'] if 'price' in req else ''
    quantity = int(req['quantity']) if 'quantity' in req else ''
    if task_id:
        task_item = TaskItem.find(task_id)
        model_task_item = task_item
        model_task_item.update_time = get_current_time()

    else:
        model_task_item = TaskItem()
        model_task_item.create_time = get_current_time()

    model_task_item.name = task_name
    model_task_item.category_id = cat_id
    model_task_item.price = price
    model_task_item.quantity = quantity
    model_task_item.summary = ''
    model_task_item.main_image = ''

    db.session.add(model_task_item)
    db.session.commit()
    return Success()
阅读 1.9k
3 个回答

简单的可以这么写.
弄清晰点就是除语法技巧外,把表单验证和model处理抽出来, 接口以restful形式提供.

挺好的,没什么好优化的,清晰易懂。
用上一堆所谓的 “优化”,把简单的事情变复杂,毫无意义。

一个简单的思路:

@admin.route("/set", methods=['GET', 'POST'])
def set_task():
    if request.method == 'GET':
        req = request.args
        task_id = int(req.get('id', 0))
        task_item = None
        if task_id:
            task_item = TaskItem.find(task_id)
        task_cats = TaskCategory.find_all()
        return render_template('admin/task/edit.html', task_item=task_item, task_cats=task_cats)

    else:
        req = request.values

        task_id = req.get('id', '')
        # task_id = req['id'] if 'id' in req else ''
        # 底下几句也可以使用get方法改造
        task_name = req['task_name'] if 'task_name' in req else ''
        cat_id = int(req['cat_id']) if 'cat_id' in req else ''
        price = req['price'] if 'price' in req else ''
        quantity = int(req['quantity']) if 'quantity' in req else ''

    # --------------
    # 在TaskItem类中增加构造方法,将以下代码提前出来
    # 最终变成 TaskItem.add(task_id=xxx, name=xxx, category_id=xxx, ...)

    if task_id:
        task_item = TaskItem.find(task_id)
        model_task_item = task_item
        model_task_item.update_time = get_current_time()

    else:
        model_task_item = TaskItem()
        model_task_item.create_time = get_current_time()

    model_task_item.name = task_name
    model_task_item.category_id = cat_id
    model_task_item.price = price
    model_task_item.quantity = quantity
    model_task_item.summary = ''
    model_task_item.main_image = ''

    db.session.add(model_task_item)
    db.session.commit()
    return Success()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题